
Автоматизированный инструмент тестирования безопасности WAF, который обнаруживает ложные срабатывания и ложные пропуски, используя 15+ категорий полезных нагрузок, включая SQLi, XSS, RCE и GraphQL-инъекции. Поддерживает Docker, JSON-вывод и пользовательские полезные нагрузки.
Инструмент обхода WAF — это инструмент с открытым исходным кодом для анализа безопасности любого WAF на предмет ложных срабатываний и пропусков с использованием предопределённых и настраиваемых полезных нагрузок. Проверьте свой WAF до того, как это сделает злоумышленник. Инструмент обхода WAF разработан командой Nemesida WAF при участии сообщества.

Запрещено использовать в незаконных целях. Не нарушайте закон. Мы не несём ответственности за возможные риски, связанные с использованием данного программного обеспечения.
Последняя версия waf-bypass всегда доступна на Docker Hub. Её можно легко загрузить следующей командой:
# docker pull nemesida/waf-bypass # docker run nemesida/waf-bypass --host='example.com'
# pipx install git+https://github.com/nemesida-waf/waf-bypass.git # <pipx bin dir>/waf-bypass
# git clone https://github.com/nemesida-waf/waf_bypass.git /opt/waf-bypass/ # python3 -m pip install -r /opt/waf-bypass/requirements.txt # python3 /opt/waf-bypass/main.py --host='example.com'
'--proxy' (--proxy='http://proxy.example.com:3128') — опция позволяет указать, куда подключаться вместо хоста.
'--header' (--header 'Authorization: Basic YWRtaW46YWRtaW4=' --header 'X-TOKEN: ABCDEF') — опция позволяет указать HTTP-заголовок для отправки со всеми запросами (например, для аутентификации). Допускается многократное использование.
'--user-agent' (--user-agent 'MyUserAgent 1/1') — опция позволяет указать HTTP User-Agent для отправки со всеми запросами, за исключением случаев, когда User-Agent задаётся полезной нагрузкой ("USER-AGENT").
'--block-code' (--block-code='403' --block-code='222') — опция позволяет указать HTTP-код состояния, который ожидается при блокировке WAF (по умолчанию 403). Допускается многократное использование.
Пример спецификации вывода JSON:
{
"TARGET": "https://example.com", // defined by --host option
"PROXY": {}, // defined by --proxy option
"HEADERS": { // defined by --header option
"User-Agent": ""
},
"BLOCK-CODE": [ // defined by --block-code option
...
],
"THREADS": 50, // defined by --threads option
"TIMEOUT": 30, // defined by --timeout option
"EXCLUDE-DIR": [ // defined by --exclude-dir option
...
],
"FAILED": { // requests with failed processing status
"MFD/7.json": {
"BODY": "WBHTTPSConnectionPool(host='example.com', port=443): Read timed out. (read timeout=1)"
},
...
},
"PASSED": { // passed requests
"UWA/3.json": {
"URL": "403 RESPONSE CODE"
},
...
},
"FALSED": { // requests with false positive processing status
...
},
"BYPASSED": { // requests with false negative processing status
"UWA/26.json": {
"URL": "200 RESPONSE CODE"
},
...
},
"TestRequest": { // test requests with processing status, exclude passed
"FAILED": {},
"FALSED": {
"UWA/3.json": {
"URL": "403 RESPONSE CODE"
},
...
}
},
"CURL": { // cURL command to reproduce false positive and false negative requests
"FALSED": {},
"BYPASSED": {
"UWA/26.json": {
"URL": "curl -X GET -H 'Accept: */*' -H 'Accept-Encoding: gzip, deflate' -H 'Connection: keep-alive' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36' 'https://example.com/do.php#.png'"
},
...
}
}
}
В зависимости от цели полезные нагрузки находятся в соответствующих папках:
При составлении полезной нагрузки используются следующие зоны, метод и опции:
Base64, HTML-ENTITY, UTF-16) в дополнение к кодировке полезной нагрузки. Несколько значений указываются через пробел (например, Base64 UTF-16). Применяется только к зонам ARGS, BODY, COOKIE и HEADER. Не применяется к полезным нагрузкам в директориях API и MFD. Несовместим с опцией JSON.За исключением некоторых случаев, описанных ниже, зоны независимы друг от друга и тестируются отдельно (т.е. если указаны 2 зоны, скрипт отправит 2 запроса, поочерёдно проверяя одну и вторую зону).
Для зон можно использовать суффикс %RND%, который позволяет сгенерировать произвольную строку из 6 букв и цифр. (например: param%RND=my_payload или param=%RND% или A%RND%B)
Вы можете создавать свои собственные полезные нагрузки: для этого создайте свою папку в папке '/payload/' или поместите полезную нагрузку в существующую (например, '/payload/XSS'). Допустимый формат данных — JSON.
Полезные нагрузки для тестирования API, находящиеся в этой директории, автоматически дополняются заголовком 'Content-Type: application/json'.
Для полезных нагрузок MFD (multipart/form-data), находящихся в этой директории, необходимо указать BODY (обязательно) и BOUNDARY (опционально). Если BOUNDARY не задан, он будет сгенерирован автоматически (в этом случае для BODY нужно указать только полезную нагрузку без дополнительных данных ('... Content-Disposition: form-data; ...').
Если BOUNDARY указан, то содержимое BODY должно быть отформатировано в соответствии с RFC, но это допускает несколько полезных нагрузок в BODY, разделённых BOUNDARY.
В этой директории разрешены другие зоны (например, URL, ARGS и т.д.). Независимо от зоны, ко всем запросам будет добавлен заголовок 'Content-Type: multipart/form-data; boundary=...'.
'--threads' (--threads=15) — опция позволяет указать количество параллельных потоков сканирования (по умолчанию 10).
'--timeout' (--timeout=10) — опция позволяет указать тайм-аут обработки запроса в секундах (по умолчанию 30).
'--exclude-dir' — исключить директорию полезных нагрузок (--exclude-dir='SQLi,XSS').
'--json-format' — опция, позволяющая отображать результат работы в формате JSON (полезно для интеграции инструмента с платформами безопасности). Если опция не указана, вывод будет в табличном формате (формат по умолчанию).
'--details' — отображать полезные нагрузки с ложными срабатываниями и пропусками. Несовместима с опцией --json-format.
'--no-progress' — не отображать индикатор выполнения.
'--curl-replay' — отображать команду cURL для воспроизведения запросов с ложными срабатываниями, пропусками или неудачными. Несовместима с опцией --json-format.