
Легковесный сервер сбора и полезной нагрузки для Blind XSS (межсайтового скриптинга), построенный на Flask
Легковесный сборщик Blind XSS (межсайтового скриптинга) и сервер полезных нагрузок, построенный на Flask. Он отдаёт JavaScript-полезную нагрузку, которая собирает данные браузера жертвы (cookies, localStorage, фрагменты DOM и т. д.) и пересылает их в панель управления на базе SQLite, защищённую HTTP Basic Auth.
/p.js отдаёт самодостаточную JS-полезную нагрузку, использующую sendBeacon или fetch/c (JSON/FormData) и GET /c.gif (пиксельный маячок, дружественный к CSP)/events перечисляет собранные события, /events/<id>/view показывает полные детали/payloads предлагает 14 вариантов XSS-полезных нагрузок плюс редактор пользовательского JSADMIN_USER / ADMIN_PASSWORDbxss.db пересоздаёт её с нуляDockerfile и docker-compose.yml# Set credentials
echo "ADMIN_USER=admin" > .env
echo "ADMIN_PASSWORD=your-admin-password" >> .env
# Build and run
docker compose up -d --build
Панель управления: http://127.0.0.1:8089/events (браузер запросит Basic Auth)
pip install -r requirements.txt
export ADMIN_USER="admin"
export ADMIN_PASSWORD="your-admin-password"
gunicorn -b 127.0.0.1:8080 --workers 2 --threads 4 wsgi:app
/payloads (после аутентификации), чтобы скопировать XSS-пейлоад./events.| Метод | Путь | Описание |
|---|---|---|
| GET | /p.js | JavaScript XSS-пейлоада |
| POST | /c | Принимает JSON/FormData от пейлоада |
| GET | /c.gif | Пиксельный маяк (совместим с CSP) |
| Метод | Путь | Описание |
|---|---|---|
| GET | /events | Последние 500 событий |
| GET | /events/<id> | Детали события в формате JSON |
| GET | /events/<id>/view | Детали события в формате HTML |
| GET/POST | /payloads | Генератор пейлоадов + редактор пользовательского JS |
| Метод | Путь | Описание |
|---|---|---|
| GET | /_healthz | Проверка работоспособности |
| Переменная | По умолчанию | Описание |
|---|---|---|
ADMIN_USER | admin | Имя пользователя панели управления |
ADMIN_PASSWORD | (обязательно) | Пароль панели управления — запуск завершается ошибкой, если не задан |
DB_PATH | ./bxss.db | Путь к базе данных SQLite |
PUBLIC_URL | (пусто) | Публичный базовый URL для генерируемых пейлоадов (используйте при работе за туннелем/обратным прокси; иначе используется хост запроса) |
TRUST_PROXY | (пусто) | Установите 1, чтобы доверять X-Forwarded-For/CF-Connecting-IP для IP клиента (только при работе за доверенным обратным прокси; там это обязательно, иначе все клиенты будут иметь IP прокси для ограничения частоты запросов) |
MAX_BODY | 524288 | Максимальный размер тела запроса коллектора (байты) |
RATE_LIMIT_COUNT | 60 | Максимальное количество запросов к коллектору за окно (на IP) |
RATE_LIMIT_WINDOW | 60 | Окно ограничения частоты запросов в секундах |
LOG_LEVEL | INFO | Уровень логирования Python |
Пользовательский JS редактируется и хранится через админ-страницу
/payloads(сохраняется в таблицеsettingsSQLite) и добавляется к/p.js. Он больше не читается из файла.
blindxss-lite/
├── wsgi.py # WSGI entry point
├── requirements.txt # Python dependencies
├── Dockerfile # Container image
├── docker-compose.yml # Compose config
├── .env # Credentials (don't commit)
└── app/
├── __init__.py # App factory, CORS, health check
├── config.py # Config + .env loader
├── db.py # SQLite layer
├── collectors.py # /p.js, /c, /c.gif
├── events.py # /events admin
├── payloads.py # /payloads admin
├── utils.py # Helpers + Basic Auth decorator
├── static/
│ └── style.css
└── templates/
├── events.html
├── event.html
└── payloads.html
document.cookieПолезные нагрузки:

Результат:

Детализация результата:

.env никогда не должен попадать в систему контроля версий.