RacePWN - это библиотека librace а также утилита racepwn, которые предназначены для тестирования web-приложения, а также других протоколов, использующих TCP соединие на сетевую атаку типа race condition.
librace - это библиотека написанная на языке программирования Си и предназначенная для создания и отправки по сети множественного количества однотипных запросов к одному хосту. Библиотека поддерживает 2 типа рейсов:
- Параллельный - в данном режиме для каждого из запросов создается отдельное соединение. Запросы отправляются одновременно (с помощью использования неблокирующей записи). Опционально отправка запроса может быть разбита на 2 части. Первая - отправка основной части запроса, вторая - отправка последней части запроса, через некоторое время. Время задержки, а также размер последней части можно задавать.
- Последовательный - в данном режиме запросы склеиваются в один большой запрос, который отправляется через одно соединение.
racepwn - утилита, написанная на golang и имплементирующая интерфейс работы с librace, с помощью задания параметров через конфиг, написанный на json.
[
{
"race": {
// задание параметров работы
"type": "paralell", // режим работы
"delay_time_usec": 10000, // время задержки перед отправкой последней части данных
"last_chunk_size": 10 // размер последней части данных
},
"raw": {
"host": "tcp://localhost:8080", // имя и порт хоста к кому соединяемся
"ssl": false, // флаг использования ssl
"race_param": [
{
// параметры тела запроса
"data": "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n", // данные запроса
"count": 100 // количество пакетов
}
]
}
}
]
Поддерживаются 2 режима работы. Запуск как консольная утилита, а также как веб-сервис.
В данном режиме работы на вход приложения подается файл конфигурации. Приложение выполняет запросы к серверу, а потом прекращает работу. Пример запуска:
racepwn < config.json
В данном режиме утилита начинает работу в качестве веб-сервиса. Для работы необходимо сделать POST-запрос
по пути /race
с содержимым файла конфигурации.
Имя хоста и порт должны быть заданы с помощью ключа -hostname
Пример запуска:
racepwn -hostname "localhost:8080"
Пример
curl -i -X POST localhost:8080/race --data @<(cat config.json)
- clang или gcc
- golang
- libevent (libevent-dev)
- openssl (libssl-dev)
- cmake
Для запуска процесса сборки необходимо выполнить ./build.sh
.
Внимание : сборка тестировалась только для linux.
- Собираем образ и запускаем
docker build -t racepwn .
docker run -it racepwn bash
- Запускаем приложение в контейнере
racepwn < /home/config.json
- Поддержка HTTP2.
- Парсинг HTTP ответов.
- Написание модуля для python.