Share
## https://sploitus.com/exploit?id=16772C9F-6611-584E-913D-1FC7105B9364
# XSS Lab

Lokalne laboratorium do **ręcznego testowania payloadów XSS** (Cross-Site Scripting). Aplikacja symuluje typowe scenariusze podatności — bez wysyłania żądań na zewnętrzne serwisy — żebyś mógł bezpiecznie sprawdzić, jak payload zachowuje się w przeglądarce.

> **Tylko do autoryzowanych testów:** używaj na własnych aplikacjach lub za pisemną zgodą (pentest, bug bounty, środowisko testowe). Nie testuj obcych systemów bez pozwolenia.

## Co robi aplikacja

### Ręczny tester
- Wklejasz payload w pole tekstowe (np. komentarz, bio, ticket).
- Wybierasz tryb renderowania: `innerHTML` (podatne), `textContent` (bezpieczne) lub escapowanie HTML.
- Widzisz podgląd na żywo, wygenerowane źródło HTML oraz symulację kontekstu atrybutu.
- Gotowe presety: marker tekstowy, `img onerror`, `svg onload`, `script`, breakout atrybutu.
- Każda sesja ma unikalny **marker** (`XSS-STORED-POC-…`) — ułatwia potwierdzenie wykonania payloadu w dzienniku.

### Stored XSS (symulacja)
- Formularz zapisuje wpisy lokalnie (`localStorage`) — symulacja POST.
- Lista wpisów odzwierciedla odczyt z serwera (GET) w wybranym trybie renderowania.
- Przy podatnym `innerHTML` widać, czy zapisany payload wykonuje się po ponownym wyświetleniu.

### Skrypt Python (`stored_xss_poc.py`)
- Automatyczne wysłanie payloadu na wskazany URL i weryfikacja markera w odpowiedzi.
- Przydatny do testów stored XSS na prawdziwym backendzie (z autoryzacją).

## Uruchomienie

```bash
npm install
npm run dev
```

Aplikacja domyślnie startuje pod adresem `http://localhost:5173`.

Produkcja:

```bash
npm run build
npm run preview
```

## Przykład użycia skryptu Python

```bash
pip install requests

python3 stored_xss_poc.py \
  --submit-url "https://twoja-app.example/api/comments" \
  --field comment \
  --verify-url "https://twoja-app.example/comments" \
  --cookie "session=..." \
  --extra "post_id=1"
```

Opcje: `--csrf-field`, `--csrf-url`, `--payload-index` (0 = marker, 1 = img, 2 = svg), `--method GET|POST`.

## Stack

- [React](https://react.dev/) + [Vite](https://vite.dev/)
- Brak backendu — wszystko działa w przeglądarce (stored symulowany przez `localStorage`)

## Struktura

```
src/App.jsx       — interfejs labu (tester, stored, dziennik)
stored_xss_poc.py — automatyczny PoC stored XSS (CLI)
```