
Инструментарий Prime для аудита и эксплуатации межсайтовой подделки запросов (CSRF).
<h1 align="center">
<br>
<a href="https://github.com/0xinfection/xsrfprobe"><img src="https://github.com/user-attachments/assets/c8e9ee87-f60b-4ab3-b3ae-4a79808adc11" alt="xsrfprobe-logo" width="25%" /></a>
<br>
<br>
XSRFProbe
</h1>
<h4 align="center">Основной инструмент для аудита и эксплуатации межсайтовой подделки запросов.</h4>
<p align="center">
<a href="https://docs.python.org/3/download.html">
<img src="https://img.shields.io/badge/Python-3.11+-green.svg">
</a>
<a href="https://github.com/0xinfection/XSRFProbe/releases">
<img src="https://img.shields.io/badge/Version-v3.0.0%20(stable)-blue.svg">
</a>
<a href="https://github.com/0xinfection/XSRFProbe/blob/master/LICENSE">
<img src="https://img.shields.io/badge/License-GPLv3-orange.svg">
</a>
</p>
## О программе
__XSRFProbe__ — это продвинутый инструментарий для аудита и эксплуатации [межсайтовой подделки запросов](https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)) (CSRF/XSRF). Оснащённый мощным движком сканирования и множеством систематических проверок, он способен обнаруживать большинство случаев уязвимостей CSRF, связанных с ними обходов, а также генерировать эксплуатируемые proof of concept для каждой найденной уязвимости. Дополнительная информация о работе XSRFProbe приведена в разделе [XSRFProbe Internals](https://github.com/0xInfection/XSRFProbe/wiki#xsrfprobe-internals) на [вики](https://github.com/0xInfection/XSRFProbe/wiki/).
<img src="https://github.com/user-attachments/assets/11a4d30a-bcf1-4d4e-9ec4-5a4e440f8842" alt="banner-image">
<br><br>
<p align="center">
<a href="https://github.com/0xinfection/xsrfprobe/wiki">Вики XSRFProbe</a> •
<a href="https://github.com/0xinfection/xsrfprobe/wiki/Getting-Started">Начало работы</a> •
<a href="https://github.com/0xinfection/xsrfprobe/wiki/General-Usage">Общее использование</a> •
<a href="https://github.com/0xinfection/xsrfprobe/wiki/Advanced-Usage">Расширенное использование</a> •
<a href="https://github.com/0xinfection/xsrfprobe/wiki/XSRFProbe-Internals">Внутреннее устройство XSRFProbe</a> •
<a href="https://github.com/0xinfection/xsrfprobe#gallery">Галерея</a>
</p>
## Некоторые возможности
- [x] Выполняет полный набор [систематических проверок](https://github.com/0xInfection/XSRFProbe/wiki/XSRFProbe-Internals#types-of-checks) — основанных на движке сравнения ответов/бенчмаркинга — перед тем как объявить конечную точку уязвимой.
- [x] Обнаруживает и активно вмешивается в различные реализации анти-CSRF токенов: переключение метода запроса, удаление токена, пустые/дублированные значения, токены, не привязанные к сессии, double-submit cookies и токены в пользовательских заголовках.
- [x] Проверяет валидацию Referer и Origin с использованием реальных обходов (удаление заголовка, трюки с регулярными выражениями/поддоменами, `Origin: null`), а также обходы через переопределение метода и Content-Type.
- [x] Анализирует защиту SameSite cookies, с опциональным перечислением поддоменов (через crt.sh) для тестирования обхода через смежные домены.
- [x] Работает с мощным сканером, обеспечивающим детерминированное ограниченное сканирование (настраивается через `--max-urls`, `--max-depth` и `--crawl-timeout`).
- [x] Опциональная интеграция headless Firefox (Selenium) для браузерозависимых тестов и автоматической валидации сгенерированных PoC.
- [x] Точное [обнаружение стойкости токена](https://github.com/0xInfection/XSRFProbe/wiki/XSRFProbe-Internals#token-randomness-calculation) и [анализ](https://github.com/0xInfection/XSRFProbe/wiki/XSRFProbe-Internals#post-scan-token-analysis) с использованием проверок энтропии и кодирования.
- [x] Может генерировать как обычные, так и вредоносные эксплуатационные proof of concept для CSRF.
- [x] Из коробки поддерживает пользовательские значения cookies, общие заголовки и отчёт в формате JSON — каждая находка содержит оценку серьёзности и условие эксплуатации.
- [x] Пользователь [контролирует всё](https://github.com/0xInfection/XSRFProbe/wiki/Advanced-Usage#xsrfprobe-configuration-variables), что делает сканер.
- [x] Удобная среда взаимодействия с полной поддержкой подробного вывода и детальным логированием ошибок, уязвимостей и токенов.
## Выполняемые проверки уязвимостей:
У каждой проверки XSRFProbe есть уникальный идентификатор. ID отображается в выводе консоли (например, `[T6] VULNERABLE: ...`) и сохраняется как поле `test_id` каждой находки в JSON-отчёте (наряду с её `severity` и, где применимо, примечанием об `exploitability` в поле `details`), так что каждая находка ссылается на конкретную проверку, которая её породила.
| 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` | Стойкость токена | Анализ предсказуемости/возможности подделки токена после сканирования |
> Проверки `S*` требуют опциональной интеграции headless-браузера (`--browser`). Проверки `T*`/`M*`/`R*`/`O*` — это проверки на уровне HTTP, управляемые движком сравнения ответов/бенчмаркинга.
## Галерея
Давайте посмотрим на несколько реальных сценариев работы XSRFProbe:
<img src="https://github.com/user-attachments/assets/0fc41fb9-d2c3-400f-8b8f-f4f0093457e1" width=50% /><img src="https://github.com/user-attachments/assets/e2beffb1-5cae-4cb6-9740-2a49f6e15bf8" width=50% />
<img src="https://github.com/user-attachments/assets/47d48c78-bb9a-4eeb-b1ea-ab9ba9ab694c" width=100% />
<img src="https://github.com/user-attachments/assets/e23acca5-f66b-4349-84b1-09cff64e1320" width=50% /><img src="https://github.com/user-attachments/assets/1fd7fe7e-b3de-41e9-aa9f-24d0f7fb151e" width=50% />
## Установка и использование
> Полную информацию по использованию см. на вики — [Общее использование](https://github.com/0xinfection/xsrfprobe/wiki/general-usage) и [Расширенное использование](https://github.com/0xinfection/xsrfprobe/wiki/advanced-usage).
### Установка через Pypi:
XSRFProbe можно легко установить одной командой:
```
pip install xsrfprobe
```
### Установка вручную:
- Для начала установите инструмент:
```
pip install .
```
- Теперь инструмент можно запустить через:
```
xsrfprobe --help
```
- Браузерозависимые тесты (`--browser`, `--auto-validate-poc`) дополнительно требуют, чтобы [geckodriver](https://github.com/mozilla/geckodriver/releases) был доступен в вашем `PATH` (или указан через `--geckodriver-path`).
- После тестирования XSRFProbe на сайте в вашей текущей рабочей директории создаётся папка `xsrfprobe-output`. В этой папке можно просмотреть подробные логи и информацию, собранную во время сканирования (передайте `--json` для машинно-читаемого отчёта).
## Версия и лицензия
XSRFProbe в настоящее время имеет версию `v3.0.0`, работа лицензирована в соответствии с [GNU General Public License (GPLv3)](https://www.gnu.org/licenses/gpl-3.0.en.html).
### Предупреждения
Не используйте этот инструмент на реальном сайте!
Это связано с тем, что инструмент предназначен для автоматического выполнения всевозможных отправок форм, что может навредить сайту. Иногда вы можете испортить базу данных и, скорее всего, вызвать DoS на сайте.
Тестируйте на disposable/тестовом сайте!
### Отказ от ответственности
Использование XSRFProbe для тестирования веб-сайтов без предварительного взаимного согласия может рассматриваться как незаконная деятельность. Ответственность за соблюдение всех применимых местных, государственных и федеральных законов лежит на конечном пользователе. Автор не несёт ответственности и не отвечает за любое неправомерное использование или ущерб, причинённый этой программой.
## Слова автора
Этот проект основан __исключительно на моих собственных исследованиях и моём собственном опыте работы с веб-приложениями__ по атакам типа Cross-Site Request Forgery. Вы можете просмотреть исходный код, чтобы лучше понять, как был создан этот инструментарий. Полезные [запросы на слияние](https://github.com/0xInfection/XSRFProbe/wiki/Contributing), [идеи и проблемы](https://github.com/0xInfection/XSRFProbe/wiki/Reporting-Bugs#before-submitting) приветствуются. Если вы хотите увидеть, как разрабатывается XSRFProbe, загляните на [Доску разработки](https://github.com/0xInfection/XSRFProbe/projects/1).
> Создано с ♡ от [@0xInfection](https://x.com/0xInfection)