Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
t-reqs — Основанный на грамматике фаззер HTTP/1 с возможностью мутации | Kitploit
Инструменты/GitHubGitHub/bahruzjabiyev/t-reqs
Анализ уязвимостейВеб-безопасностьФаззингСтатьи и Исследования
GitHubbahruzjabiyev/t-reqs

t-reqs

Основанный на грамматике фаззер HTTP/1 с возможностью мутации

Репозиторий
263321 год назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

T-Reqs HTTP Fuzzer

T-Reqs (Two Requests) — это грамматический HTTP-фаззер, созданный в рамках статьи под названием «T-Reqs: HTTP Request Smuggling with Differential Fuzzing», представленной на ACM CCS 2021.

BibTeX статьи:

root@kitploit:~
@inproceedings{ccs2021treqs,
  title={T-Reqs: HTTP Request Smuggling with Differential Fuzzing},
  author={Jabiyev, Bahruz and Sprecher, Steven and Onarlioglu, Kaan and Kirda, Engin},
  booktitle={Proceedings of the 2021 ACM SIGSAC Conference on Computer and Communications Security},
  pages={1805--1820},
  year={2021}
}

О программе

T-Reqs предназначен для фаззинга HTTP-серверов путем отправки мутированных HTTP-запросов версий 1.1 и ниже. Он состоит из трех основных компонентов: 1) генерация входных данных, 2) мутация сгенерированных входных данных и 3) доставка их на целевой сервер(ы).

Генерация входных данных

Грамматика КСГ (CFG), подаваемая в фаззер, используется для генерации HTTP-запросов. Как показано в примере грамматики ниже, который адаптирован для фаззинга строки запроса, каждый компонент строки запроса и возможные значения для каждого из них явно указаны. Это позволяет генерировать корректные запросы с различными формами строки запроса, а также рассматривать каждый компонент строки запроса как отдельную единицу с точки зрения мутации.

root@kitploit:~
 '<start>':
     ['<request>'],
 '<request>':
     ['<request-line><base><the-rest>'],
 '<request-line>':
     ['<method-name><space><uri><space><protocol><separator><version><newline>'],
 '<method-name>':
     ['GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'CONNECT', 'OPTIONS', 'TRACE', 'PATCH'],
 '<space>':
     [' '],
 '<uri>':
     ['/_URI_'],
 '<protocol>':
     ['HTTP'],
 '<separator>':
     ['/'],
 '<version>':
     ['0.9', '1.0', '1.1'],
 '<newline>':
     ['\r\n'],
 '<base>':
     ['Host: _HOST_\r\nConnection:close\r\nX-Request-ID: _REQUEST_ID_\r\n'],
 '<the-rest>':
     ['Content-Length: 5\r\n\r\nBBBBBBBBBB'],

Мутация входных данных

Каждый компонент может быть помечен двумя способами: изменяемая строка (string mutable) и изменяемое дерево (tree mutable) (см. пример конфигурации). Если компонент является изменяемой строкой, то случайный символ может быть удален, заменен или вставлен в случайную позицию. В примере ниже (слева) последний символ в версии протокола (1) удален, третья буква в имени метода (S) заменена на R, а косая черта вставлена в начале URI. Если же компонент является изменяемым деревом, то случайный компонент может быть удален, заменен или вставлен в случайную позицию внутри этого компонента. Пример ниже (справа) показывает три мутации дерева, примененные к компоненту строки запроса: 1) method заменен на protocol, 2) дополнительный URI вставлен после текущего URI, 3) существующий proto удален.

Mutation Types

Использование

Конфигурация

Фаззер должен быть проинформирован о предпочтениях пользователя относительно генерации и мутации входных данных. Более конкретно, входная грамматика, изменяемые компоненты, предпочтения мутации и прочее должны быть указаны в файле конфигурации (см. пример конфигурации).

Режимы запуска

Для возможности воспроизведения сгенерированных и мутированных входных данных в каждой итерации используется номер зерна (seed). Фактически, этот номер зерна служит начальным значением для генерации случайных чисел во время формирования и мутации входных данных. В зависимости от того, как эти зерна передаются фаззеру, он работает в одном из двух режимов: индивидуальный и массовый. В индивидуальном режиме входные данные генерируются и мутируются на основе зерен, указанных пользователем. В команде ниже указано одно зерно (например, 505). Альтернативно, список зерен можно указать с помощью опции -f (см. страницу справки для получения дополнительной информации).

root@kitploit:~
python3 main.py -i -c config -s 505

В массовом режиме (который используется по умолчанию) фаззер начинает с нуля в качестве значения зерна и увеличивает его на каждой итерации до достижения конечного числа. Начальное и конечное числа можно настроить.

root@kitploit:~
python3 main.py -c config

Dockerfile

Мы также предоставляем Dockerfile, чтобы вы могли запустить код t-reqs. Выполните следующие команды для начала работы:

root@kitploit:~
# run the command below under the directory which has the Dockerfile
docker build -t test/treqs .

# create a container after you built the image using the command above
docker run -ti test/treqs bash

# run the commands below in the started docker shell
cd t-reqs/
python3 code/main.py -c config -n -i -s90

Поиск новых векторов контрабанды HTTP-запросов

Контрабанда HTTP-запросов (HTTP Request Smuggling) основана на различиях в поведении при разборе тела запроса между серверами, где один сервер использует заголовок Transfer-Encoding, а другой предпочитает заголовок Content-Length для определения границ тела запроса, или один сервер игнорирует тело запроса, в то время как другой его обрабатывает.

Чтобы проанализировать разбор тела запроса серверами в ответ на различные мутации в различных формах HTTP-запроса, необходимо установить на эти серверы механизм обратной связи, который сообщал бы нам о поведении при разборе тела. Один из способов установки механизма обратной связи на сервер — запустить сервер в режиме обратного прокси и настроить его на пересылку запросов сценарию «поставщика обратной связи» (feedback provider), работающему как служба. Эта служба измеряет длину тела в полученных запросах и сохраняет ее для последующего сравнения с другими серверами.

Пример сценария «поставщика обратной связи» доступен в этом репозитории. Однако этот сценарий отправляет информацию о длине тела обратно в ответе, предполагая, что эта информация хранится на стороне клиента.

Лицензия

T-Reqs лицензирован под лицензией MIT.

Скачать инструмент