Incompetent Bastard: Installatie en Eerste Stappen

Incompetent Bastard (IB) is een Flask-gebaseerd pentest dashboard dat speciaal ontworpen is voor geautoriseerde penetratietesten. Het bundelt payload-generatie, command-and-control, kwetsbaarheidslabs en rapportage in een enkel web-interface. In deze tutorial installeren we IB vanaf nul, starten we de applicatie voor het eerst op en maken we kennis met de basisinstellingen.

Deze tutorial is uitsluitend bedoeld voor gebruik in geautoriseerde testomgevingen. Gebruik IB alleen op systemen waarvoor je expliciete toestemming hebt.

Vereisten

IB – IB draait standaard op http://127.0.0.1:5000 en is alleen bereikbaar vanaf localhost. Dit is een bewuste beveiligingsmaatregel. Pas dit alleen aan als je weet wat je doet.

Stap 1: Repository Klonen

Clone de IB repository vanaf GitHub:

git clone https://github.com/jan-karel/incompetentbastard.git
cd incompetentbastard

De directorystructuur bevat onder andere:

Stap 2: Virtual Environment en Dependencies

Maak een Python virtual environment aan en installeer de vereiste pakketten:

python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

De requirements.txt bevat onder andere Flask, Flask-SQLAlchemy, Flask-Migrate, Flask-WTF en Flask-Bootstrap. Voor ontwikkeling en testen is er ook een apart bestand:

pip install -r requirements-dev.txt

Dit voegt pytest, ruff (linter) en andere development-tools toe.

IB – Controleer je Python-versie met python3 --version. IB vereist minimaal Python 3.10 voor alle features.

Stap 3: Eerste Keer Starten

Start de Flask-applicatie met het volgende commando:

flask --app app:create_app run --host 127.0.0.1 --port 5000

Bij de eerste start gebeurt het volgende automatisch:

  1. De SQLite database wordt aangemaakt in meuk/flask/db/db.sqlite
  2. Alle databasetabellen worden gecreeerd via db.create_all()
  3. Een standaard instellingenrecord wordt aangemaakt met localhost ingesteld op http://127.0.0.1:5000
  4. Eventuele migraties voor nieuwe kolommen worden uitgevoerd

Open nu je browser en ga naar http://127.0.0.1:5000/. Je ziet het IB command center dashboard.

Opstarten vanuit init.sh

Voor een volledige pentest-setup kun je het init-script gebruiken:

bash init.sh

Dit script doet het volgende:

Na het uitvoeren kun je de actieve screen sessies bekijken:

screen -list

Stap 4: Het Dashboard Verkennen

Na het inloggen zie je het command center dashboard. De bovenste rij toont vijf KPI-panelen:

  1. Active Agents – Aantal actieve C2-agents die terugbellen
  2. Hooked Clients – Aantal browsers die via de XSS-beacon verbonden zijn
  3. Findings – Totaal aantal geregistreerde bevindingen
  4. Notes – Aantal operatornotities
  5. Commands – Aantal beschikbare commando-bestanden

Onder de KPI-rij vind je secties voor Quick Actions (payload-generators), Operator Snippets, Web Telemetry en de Command Library.

IB – Het dashboard pollt automatisch elke 5 seconden naar /api/agents voor agent-updates. Je hoeft de pagina niet te verversen om nieuwe agents te zien.

Stap 5: Settings Configureren

De instellingen zijn bereikbaar via het tandwiel-icoon rechtsboven op het dashboard. Het belangrijkste veld is Localhost URL.

Localhost URL

Dit is het adres dat IB gebruikt in alle gegenereerde payloads, download-cradles en callback-URL’s. Standaard staat dit op http://127.0.0.1:5000.

Wanneer je op een VPN- of pentestnetwerk werkt, moet je dit wijzigen naar het IP-adres dat het doelsysteem kan bereiken:

http://10.10.14.5:5000

Je kunt dit ook via de API instellen:

curl -X POST http://127.0.0.1:5000/api/settings \
  -H "Content-Type: application/json" \
  -d '{"localhost": "http://10.10.14.5:5000"}'

Obfuscatie-instellingen

In de settings kun je ook obfuscatie configureren:

Rapport-metadata

Onder de rapportage-sectie kun je project-informatie invullen die later in het rapport verschijnt:

Stap 6: Environment Variables

IB ondersteunt diverse environment variables voor configuratie. Stel deze in voordat je de applicatie start:

export SECRET_KEY="jouw-geheime-sleutel"
export IB_ADMIN_USER="operator"
export IB_ADMIN_PASSWORD="sterk-wachtwoord"
flask --app app:create_app run --host 127.0.0.1 --port 5000

Overzicht van alle variabelen:

