MDNSRecon
Hace poco me encontraba comversando con mi buen amigo Elliot Cutright tambien conocido como @nullthreat en twitter sobre los recientes cambios que he echo a DNSRecon y algunas de las mejoras. Me commento que uno de las capacidades originales de enumerar MDNS que tenia a principio era la que mas extranaba. Debido a que me movi a apoyar Python 3.x en adicion a Python 2.x y el abandono de la libreria que usaba para ello por el autor. MDNS es una tremenda manera de poder conseguir informacion sobre aquellas maquinas en tu mismo subnet que tengan el servicio de ZeroConf, Bonjour or MDNS anunciando capacidades, los records de MDSN son similares a los de DNS SRV donde conseguimos que se nos devuelva el servicio, blanco, puerto y hasta un record tipo texto con informacion adicional. En adicion a la informacion que se obtiene se puede resolver el IP del blanco tanto para IPv4 y para IPv6.
Basado en su peticion escribi un script en Ruby que se aprovechara de la herramienta avahi-browser y me puse como metas:
- Detectar la mayoria de records conocidos en la red donde se encuentre connectado el atacante.
- Resolver los hosts que se encuentren y excluir aquellos records que la maquina del atacante misma este communicando.
- Asegurarse que la data sea de vuelta en una manera donde pueda ser procesada y manipulada de manera facil por el atacante.
El script que resulto lo llame MDNSRecony lo pueden bajar de mi GitHub en https://github.com/darkoperator/MDNSRecon.
Este es el mensage de ayuda del mismo:
root@bt:~# ./mdnsrecon.rb -h
MDNSRecon Script by Carlos Perez (carlos_perez[at]darkoperator.com)
Version 0.1
Usage: mdnsrecon.rb [OPTION]
--help, -h:
show help
--csv <file>, -c <file>:
CSV File to save records found.
--grep, -g:
Output grepable Output with a delimiter of \
<service>\domain\host\IP\port\txt
If no option is given it will print records found to standard output.
Si corremos el mismo sin ninguna opcion este imprimira aquellos records que encuentre en pantalla:
root@bt:~# ./mdnsrecon.rb
[-] Records found:
[*] Host: bt.local
[*] IP: 192.168.192.128
[*] Port: 9
[*] Service:Workstation
[*] Text:''
[*]
[*] Host: ubuntu.local
[*] IP: 192.168.192.129
[*] Port: 9
[*] Service:Workstation
[*] Text:''
[*]
[*] Host: ubuntu.local
[*] IP: 192.168.192.129
[*] Port: 22
[*] Service:_udisks-ssh._tcp
[*] Text:''
[*]
Si queremos el formato en una manera donde podemos usar grep y cut para manipular facil mente el resultado usamos la opcion -g, en el ejemplo buscamos las maquinas con servicio SSH:
root@bt:~# ./mdnsrecon.rb -g | grep ssh |cut -d '\' -f4,5 --output-delimiter=" " -n
192.168.192.129 22
En caso que queramos usar otra herramienta como Excel o PowerShell para manipular gandes numeros de resultados o queremos compartir los mismos en una manera facil de entender podemos crear un archivo CSV con los resultado con -c o --csv:
root@bt:~# ./mdnsrecon.rb -c lab.csv
[-] Saving found records to lab.csv
[*] 3 Records saved
root@bt:~# cat lab.csv
service,domain,host,ip,port,txt
Workstation,local,bt.local,192.168.192.128,9,''
_udisks-ssh._tcp,local,ubuntu.local,192.168.192.129,22,''
Workstation,local,ubuntu.local,192.168.192.129,9,''
Hasta el momento solo estoy apoyando Debian, Ubuntu y Backtrack 5 como las plataformas donde se puede usar el script, Bactrack siendo la recomendada. Anadire otras distribuciones de Linux si la demanda lo amerita. Espero que encuentren el mismo util y como todo projecto que hago el insumo de ideas, mejoras o problemas siempre es bienvenido.