
Программа для тестирования функциональности WAF
Инструмент оценки WAF для предприятий — Реальные полезные нагрузки. Реальные результаты. Отчеты, готовые к соответствию требованиям.
WAF Tester оценивает Web Application Firewalls, отправляя реальные атакующие полезные нагрузки на заданный URL и сообщая, были ли они заблокированы. Доступен как настольное приложение для Windows (Electron), так и CLI на Python, работающий где угодно.

Этот инструмент предназначен только для авторизованного тестирования безопасности. Используйте его только против систем, которые вы контролируете или на тестирование которых имеете явное письменное разрешение. Несанкционированное тестирование сторонних систем может нарушать Закон о компьютерном мошенничестве и злоупотреблениях (CFAA) и аналогичные законы в вашей юрисдикции. Авторы не несут ответственности за неправомерное использование.
| Набор | Тесты | Что охватывает |
|---|---|---|
| OWASP / CWE Core | 44 | SQL-инъекции (12 вариантов), XSS (10 вариантов), path traversal, command injection, XXE, SSRF, Log4Shell, SSTI, open redirect |
| Rate Limiting | 3 | Burst flood (30 параллельных), последовательный флуд, обход X-Forwarded-For с ротацией IP |
| Bot Detection | 10 | sqlmap, Nikto, Nmap, Scrapy, Masscan, HeadlessChrome, python-requests, curl, пустой UA, отсутствие заголовка Accept |
| Bypass Attempts | 15 | Двойное URL-кодирование, Unicode fullwidth, null-байты, вариации регистра, обфускация комментариями, CRLF-инъекция, инъекция заголовка Host, переопределение метода, трюки с путями |
| API Security | 10 | GraphQL introspection/batch/enumeration, JWT none-algorithm и путаница алгоритмов, массовое присвоение, подмена HTTP-глаголов, BOLA, путаница content-type |
| Business Logic | 8 | Отрицательное количество, отправка с нулевой ценой, доступ к эндпоинтам администратора, загрязнение HTTP-параметров, перебор аккаунтов, чрезмерное раскрытие данных, принудительный просмотр, повышение привилегий |
Каждый тест помечен одной или несколькими системами соответствия:
HIGH, LIKELY или UNCERTAIN вместо бинарного проход/непроходgit clone https://github.com/kpomin57/waf-tester.git
cd waf-tester
npm install
npm start
npm run build
Результат появляется в dist/ в виде NSIS-установщика и портативного .exe. На целевой машине не требуется предустановленного ПО — Electron содержит собственный рантайм.
Однофайловая версия на Python, работающая везде, где есть Python — на серверах Linux, в CI/CD-пайплайнах, Docker-контейнерах, WSL или в любой среде, где неподходящ Windows .exe.
pip install rich requests
python waf_tester.py --url https://target.example.com
Запускает все 90 тестов, запрашивает подтверждение авторизации, выводит цветные результаты в терминал и сохраняет отчеты в форматах JSON и HTML в текущую директорию.
| Флаг | Описание | По умолчанию |
|---|---|---|
--url | Целевой URL (обязательно) | — |
--suites | Наборы тестов через запятую | все |
--auth-type | none / bearer / apikey / cookie / basic | none |
--auth-value | Токен, строка cookie или значение API-ключа | — |
--auth-header | Имя заголовка для аутентификации по API-ключу | X-API-Key |
--auth-user | Имя пользователя для Basic Auth | — |
--auth-pass | Пароль для Basic Auth | — |
--no-baseline | Отключить сравнение с базовым уровнем | выкл |
--no-rotate-ua | Отключить ротацию User-Agent | выкл |
--waf-header | Отправлять идентификационный заголовок X-WAF-Tester | выкл |
--output | terminal, json, html (через запятую) | все три |
--output-dir | Директория для сохранения отчетов | . |
--timeout | Таймаут на запрос в секундах | 10 |
--proxy | URL прокси для всех запросов (например, http://127.0.0.1:8080) | выкл |
--confirm | Пропустить запрос на подтверждение авторизации | выкл |
# Запуск всех наборов
python waf_tester.py --url https://app.example.com
# Запуск только наборов OWASP и API
python waf_tester.py --url https://app.example.com --suites owasp,api
# Аутентификация Bearer token
python waf_tester.py --url https://app.example.com/api \
--auth-type bearer --auth-value eyJhbGciOiJIUzI1NiJ9...
# Аутентификация по API-ключу
python waf_tester.py --url https://app.example.com/api \
--auth-type apikey --auth-header X-API-Key --auth-value mykey123
# Сохранение отчетов в папку, пропуск подтверждения (CI/CD)
python waf_tester.py --url https://app.example.com \
--output-dir ./reports --confirm
# Только терминальный вывод — файлы не сохраняются
python waf_tester.py --url https://app.example.com --output terminal
# Маршрутизация трафика через Burp Suite
python waf_tester.py --url https://app.example.com --proxy http://127.0.0.1:8080
docker run --rm -v $(pwd)/reports:/reports \
python:3.12-slim sh -c \
"pip install rich requests -q && python waf_tester.py \
--url https://target.example.com \
--output-dir /reports --confirm"
- name: WAF Evaluation
run: |
pip install rich requests
python waf_tester.py \
--url ${{ secrets.WAF_TARGET_URL }} \
--suites owasp,api,bypass \
--output json \
--output-dir ./reports \
--confirm
- name: Upload report
uses: actions/upload-artifact@v3
with:
name: waf-report
path: reports/
CLI на Python может направлять весь тестовый трафик через Burp Suite, предоставляя полную HTTP-историю каждой полезной нагрузки, отправленной WAF Tester. Это полезно для ручного анализа запросов и ответов, точной настройки полезных нагрузок, устранения неожиданного поведения WAF, а также для использования собственного сканера или Repeater Burp для интересных находок.
Burp Suite запускает локальный прокси-слушатель (по умолчанию 127.0.0.1:8080). Когда вы указываете WAF Testerу адрес прокси через переменные окружения, каждый запрос инструмента проходит через Burp перед достижением цели. Вы видите каждую полезную нагрузку в HTTP-истории Burp с полным запросом и ответом — код состояния, заголовки, тело — точно так, как их видел WAF.
1. Запустите Burp Suite и убедитесь, что прокси-слушатель активен:
Откройте Burp → Proxy → Proxy Settings → убедитесь, что слушатель на 127.0.0.1:8080 (или запомните ваш порт, если он другой).
2. Экспортируйте CA-сертификат Burp и доверьте ему (однократная настройка):