
Инструментарий Prime для аудита и эксплуатации межсайтовой подделки запросов (CSRF).
XSRFProbe — это продвинутый инструментарий для аудита и эксплуатации межсайтовой подделки запросов (CSRF/XSRF). Оснащённый мощным движком сканирования и множеством систематических проверок, он способен обнаруживать большинство случаев уязвимостей CSRF, связанных с ними обходов, а также генерировать эксплуатируемые proof of concept для каждой найденной уязвимости. Дополнительная информация о работе XSRFProbe приведена в разделе XSRFProbe Internals на вики.
Вики XSRFProbe • Начало работы • Общее использование • Расширенное использование • Внутреннее устройство XSRFProbe • Галерея
Origin: null), а также обходы через переопределение метода и Content-Type.--max-urls, --max-depth и --crawl-timeout).У каждой проверки XSRFProbe есть уникальный идентификатор. ID отображается в выводе консоли (например, [T6] VULNERABLE: ...) и сохраняется как поле test_id каждой находки в JSON-отчёте (наряду с её severity и, где применимо, примечанием об exploitability в поле details), так что каждая находка ссылается на конкретную проверку, которая её породила.
Проверки
S*требуют опциональной интеграции headless-браузера (--browser). ПроверкиT*/M*/R*/O*— это проверки на уровне HTTP, управляемые движком сравнения ответов/бенчмаркинга.
Давайте посмотрим на несколько реальных сценариев работы XSRFProbe:
Полную информацию по использованию см. на вики — Общее использование и Расширенное использование.
XSRFProbe можно легко установить одной командой:
pip install xsrfprobe
pip install .
xsrfprobe --help
--browser, --auto-validate-poc) дополнительно требуют, чтобы geckodriver был доступен в вашем PATH (или указан через --geckodriver-path).xsrfprobe-output. В этой папке можно просмотреть подробные логи и информацию, собранную во время сканирования (передайте --json для машинно-читаемого отчёта).XSRFProbe в настоящее время имеет версию v3.0.0, работа лицензирована в соответствии с GNU General Public License (GPLv3).
Не используйте этот инструмент на реальном сайте!
Это связано с тем, что инструмент предназначен для автоматического выполнения всевозможных отправок форм, что может навредить сайту. Иногда вы можете испортить базу данных и, скорее всего, вызвать DoS на сайте.
Тестируйте на disposable/тестовом сайте!
Использование XSRFProbe для тестирования веб-сайтов без предварительного взаимного согласия может рассматриваться как незаконная деятельность. Ответственность за соблюдение всех применимых местных, государственных и федеральных законов лежит на конечном пользователе. Автор не несёт ответственности и не отвечает за любое неправомерное использование или ущерб, причинённый этой программой.
Этот проект основан исключительно на моих собственных исследованиях и моём собственном опыте работы с веб-приложениями по атакам типа Cross-Site Request Forgery. Вы можете просмотреть исходный код, чтобы лучше понять, как был создан этот инструментарий. Полезные запросы на слияние, идеи и проблемы приветствуются. Если вы хотите увидеть, как разрабатывается XSRFProbe, загляните на Доску разработки.
Создано с ♡ от @0xInfection
| ID | Категория | Проверка |
|---|
D1 | Наличие токена | Отсутствует анти-CSRF токен (общая подделка запроса) |
D2 | Наличие токена | Форма входа не имеет CSRF-токена (login CSRF) |
T2 | Манипуляция токеном | Валидация привязана к методу запроса (переключение GET ↔ POST) |
T3 | Манипуляция токеном | Токен можно полностью опустить |
T4 | Манипуляция токеном | Токен не привязан к сессии пользователя (воспроизведение между сессиями) |
T5 | Манипуляция токеном | Токен привязан к cookie, не связанной с сессией (например, csrfKey) |
T6 | Манипуляция токеном | Наивный double-submit cookie (cookie == тело, без привязки) |
T7 | Манипуляция токеном | Принимается пустое значение токена |
T8 | Манипуляция токеном | Токен в пользовательском заголовке может быть опущен или подделан |
M1 | Метод / Content-Type | Переопределение HTTP-метода через параметр _method |
M2 | Метод / Content-Type | Переопределение HTTP-метода через заголовок X-HTTP-Method-Override |
M4 | Метод / Content-Type | Обход валидации через альтернативный Content-Type |
R0 | Referer | Заголовок Referer не проверяется при отправке формы |
R1 | Referer | Обход валидации Referer путём удаления заголовка |
R2a | Referer | Обход регулярного выражения Referer — цель как поддомен атакующего |
R2b | Referer | Обход регулярного выражения Referer — цель в строке запроса |
R2c | Referer | Обход регулярного выражения Referer — цель в пути |
O1 | Origin | Обход валидации Origin с помощью Origin: null |
O2 | Origin | Обход валидации Origin с помощью трюка с поддоменом |
O3 | Origin | Обход валидации Origin путём удаления заголовка |
S2 | SameSite (браузер) | Обход SameSite=Strict через клиентский перенаправляющий гаджет |
S3 | SameSite (браузер) | Обход SameSite=Strict через XSS на смежном поддомене |
S4 | SameSite (браузер) | Обход SameSite=Lax через обновление cookie/OAuth-поток |
C1 | Состояние cookie | Анализ атрибута SameSite cookie (None/Lax/Strict) |
C2 | Состояние cookie | Атрибут SameSite не установлен для cookies |
E1 | Стойкость токена | Токен использует слабое/структурированное хэш-кодирование |
A1 | Стойкость токена | Анализ предсказуемости/возможности подделки токена после сканирования |