
Фаззер командной строки для протокола Apache JServ (ajp13)
AJPFuzzer — это примитивный фаззер для протокола Apache JServ (ajp13).
Созданный на основе libajp13, инструмент позволяет создавать и отправлять AJP-сообщения с помощью удобного интерфейса командной строки. AJPFuzzer может создавать как правильно отформатированные сообщения AJP13 (все типы сообщений), так и мутации (например, переворот битов, сообщения с несоответствием типов и т.д.), что упрощает задачи тестирования безопасности, нацеленные на службы на основе AJP, такие как AJP-модули веб-серверов, контейнеры J2EE и многие другие.
Загрузите последний AJPFuzzer jar со страницы релизов
Запустите загруженный jar с помощью:
$ java -jar ajpfuzzer_v0.7.jar
Инструмент запустит оболочку. Введя ?list, можно вывести список всех доступных команд. Теперь вы можете подключиться к цели, используя:
AJPFuzzer> connect 127.0.0.1 8009
Затем вы можете отправить сообщение CPing (тип 10), просто введя '10' (для этого сообщения аргументы не требуются)
AJPFuzzer/127.0.0.1:8009> 10
На следующем скриншоте показан весь процесс выполнения:
Очевидно, что можно отправлять и более сложные сообщения, указав соответствующий тестовый пример и аргументы. Обратитесь к ?list , чтобы узнать все подробности о конкретной команде.
Например, мы можем отправить полностью настраиваемое сообщение типа ForwardRequest с помощью:
> forwardrequest 2 "HTTP/1.1" "/api/" 127.0.0.1 localhost porto 8009 false "Cookie:AAAA=BBBB" ""
Также можно отправить сообщение ForwardRequest с фаззингом произвольных элементов:
> genericfuzz 2 "HTTP/1.1" "/test.html" "127.0.0.1" "127.0.0.1" "server.name.test" 8009 false "Cookie:AAAA=BBBB" "secret:FUZZ" /tmp/list.txt
На сегодняшний день AJPFuzzer предоставляет следующие тестовые примеры:
| Id | Name | Description |
|---|---|---|
| 1 | body | Отправить сообщение тела от веб-сервера к контейнеру J2EE |
| 2 | forwardrequest | Начать цикл обработки запроса от веб-сервера к контейнеру J2EE |
| 3 | sendbodychunk | Отправить часть тела от контейнера J2EE к веб-серверу |
| 4 | sendheaders | Отправить заголовки ответа от контейнера J2EE к веб-серверу |
| 5 | endresponse | Отметить конец ответа, от контейнера J2EE к веб-серверу |
| 6 | getbodychunk | Получить дополнительные данные от запрашивающей стороны. Сообщение от контейнера J2EE к веб-серверу |
| 7 | shutdown | Отправить стандартный пакет завершения AJP13 |
| 8 | ping | Отправить пакет AJP13 ping (ping != CPing) |
| 9 | cpong | Отправить пакет AJP13 CPong |
| 10 | cping | Отправить пакет AJP13 CPing |
| 11 | forwardreqalltypes | Отправить пакет AJP13 ForwardRequest со всеми возможными типами пакетов |
| 12 | verbtampering | Отправить несколько запросов через AJP13 и выполнить HTTP Verb Tampering для обнаружения потенциальных уязвимостей обхода аутентификации |
| 13 | jettyleak | Отправить пакет AJP13 в стиле JettyLeak |
| 14 | hugelengthsmallbody | Отправить сообщения ForwardRequest+Body с большим Content-Length и маленьким Body |
| 15 | hugeheader | Отправить два пакета AJP13 ForwardRequest с длиной заголовка больше 0x9999 (например, A010) |
| 16 | fuzzbit | Создать сложный AJP13 ForwardRequest и начать переворот битов |
| 17 | fuzzslice | Создать AJP13 ForwardRequest, SendHeaders, ShutDown, 0xFF, 0x00. Разделить и отправить. |
| 18 | servletpath | Создать AJP13 ForwardRequest с произвольным атрибутом 'servlet_path' |
| 19 | bypassauthnull | Создать два AJP13 ForwardRequest с auth_type, установленным в 'null' |
| 20 | envars | Создать AJP13 ForwardRequest с req_attribute_code (10) для установки произвольных переменных окружения |
| 21 | hugepacketsize |
Новые тестовые примеры можно добавить, расширив класс AJPTestCases.java. Используя аннотацию @Command, инструмент распознает дополнительную команду и сделает ее доступной из CLI.
| Создать два AJP13 запроса с размером > 8192 байт |
| 22 | genericfuzz | Создать AJP13 ForwardRequest (GET), позволяющий фаззить произвольные элементы сообщения с помощью ключевого слова FUZZ |