Incompetent Basterd
Home / Incompetent Bastard / Architectuur voor de Nieuwsgierigen

Architectuur voor de Nieuwsgierigen

23. Architectuur voor de Nieuwsgierigen

Voor als je wilt begrijpen hoe het in elkaar zit. Of hoe het niet uit elkaar valt. Dat is dezelfde vraag, maar dan met een optimistischer glazuur eroverheen.

De App Factory

app.py bevat create_app(). Flask, SQLAlchemy, Flask-Migrate, blueprints. Auto-creatie van een standaard instellingen-rij als de database leeg is, zodat de rest van de applicatie niet crasht bij de eerste start. Het is het fundament. Het is degelijk. Het is — voor dit project — bijna verdacht normaal. Alsof iemand één bestand wilde schrijven dat de volwassene in de kamer is. En dat is gelukt.

De Blueprints

BestandBlueprintWat het doet
index.pyindex_bpDashboard — het zenuwcentrum
agent.pyagent_bpAgent C2 — de poppenspeler
login.pylogin_bpLogin/logout — de uitsmijter
findings.pyfindings_bpFindings + rapport — de raison d’être
tasks.pytasks_bpTask runner — het plichtsgetrouwe werkpaard
macro.pymacro_bpGenerators + commands + screen + recordings
notes.pynotes_bpNotities
rapport.pyrapport_bpRapportgeneratie — de broodwinner
upload.pyupload_bpFile uploads
download.pydownload_bpFile downloads
xxs.pyxxs_bpXSS lab — de koekjesdief
xxe.pyxxe_bpXXE lab — de bestandenlezer
csrf.pycsrf_bpCSRF token-harvesting
sqli2.pysqli2_bpSQLi relay
ssrf.pyssrf_bpSSRF redirects
output_view.pyoutput_bpOutput viewer
search.pysearch_bpZoekfunctie
security.pyToegangscontrole
admin.pyFlask-Admin

De Database

Eén SQLite-bestand. Auto-creatie met db.create_all(). Auto-migratie van ontbrekende kolommen. Standaard instellingen-rij als de database leeg is. Het is het model dat de PostgreSQL-purist doet huiveren, de MongoDB-evangelist doet glimlachen (om de verkeerde redenen), en de pragmaticus doet zeggen: “het werkt, en als het breekt, kopieer ik het bestand.” Dat laatste is — voor alle duidelijkheid — een valide backup-strategie voor SQLite. Het is zelfs de aanbevolen backup-strategie. De eenvoud is geen beperking. Het is een feature. Of dat is tenminste wat je jezelf vertelt om drie uur ’s nachts wanneer je de database per ongeluk hebt verwijderd en vijf seconden later een nieuwe hebt door de applicatie te herstarten. Vijf seconden. Dat is sneller dan je “oh nee” kunt zeggen. En je zegt “oh nee” snel.

De Mappenstructuur

De code zit in meuk/flask/. “Meuk” betekent “rommel” of “spullen” of “troep.” Het is alsof je broncode opslaat in een map genaamd misc_junk. Het is bescheidenheid tot het punt van zelfvernedering — het soort bescheidenheid dat ofwel authentiek is, ofwel de meest briljante vorm van sociale camouflage. Want niemand opent een map genaamd “meuk” en verwacht iets indrukwekkends. Waardoor alles dat je er wél in vindt des te indrukwekkender is. Het is de softwareversie van onderpresteren bij de eerste date en dan een perfect diner koken bij de tweede.

Templates in meuk/flask/html/. Static in static/. Database in meuk/flask/db/. Payloads in http/payloads/. Tools in http/tools/. Commands in http/commands/. Output in raw/. Rapporten in rapport/. Het is organisch gegroeid. Het is niet ontworpen. Het werkt. Het is een stad zonder stedenbouwkundige waar je toch de bakker kunt vinden. En de bakker verkoopt ook exploits, maar dat is een detail dat je voor jezelf houdt.


Op de hoogte blijven?

Ontvang maandelijks cybersecurity-inzichten in je inbox.

← Incompetent Bastard ← Home

Klaar voor de volgende stap?

Praat over je beveiliging.

Een vrijblijvend gesprek van 30 minuten — geen sales, alleen technische sparring.

Plan een gesprek →