Muy buenas a todos, después de mucho tiempo sin publicar, estreno nuevo blog bajo nuevo dominio (Esto ya parece mas profesional XD) y que mejor que estrenarlo con un proyecto capaz de controlar dispositivos de DJ. Suena bien no jeje.
Para añadir un poco de contexto, este proyecto nació debido a que me encanta ser DJ en mis ratos libres (Aunque no me gusta salir de fiesta como tal XD) y cuando vi que los aparatos profesionales tenían un RJ-45 dije, aquí hay mucha tela que cortar.
Claro, al ver esto, mi vena de curiosidad se infló y dije: ¿Que pasaría si yo cogiera un Switch con Port Mirroring, y empezará a esnifar todo el tráfico que sucede en estos aparatos? Y de aquí nació la herramienta NightClubMare y gracias a Securiters, que desde aquí recomiendo mucho seguirles en sus redes sociales, pude presentarla en la RootedCON de 2024.
Por cierto, para la gente interesada en la charla la tenéis disponible aquí en su canal de Youtube.
En el video, profundizo un poquito mas acerca de como funciona la herramienta, en este post me centraré en aquellos puntos interesantes que puede hacer y que mostré en la charla que hice.
Por cierto la herramienta la podéis encontrar aquí:
https://github.com/Davidc96/NightClubMare
Primeros pasos al iniciar la herramienta
Es importante destacar que para poder controlar estos dispositivos es necesario que el atacante esté dentro de la misma red de estos aparatos. Entonces es necesario que se haya comprometido algún switch o rúter Wi-Fi.
En este caso lo que se ha simulado es que se ha comprometido el rúter Wifi de un club y nosotros como atacantes podemos hacer maldades dentro de esa red.
Lo primero que nos pregunta la herramienta es la interfaz de red que queremos utilizar mostrándonos la opción de Wifi o Ethernet y sus correspondientes IPs configuradas.
Algo también interesante es que cuando seleccionamos la interfaz que queremos, nos pregunta si los dispositivos están conectados a un router. Esto es porque en el caso de que no tengan DHCP, estos aparatos se crean una red propia cuyo rango es 169.254.0.0/16.
En nuestro caso como hemos comprometido un AP, estos aparatos tienen DHCP por lo que cuando pongamos nuestra IP, ya estaríamos conectados a la red y con el comando «devices» aparecerán todos los dispositivos que formen parte de la red de Pioneer.
Esto es importante porque en el caso de que en vez de haber comprometido un AP, hemos comprometido un switch (por ejemplo grandes festivales o discotecas que tienen sus armarios de switches abiertos) podemos comunicarnos igualmente con ellos.
Esto aunque suene trivial, lo que pasa por detrás de las cámaras no es tan simple xD. La herramienta lo que hace es hacerse pasar por un dispositivo totalmente legal de Pioneer por lo que gracias a eso, puede ver la información de todos los dispositivos Pioneer conectados a la red.
Comandos utilizados:
devices
Parando la música o arrancándola
Una de las cosas que puedes hacer es parar la música de manera remota desde el ordenador. Para hacerlo lo que hay que hacer es seleccionar el CDJ que queremos parar la música usando el comando «select <device id>» y usamos «play» o «pause» en función de lo que queramos XD.
Creo que lo mejor es que lo veáis en directo jaja
Comandos utilizados:
devices
select <ID>
play
stop
Accediendo a las canciones del DJ
Otra cosa interesante que podemos hacer con la herramienta es acceder al pendrive donde el DJ tiene almacenado sus canciones. Es importante destacar que el acceso no es tan trivial ya que Pioneer utiliza su propia gestión de ficheros para sus dispositivos XD.
Para conectarnos a la base de datos es importante seleccionar aquel CDJ que tiene el pendrive, para saberlo es importante fijarse en la tabla que aparece al usar el comando «devices» y en el campo DatabaseAvailable ver si está a True.
Con eso podemos utilizar el comando «db connect <device_id>» para conectarse al pendrive.
La herramienta cuenta con una interfaz gráfica que se invoca con el comando «songmanager» y desde ahí podemos ver todas las canciones que tiene el DJ incluso descargarlas:
Os paso el clip para que lo veáis vosotros mismos jaja:
Comandos utilizados:
devices
db connect <deviceID>
songmanager
Tomando prestadas las canciones al DJ
Una de las características que tiene la interfaz del SongManager es el poder descargar cualquier canción por lo que si quieres una canción que has Shazameado en esa fiesta, puedes descargártela (Eso si pídele permiso al DJ antes de hacerlo 😉 )
Hacerlo es tan sencillo como buscar la canción que queremos en la caja de texto y darle al botón «Download».
Os dejo el clip para que los veáis vosotros mismos
Comandos utilizados:
Ningún comando utilizado
Siendo tu el DJ
Imagínate que le pides una canción que ya ha puesto el DJ porque te ha encantado, como el trabajo del DJ es ignorar tu petición xD ahora puedes contar con tu hacker de confianza para hacer estas cosas jeje.
Para cargar una canción en uno de los CDJ, es importante obtener el ID de la canción, con esa ID, si usamos el comando «track <track_id> load <device_id>» cargaremos una canción en ese deck XD
Veámoslo en el siguiente clip:
Comandos utilizados:
select <device_id>
db connect <device_id>
track <track_id> load <device_id>
play
Conclusiones y propuestas de mejora
Como habéis podido observar, la herramienta es capaz de causar verdaderas pesadillas a alguien que trabaja en una cabina de DJ. Imaginaos que alguien empieza a parar los CDJ porque sí o carga tracks que no debería u obtener de manera ilícita las canciones (Cada canción vale aproximadamente 2€, para que os hagáis una idea, un DJ tiene de media 120 canciones en su USB xD)
Hay muchas cosas que quiero mejorar de esta herramienta y una de ellas es acabar la interfaz Songmanager para que puedas cargar tracks a través de ella y que salga alguna barrita de progreso cuando te descargas una canción.
Otra cosa que me gustaría es poder portear esta herramienta a otras plataformas siendo la Flipper Zero una de mis plataformas preferidas. La idea la tengo solo faltan 2 cosas, la Flipper y tiempo XD
Por último como margen de mejora me gustaría documentar todo ProLinkLib, una librería desarrollada en C# para poder conectarse a estos dispositivos (es básicamente quien hace la magia).
Con esto concluye mi primera entrada en el blog después de mucho tiempo jaja, espero que os guste este nuevo diseño.
Y de nuevo agradecimientos a @Securiters por darme la oportunidad de exponer este proyecto en una conferencia.
Muchas gracias y hasta la próxima 🙂