
Ein leichtgewichtiger Blind-XSS-(Cross-Site-Scripting-)Collector und Payload-Server, der mit Flask erstellt wurde
Ein leichtgewichtiger Blind-XSS-(Cross-Site-Scripting-)Collector und Payload-Server, der mit Flask erstellt wurde. Er stellt ein JavaScript-Payload bereit, das Browserdaten des Opfers erfasst (Cookies, localStorage, DOM-Ausschnitte usw.) und an ein SQLite-gestütztes Dashboard weiterleitet, das durch HTTP Basic Auth geschützt ist.
/p.js stellt ein eigenständiges JS-Payload bereit, das sendBeacon oder fetch verwendet/c (JSON/FormData) und GET /c.gif (CSP-freundliches Pixel-Beacon)/events listet erfasste Ereignisse auf, /events/<id>/view zeigt vollständige Details/payloads bietet 14 XSS-Payload-Varianten plus einen benutzerdefinierten JS-EditorADMIN_USER / ADMIN_PASSWORDbxss.db baut sie neu aufDockerfile und docker-compose.yml enthalten# Set credentials
echo "ADMIN_USER=admin" > .env
echo "ADMIN_PASSWORD=your-admin-password" >> .env
# Build and run
docker compose up -d --build
Dashboard: http://127.0.0.1:8089/events (Browser fordert zur Basic Auth auf)
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 (nach der Authentifizierung), um ein XSS-Payload zu kopieren./events an.| Methode | Pfad | Beschreibung |
|---|---|---|
| GET | /p.js | XSS-Payload-JavaScript |
| POST | /c | Empfängt JSON/FormData vom Payload |
| GET | /c.gif | Pixel-Beacon (CSP-freundlich) |
| Methode | Pfad | Beschreibung |
|---|---|---|
| GET | /events | Letzte 500 Ereignisse |
| GET | /events/<id> | Ereignisdetails als JSON |
| GET | /events/<id>/view | Ereignisdetails als HTML |
| GET/POST | /payloads | Payload-Generator + benutzerdefinierter JS-Editor |
| Methode | Pfad | Beschreibung |
|---|---|---|
| GET | /_healthz | Health Check |
| Variable | Standard | Beschreibung |
|---|---|---|
ADMIN_USER | admin | Dashboard-Benutzername |
ADMIN_PASSWORD | changeme | Dashboard-Passwort |
DB_PATH | ./bxss.db | SQLite-Datenbankpfad |
MAX_BODY | 524288 | Maximale Collector-Body-Größe (Bytes) |
RATE_LIMIT_COUNT | 60 | Maximale Collector-Anfragen pro Fenster (pro IP) |
RATE_LIMIT_WINDOW | 60 | Rate-Limit-Fenster in Sekunden |
LOG_LEVEL | INFO | Python-Logging-Level |
Benutzerdefiniertes JS wird über die Admin-Seite
/payloadsbearbeitet und gespeichert (persistiert in der SQLite-Tabellesettings) und an/p.jsangehängt. Es wird nicht mehr aus einer Datei gelesen.
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.cookiePayloads:

Ergebnis:

Ergebnisdetail:

.env sollte niemals in die Versionskontrolle eingecheckt werden.