Сергей Попов
22.04.2026, 12:09
https://forum.antichat.xyz/attachments/4951682/img_b7c8973b34.png
Можешь открыть эту статью, когда нужно быстро вспомнить: какой extension ставить под конкретную категорию OWASP, как его настроить, что смотреть в выводе. Статья основана на OWASP Top 10 2021; в августе 2025 опубликован RC новой версии с изменениями в классификации - сверяйтесь с owasp.org/Top10.
Prerequisites: Burp Suite Pro (актуальная версия), BApp Store доступен, Jython 2.7 настроен для Python-extensions (Python 2 синтаксис - да, в 2025 году, не спрашивайте); JRuby - только если работаете с редкими Ruby-extensions. Turbo Intruder и Param Miner требуют Burp Pro - в Community Edition либо работают криво, либо не работают вовсе.
Область применения: OWASP Top 10 2021 (2025 RC вносит изменения в классификацию - сверяйтесь с owasp.org/Top10). ATT&CK-техники: T1190 (Exploit Public-Facing Application), T1595.002 (Vulnerability Scanning), T1110 (Brute Force).
Основные команды
OWASP категорияExtensionУстановка / действиеЧто даётA01 – Broken Access Control
Autorize
BApp Store → Install → вставить cookie низкопривилегированного юзераРеплицирует каждый запрос с чужой сессией автоматом; красный = IDOR/privilege escalationA01 – Broken Access Control
AuthMatrix
BApp Store → задать матрицу ролей → RunТестирует все роли против всех эндпоинтов; chain-режим захватывает CSRF-токеныA05 – Security Misconfiguration
Additional Scanner Checks
BApp Store → пассивный сканЛовит отсутствие HSTS,
X-Content-Type-Options
,
X-XSS-Protection
; создаёт Issues автоматически (отсутствие заголовков - misconfiguration; HSTS косвенно касается и A02)A03 – Injection (SQLi)
ActiveScan++
BApp Store → активный скан включается автоматическиРасширяет встроенный сканер: XXE, SSTI, улучшенный SQLi, command injectionA03 – Injection (XSS)
Reflected Parameters
BApp Store → пассивный мониторинг трафикаОтслеживает параметры длиннее 3 символов, отражённые в ответе; дальше - в Scanner/RepeaterA03 – Injection (JS)
JSpector
BApp Store → пассивный краулинг JS-файловВытаскивает скрытые эндпоинты, hardcoded secrets, опасные функции (
eval()
,
document.write()
); T1059.007A04 – Insecure Design
Turbo Intruder
BApp Store → правый клик на запросе → Send to Turbo IntruderPython-скрипты для race conditions, тысячи req/sec; плоское потребление памятиA05 – Security Misconfiguration
HTTP Request Smuggler
BApp Store → правый клик → Launch smuggler probeАвтопроверка CL.TE, TE.CL и других вариантов smuggling (smuggling - зверь без чёткой прописки в OWASP Top 10; может быть и A04, и A05, зависит от root cause)A06 – Vulnerable Components
Retire.js
BApp Store → пассивный сканСверяет JS-библиотеки с базой известных CVE; третий по популярности в BApp StoreA07 – Auth Failures
JWT Editor
BApp Store → новая вкладка JWT в RepeaterРедактирование, подпись, атаки: alg:none, weak secret, key confusionA07 – Auth Failures
SAML Raider
BApp Store → вкладка SAML в ProxyXML signature wrapping, replaying assertions, XXE в SAMLA08 – Software Integrity
Java Deserialization Scanner
BApp Store → пассивный + ручной режимДетектирует сериализованные Java-объекты в cookies/API; интеграция с ysoserialA09 – Logging Failures
Logger++
BApp Store → расширенное логирование всех запросов/ответовФильтрация, экспорт, pattern matching - видишь что Burp делает за кулисамиA10 – SSRF
Collaborator Everywhere
BApp Store → автоматически инжектирует заголовки (
X-Forwarded-Host
и др.)Out-of-band callbacks в Burp Collaborator; результаты в Issues; T1190Recon (все категории)
Param Miner
BApp Store → правый клик → Guess (headers/params/cookies)До 65 000 имён параметров за запрос; находит unkeyed inputs для cache poisoning
Частые сценарии
IDOR через Autorize (A01)
Работает, когда приложение использует числовые/UUID идентификаторы в URL или теле запроса. Настраиваешь один раз - Autorize молотит фоном весь сеанс.
Код:
1. Autorize → вставить session cookie пользователя B (низкие права)
2. Браузер → залогиниться как пользователь A (высокие права)
3. Открывать /api/users/123, /api/orders/456 и т.д.
4. Autorize → смотреть строки с красным статусом "Bypassed!"
В выводе: колонка
Autorize Status
=
Bypassed!
- запрос вернул 200 с данными чужого пользователя. Готовый IDOR-репорт, можно нести заказчику.
Race condition через Turbo Intruder (A04)
Актуально для «применить промокод», «перевод средств», «регистрация уникального username» - всё, где бизнес-логика полагается на «один запрос = одно действие». Стандартный Intruder тут слишком медленный, даже не пытайтесь.
Python:
# Single-packet attack (James Kettle, 2023) - все запросы в одном TCP-пакете
def
queueRequests
(
target
,
wordlists
)
:
engine
=
RequestEngine
(
endpoint
=
target
.
endpoint
,
concurrentConnections
=
1
,
engine
=
Engine
.
BURP2
)
# gate-based синхронизация; для true single-packet attack нужен HTTP/2 на целевом сервере
for
i
in
range
(
20
)
:
engine
.
queue
(
target
.
req
,
gate
=
'race1'
)
engine
.
openGate
(
'race1'
)
Если в ответе несколько
200 OK
вместо одного - race condition подтверждена. Я на одном проекте так нашёл двойное списание промокода на 30% скидку - заказчик сначала не поверил, пока не увидел логи.
Обнаружение SSRF через Collaborator Everywhere (A10)
Тут вообще ничего делать не нужно - просто браузишь приложение после установки extension.
Код:
BApp Store → Collaborator Everywhere → Install
Burp → Project options → Misc → Burp Collaborator server (убедись что включён)
Браузер → проходишь по всем разделам приложения
Burp → Issues → фильтр "out-of-band"
Extension сам подставляет
X-Forwarded-Host
,
X-Forwarded-For
,
Referer
с Collaborator-payload. Если сервер делает DNS/HTTP запрос - видишь callback в Issues. Тихо, пассивно, без лишних телодвижений.
JWT-атака alg:none через JWT Editor (A07)
Классика - когда сервер принимает JWT без проверки подписи. Встречается реже, чем хотелось бы (нам), но когда встречается - это сразу critical.
Код:
Repeater → вкладка JWT Editor → выбрать токен
Для alg:none: Attack → "none" signing algorithm → убрать подпись → отправить
Для key confusion: Attack → "Embedded JWK" → встраивает ваш ключ в заголовок
Если 200 OK - сервер не валидирует подпись корректно
Сервер принял токен с
"alg":"none"
и вернул данные? Поздравляю - критическая уязвимость A07, можно писать в отчёт.
Gotchas & подводные камни
Вот тут начинается самое интересное - то, чего нет в документации к extensions:
Autorize не дружит с CSRF-токенами без дополнительной настройки. Если приложение генерирует per-request CSRF - бери AuthMatrix с chain-режимом, Autorize будет тупо получать 403
Reflected Parameters шумит на аналитических параметрах (
utm_source
,
fbclid
) - добавляй их в исключения сразу, иначе утонешь в false positives
Turbo Intruder хочет Python 2.x синтаксис в некоторых встроенных шаблонах. Скрипт падает? Проверь
print
vs
print()
- классика жанра
Collaborator Everywhere может положить приложение - инжекция заголовков вызывает ошибки на строгих WAF. На production-scope отключай, если не хочешь объяснять заказчику, почему у него сайт лёг
JWT Editor молчит, если токен не в стандартном
Authorization: Bearer
- вкладка JWT просто не появится. Ищи токен вручную в теле запроса или cookies
ActiveScan++ ощутимо тормозит сканирование - включай точечно на конкретных эндпоинтах, а не на весь scope
Java Deserialization Scanner без ysoserial.jar - это только пассивная детекция. Для активного тестирования нужен jar, без него половина функций бесполезна
Param Miner с
--guess-headers
триггерит rate limiting - на prod-like окружениях ставь задержку, иначе тебя забанят быстрее, чем найдёшь что-то полезное
Logger++ жрёт память как не в себя. Через 2-3 часа без фильтра по scope Burp начнёт задыхаться. Настрой фильтр сразу
SAML Raider ломается, если assertion передаётся в URL-encoded форме без предварительного декодирования - прогони через Hackvertor сначала
Quick-reference card
ЗадачаExtensionКлючевое действиеIDOR / privilege escalation
Autorize
Вставить cookie низкопривилегированного юзера → браузить как adminСкрытые параметры / cache poisoning
Param Miner
Правый клик → Guess headers/paramsJWT-атаки (alg:none, weak secret)
JWT Editor
Вкладка JWT в Repeater → AttackRace conditions
Turbo Intruder
Send to Turbo Intruder → race.py шаблонSSRF out-of-band
Collaborator Everywhere
Установить → браузить → смотреть IssuesXSS-векторы (reflected)
Reflected Parameters
Пассивный мониторинг → Send to ScannerУстаревшие JS-библиотеки (A06)
Retire.js
Пассивный скан → Issues с CVEHTTP Request Smuggling
HTTP Request Smuggler
Правый клик → Launch smuggler probe
Вопрос к читателям
При тестировании IDOR через Autorize на приложениях с GraphQL - как вы обходите проблему, что Autorize реплицирует запрос целиком, а GraphQL-эндпоинт один (
/graphql
), и разграничение идёт по телу запроса, а не по URL? Используете InQL в связке с Autorize, или пишете кастомный Burp extension через Montoya API для подмены
userId
в теле? Покажите вашу связку - интересно сравнить подходы на реальных проектах.
Можешь открыть эту статью, когда нужно быстро вспомнить: какой extension ставить под конкретную категорию OWASP, как его настроить, что смотреть в выводе. Статья основана на OWASP Top 10 2021; в августе 2025 опубликован RC новой версии с изменениями в классификации - сверяйтесь с owasp.org/Top10.
Prerequisites: Burp Suite Pro (актуальная версия), BApp Store доступен, Jython 2.7 настроен для Python-extensions (Python 2 синтаксис - да, в 2025 году, не спрашивайте); JRuby - только если работаете с редкими Ruby-extensions. Turbo Intruder и Param Miner требуют Burp Pro - в Community Edition либо работают криво, либо не работают вовсе.
Область применения: OWASP Top 10 2021 (2025 RC вносит изменения в классификацию - сверяйтесь с owasp.org/Top10). ATT&CK-техники: T1190 (Exploit Public-Facing Application), T1595.002 (Vulnerability Scanning), T1110 (Brute Force).
Основные команды
OWASP категорияExtensionУстановка / действиеЧто даётA01 – Broken Access Control
Autorize
BApp Store → Install → вставить cookie низкопривилегированного юзераРеплицирует каждый запрос с чужой сессией автоматом; красный = IDOR/privilege escalationA01 – Broken Access Control
AuthMatrix
BApp Store → задать матрицу ролей → RunТестирует все роли против всех эндпоинтов; chain-режим захватывает CSRF-токеныA05 – Security Misconfiguration
Additional Scanner Checks
BApp Store → пассивный сканЛовит отсутствие HSTS,
X-Content-Type-Options
,
X-XSS-Protection
; создаёт Issues автоматически (отсутствие заголовков - misconfiguration; HSTS косвенно касается и A02)A03 – Injection (SQLi)
ActiveScan++
BApp Store → активный скан включается автоматическиРасширяет встроенный сканер: XXE, SSTI, улучшенный SQLi, command injectionA03 – Injection (XSS)
Reflected Parameters
BApp Store → пассивный мониторинг трафикаОтслеживает параметры длиннее 3 символов, отражённые в ответе; дальше - в Scanner/RepeaterA03 – Injection (JS)
JSpector
BApp Store → пассивный краулинг JS-файловВытаскивает скрытые эндпоинты, hardcoded secrets, опасные функции (
eval()
,
document.write()
); T1059.007A04 – Insecure Design
Turbo Intruder
BApp Store → правый клик на запросе → Send to Turbo IntruderPython-скрипты для race conditions, тысячи req/sec; плоское потребление памятиA05 – Security Misconfiguration
HTTP Request Smuggler
BApp Store → правый клик → Launch smuggler probeАвтопроверка CL.TE, TE.CL и других вариантов smuggling (smuggling - зверь без чёткой прописки в OWASP Top 10; может быть и A04, и A05, зависит от root cause)A06 – Vulnerable Components
Retire.js
BApp Store → пассивный сканСверяет JS-библиотеки с базой известных CVE; третий по популярности в BApp StoreA07 – Auth Failures
JWT Editor
BApp Store → новая вкладка JWT в RepeaterРедактирование, подпись, атаки: alg:none, weak secret, key confusionA07 – Auth Failures
SAML Raider
BApp Store → вкладка SAML в ProxyXML signature wrapping, replaying assertions, XXE в SAMLA08 – Software Integrity
Java Deserialization Scanner
BApp Store → пассивный + ручной режимДетектирует сериализованные Java-объекты в cookies/API; интеграция с ysoserialA09 – Logging Failures
Logger++
BApp Store → расширенное логирование всех запросов/ответовФильтрация, экспорт, pattern matching - видишь что Burp делает за кулисамиA10 – SSRF
Collaborator Everywhere
BApp Store → автоматически инжектирует заголовки (
X-Forwarded-Host
и др.)Out-of-band callbacks в Burp Collaborator; результаты в Issues; T1190Recon (все категории)
Param Miner
BApp Store → правый клик → Guess (headers/params/cookies)До 65 000 имён параметров за запрос; находит unkeyed inputs для cache poisoning
Частые сценарии
IDOR через Autorize (A01)
Работает, когда приложение использует числовые/UUID идентификаторы в URL или теле запроса. Настраиваешь один раз - Autorize молотит фоном весь сеанс.
Код:
1. Autorize → вставить session cookie пользователя B (низкие права)
2. Браузер → залогиниться как пользователь A (высокие права)
3. Открывать /api/users/123, /api/orders/456 и т.д.
4. Autorize → смотреть строки с красным статусом "Bypassed!"
В выводе: колонка
Autorize Status
=
Bypassed!
- запрос вернул 200 с данными чужого пользователя. Готовый IDOR-репорт, можно нести заказчику.
Race condition через Turbo Intruder (A04)
Актуально для «применить промокод», «перевод средств», «регистрация уникального username» - всё, где бизнес-логика полагается на «один запрос = одно действие». Стандартный Intruder тут слишком медленный, даже не пытайтесь.
Python:
# Single-packet attack (James Kettle, 2023) - все запросы в одном TCP-пакете
def
queueRequests
(
target
,
wordlists
)
:
engine
=
RequestEngine
(
endpoint
=
target
.
endpoint
,
concurrentConnections
=
1
,
engine
=
Engine
.
BURP2
)
# gate-based синхронизация; для true single-packet attack нужен HTTP/2 на целевом сервере
for
i
in
range
(
20
)
:
engine
.
queue
(
target
.
req
,
gate
=
'race1'
)
engine
.
openGate
(
'race1'
)
Если в ответе несколько
200 OK
вместо одного - race condition подтверждена. Я на одном проекте так нашёл двойное списание промокода на 30% скидку - заказчик сначала не поверил, пока не увидел логи.
Обнаружение SSRF через Collaborator Everywhere (A10)
Тут вообще ничего делать не нужно - просто браузишь приложение после установки extension.
Код:
BApp Store → Collaborator Everywhere → Install
Burp → Project options → Misc → Burp Collaborator server (убедись что включён)
Браузер → проходишь по всем разделам приложения
Burp → Issues → фильтр "out-of-band"
Extension сам подставляет
X-Forwarded-Host
,
X-Forwarded-For
,
Referer
с Collaborator-payload. Если сервер делает DNS/HTTP запрос - видишь callback в Issues. Тихо, пассивно, без лишних телодвижений.
JWT-атака alg:none через JWT Editor (A07)
Классика - когда сервер принимает JWT без проверки подписи. Встречается реже, чем хотелось бы (нам), но когда встречается - это сразу critical.
Код:
Repeater → вкладка JWT Editor → выбрать токен
Для alg:none: Attack → "none" signing algorithm → убрать подпись → отправить
Для key confusion: Attack → "Embedded JWK" → встраивает ваш ключ в заголовок
Если 200 OK - сервер не валидирует подпись корректно
Сервер принял токен с
"alg":"none"
и вернул данные? Поздравляю - критическая уязвимость A07, можно писать в отчёт.
Gotchas & подводные камни
Вот тут начинается самое интересное - то, чего нет в документации к extensions:
Autorize не дружит с CSRF-токенами без дополнительной настройки. Если приложение генерирует per-request CSRF - бери AuthMatrix с chain-режимом, Autorize будет тупо получать 403
Reflected Parameters шумит на аналитических параметрах (
utm_source
,
fbclid
) - добавляй их в исключения сразу, иначе утонешь в false positives
Turbo Intruder хочет Python 2.x синтаксис в некоторых встроенных шаблонах. Скрипт падает? Проверь
vs
print()
- классика жанра
Collaborator Everywhere может положить приложение - инжекция заголовков вызывает ошибки на строгих WAF. На production-scope отключай, если не хочешь объяснять заказчику, почему у него сайт лёг
JWT Editor молчит, если токен не в стандартном
Authorization: Bearer
- вкладка JWT просто не появится. Ищи токен вручную в теле запроса или cookies
ActiveScan++ ощутимо тормозит сканирование - включай точечно на конкретных эндпоинтах, а не на весь scope
Java Deserialization Scanner без ysoserial.jar - это только пассивная детекция. Для активного тестирования нужен jar, без него половина функций бесполезна
Param Miner с
--guess-headers
триггерит rate limiting - на prod-like окружениях ставь задержку, иначе тебя забанят быстрее, чем найдёшь что-то полезное
Logger++ жрёт память как не в себя. Через 2-3 часа без фильтра по scope Burp начнёт задыхаться. Настрой фильтр сразу
SAML Raider ломается, если assertion передаётся в URL-encoded форме без предварительного декодирования - прогони через Hackvertor сначала
Quick-reference card
ЗадачаExtensionКлючевое действиеIDOR / privilege escalation
Autorize
Вставить cookie низкопривилегированного юзера → браузить как adminСкрытые параметры / cache poisoning
Param Miner
Правый клик → Guess headers/paramsJWT-атаки (alg:none, weak secret)
JWT Editor
Вкладка JWT в Repeater → AttackRace conditions
Turbo Intruder
Send to Turbo Intruder → race.py шаблонSSRF out-of-band
Collaborator Everywhere
Установить → браузить → смотреть IssuesXSS-векторы (reflected)
Reflected Parameters
Пассивный мониторинг → Send to ScannerУстаревшие JS-библиотеки (A06)
Retire.js
Пассивный скан → Issues с CVEHTTP Request Smuggling
HTTP Request Smuggler
Правый клик → Launch smuggler probe
Вопрос к читателям
При тестировании IDOR через Autorize на приложениях с GraphQL - как вы обходите проблему, что Autorize реплицирует запрос целиком, а GraphQL-эндпоинт один (
/graphql
), и разграничение идёт по телу запроса, а не по URL? Используете InQL в связке с Autorize, или пишете кастомный Burp extension через Montoya API для подмены
userId
в теле? Покажите вашу связку - интересно сравнить подходы на реальных проектах.