При ата­ке на веб‑при­ложе­ние иног­да нуж­но мно­гок­ратно выпол­нить цепоч­ку каких‑то дей­ствий. Самый яркий при­мер — перебор паролей или вто­рого фак­тора аутен­тифика­ции либо мно­гок­ратное исполь­зование ресур­сов. Для это­го есть раз­ные инс­тру­мен­ты. Какой из них выб­рать, если, нап­ример, нам пот­ребу­ется тысячу раз под­ряд выпол­нить пять зап­росов через HTTP, под­держи­вая одну и ту же сес­сию? Я выберу Burp Suite, и вот почему.

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

Ес­ли тебе труд­но реали­зовать подоб­ные задачи при помощи язы­ков прог­рамми­рова­ния или ты счи­таешь, что на это уйдет мно­го вре­мени, мож­но вос­поль­зовать­ся Burp Suite. Этот инс­тру­мент пре­дос­тавля­ет сра­зу нес­коль­ко спо­собов авто­мати­зации:

  • мак­росы;
  • пла­гин Stepper от сто­рон­них раз­работ­чиков;
  • пла­гин Turbo Intruder от соз­дателей Burp Suite.

Мы погово­рим о том, что дают эти под­ходы, об их воз­можнос­тях и огра­ниче­ниях.

Рас­смат­ривать работу этих трех под­ходов мы будем на при­мере задачи, которую при­ходит­ся решать очень час­то: перебор четырех­знач­ных одно­разо­вых паролей, которые исполь­зуют­ся... Да поч­ти вез­де. Кста­ти, на bug bounty за экс­плу­ата­цию та­ких уяз­вимос­тей мож­но получить не­малое воз­награж­дение.

В качес­тве испы­татель­ного стен­да прек­расно подой­дет за­дание с обра­зова­тель­ного ресур­са PortSwigger Academy, тре­бующее от нас выпол­нения сотен мно­гоша­говых пов­торя­ющих­ся дей­ствий.

 

Описание задачи

Вот как сфор­мулиро­вана тес­товая задача на сай­те PortSwigger Academy:

Двух­фактор­ная аутен­тифика­ция в этой лабора­тории уяз­вима перед брут­форсом. Ты уже получил имя поль­зовате­ля и пароль, но не име­ешь дос­тупа к верифи­каци­онно­му коду поль­зовате­ля 2FA. Что­бы решить эту проб­лему, перебо­ром най­ди код 2FA и получи дос­туп к стра­нице акка­унта Кар­лоса.

Учет­ные дан­ные жер­твы: carlos:montoya.

Осо­бен­ность этой задачи сос­тоит в том, что здесь недос­таточ­но прос­то переб­рать код одно­разо­вого пароля (One Time Password — далее OTP) с сущес­тву­ющей сес­сией, потому что пос­ле двух неп­равиль­ных попыток при­ложе­ние перес­тает счи­тать сес­сию валид­ной. Для решения задания нам пред­сто­ит выпол­нять пре­даутен­тифика­цию при помощи учет­ных дан­ных, а пос­ле это­го попытать­ся пред­ска­зать OTP-код.

 

Подробнее о задании

Нам дана стра­ница аутен­тифика­ции, которая выг­лядит сле­дующим обра­зом.

Страница аутентификации
Стра­ница аутен­тифика­ции

При вво­де учет­ных дан­ных при­ложе­ние отправ­ляет сле­дующий зап­рос на сер­вер:

POST /login HTTP/1.1
Host: ace61ff51f4557d880dbab96004f009d.web-security-academy.net
Cookie: session=rcnBF1vzBD00ZSjcoswRzttRrEPIQNj2
Content-Type: application/x-www-form-urlencoded
Content-Length: 70
csrf=AxCZcrNQ1Y7x8xTI9odKun0alLM34a9a&username=carlos&password=montoya

Ес­ли мы вве­дем учет­ные дан­ные кор­рек­тно, на экра­не появ­ляет­ся сле­дующая стра­ница вво­да OTP-кода.

Страница ввода OTP
Стра­ница вво­да OTP

Пос­ле вво­да слу­чай­ного OTP-кода при­ложе­ние отпра­вит сле­дующий зап­рос:

POST /login2 HTTP/1.1
Host: ace61ff51f4557d880dbab96004f009d.web-security-academy.net
Cookie: session=2gt4P1gFqzyxZJIonAlFv9czYetD5pm0
Content-Type: application/x-www-form-urlencoded
Content-Length: 51
csrf=W9Nei8NhTXl5usVKeynuZ3kbjRHaVjW7&mfa-code=1234

Ес­ли мы смо­жем уга­дать OTP-код, мы решим задание. Шанс уга­дать, по сути, не так уж и мал: 1 к 10 000. С уче­том того что количес­тво попыток у нас не огра­ниче­но, пусть и тре­бует допол­нитель­ных дей­ствий, резуль­тат гаран­тирован на 100%.

Что важ­но знать, преж­де чем мы прис­тупим к решению этой задачи?

  1. При­ложе­ние исполь­зует сес­сион­ный иден­тифика­тор, который мы получа­ем при вхо­де на сайт. Он изме­няет­ся пос­ле пер­вого эта­па аутен­тифика­ции при помощи кор­рек­тных учет­ных дан­ных.
  2. Пос­ле аутен­тифика­ции у нас есть толь­ко две попыт­ки вво­да OTP-кода. Пос­ле двух неудач­ных попыток наша сес­сия инва­лиди­рует­ся и при­ходит­ся начинать весь про­цесс с начала.
  3. При­ложе­ние исполь­зует CSRF-токены, которые меня­ются при каж­дом зап­росе. Их необ­ходимо под­хва­тывать и под­менять для каж­дого нашего POST-зап­роса.

Ос­талось авто­мати­зиро­вать про­цесс получе­ния сес­сии, вво­да пер­вичных учет­ных дан­ных, под­хва­та CSRF-токенов и попыток пред­ска­зания OTP-кода. Прис­тупим!

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

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

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

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


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