Variabele Standaard Doel
SECRET_KEY Willekeurig (token_urlsafe) Signing van sessies en CSRF-tokens
IB_ADMIN_USER Niet ingesteld Gebruikersnaam voor dashboard-authenticatie
IB_ADMIN_PASSWORD Niet ingesteld Wachtwoord voor dashboard-authenticatie
PUBLIC_UPLOAD false Sta uploads toe van niet-localhost adressen
PUBLIC_DOWNLOADS false Sta downloads toe van niet-localhost adressen
SESSION_COOKIE_SECURE false Zet op true achter een HTTPS-proxy
BEHIND_PROXY false Activeer ProxyFix (vertrouw X-Forwarded-For)

IB – Als IB_ADMIN_USER en IB_ADMIN_PASSWORD niet zijn ingesteld, is het dashboard alleen bereikbaar vanaf localhost (127.0.0.1 en ::1). Dit is de veiligste configuratie voor lokaal gebruik.

Authenticatie

Wanneer je credentials hebt geconfigureerd, verschijnt er een loginpagina op /login. Na succesvolle authenticatie wordt een sessiecookie gezet. De sessie wordt beheerd via Flask’s ingebouwde sessiebeheer met de SECRET_KEY.

Je kunt ook API-toegang configureren via tokens:

export DASHBOARD_ACCESS_TOKEN="mijn-api-token"

Gebruik dit token vervolgens in je API-calls:

curl -H "X-Dashboard-Token: mijn-api-token" \
  http://127.0.0.1:5000/api/agents

Stap 7: Draaien op een Pentestnetwerk

Tijdens een actieve pentest wil je IB bereikbaar maken voor doelsystemen. Start de applicatie op alle interfaces:

flask --app app:create_app run --host 0.0.0.0 --port 5000

Stel vervolgens de localhost URL in naar je tun0 IP-adres:

# Achterhaal je tun0 IP
ip addr show tun0 | grep inet

# Stel in via API
curl -X POST http://127.0.0.1:5000/api/settings \
  -H "Content-Type: application/json" \
  -d '{"localhost": "http://10.10.14.5:5000"}'

Of stel direct de BEHIND_PROXY variabele in als je achter een reverse proxy draait:

export BEHIND_PROXY=true

Dit activeert de Werkzeug ProxyFix middleware die X-Forwarded-For headers vertrouwt.

IB – Draai IB nooit zonder authenticatie op een publiek netwerk. Stel altijd IB_ADMIN_USER en IB_ADMIN_PASSWORD in wanneer je --host 0.0.0.0 gebruikt.

Stap 8: Database Beheer

IB gebruikt SQLite als database, opgeslagen in meuk/flask/db/db.sqlite. De applicatie maakt automatisch alle tabellen aan bij de eerste start en voert schema-migraties uit voor nieuwe kolommen.

Database resetten

Om met een schone database te beginnen:

rm meuk/flask/db/db.sqlite
flask --app app:create_app run --host 127.0.0.1 --port 5000

Bij het opnieuw starten wordt de database opnieuw aangemaakt met alle tabellen.

Database migraties

IB gebruikt Flask-Migrate met render_as_batch=True voor SQLite-compatibiliteit. Daarnaast voert create_app() automatisch ALTER TABLE statements uit voor nieuwe kolommen, zodat bestaande databases zonder problemen worden bijgewerkt.

Stap 9: Verificatie

Controleer of alles correct werkt door de volgende endpoints te bezoeken:

# Dashboard
curl -s http://127.0.0.1:5000/ | head -5

# Settings API
curl -s http://127.0.0.1:5000/api/settings | python3 -m json.tool

# Agents API
curl -s http://127.0.0.1:5000/api/agents

# Commands API
curl -s http://127.0.0.1:5000/api/commands | python3 -m json.tool | head -20

Je kunt ook de ingebouwde tests draaien om de applicatie te valideren:

source .venv/bin/activate
pytest -q

En een syntaxcheck uitvoeren:

python3 -m compileall app.py meuk/flask tests

Stap 10: Volgende Stappen

Nu IB draait, kun je verder met:

IB – Maak een bookmark aan voor http://127.0.0.1:5000/ in je browser. Tijdens een pentest wil je snel toegang tot het dashboard zonder steeds de URL te hoeven typen.

Samenvatting

In deze tutorial hebben we de volgende stappen doorlopen:

  1. De IB repository gekloned vanaf GitHub
  2. Een virtual environment aangemaakt en dependencies geinstalleerd
  3. De applicatie voor het eerst opgestart, waarmee de database automatisch werd gecreeerd
  4. Het dashboard verkend en de KPI-panelen bekeken
  5. De localhost URL en obfuscatie-instellingen geconfigureerd
  6. Environment variables ingesteld voor authenticatie en beveiliging
  7. IB geconfigureerd voor gebruik op een VPN/pentestnetwerk
  8. Database beheer en reset procedure doorgenomen
  9. De installatie geverifieerd via API-calls en tests

IB is nu klaar voor gebruik. De applicatie draait op http://127.0.0.1:5000/, de database is geinitialiseerd en de basisinstellingen zijn geconfigureerd. In de volgende tutorials leer je het dashboard in detail kennen en ga je aan de slag met payload-generatie en de command library.