
DHCPig v2.7.2
DHCP-Erschöpfungsskript, geschrieben in Python unter Verwendung der Scapy-Netzwerkbibliothek
DHCPig
Validierung der DHCP-Härtung für Whitehats: einen Pool erschöpfen, Leases von Nachbarn kapern, Hosts mit gefälschtem ARP von ihren Adressen vertreiben und berichten, ob das Netzwerk dich gestoppt hat. Benötigt Root-Rechte und Python 3.11+.
Web-UI ausführen
Debian / Kali: das neueste .deb von
Releases herunterladen und installieren –
legt dhcpig und dhcpig-web auf den PATH, kein venv nötig:
curl -LO https://github.com/kamorin/DHCPig/releases/download/v2.7.2/dhcpig_2.7.2-1_all.deb
sudo apt install ./dhcpig_2.7.2-1_all.deb
sudo dhcpig-web --open
Globale Installation (beliebiges Linux, Python 3.11+, kein venv):
git clone https://github.com/kamorin/DHCPig && cd DHCPig
sudo pip install --break-system-packages .
sudo dhcpig-web --open
Installiert direkt als Root in das System-Python, sodass sudo dhcpig-web den Befehl ohne
.venv/bin/-Pfad-Hantieren findet. --break-system-packages überschreibt Debian/Kalis PEP-668-Schutz,
der pip davon abhält, Systempakete anzufassen – dieser Schutz existiert, um apt-verwaltete Pakete zu schützen, nicht
weil diese Installation ungewöhnlich wäre; das .deb oder ein venv vermeiden ihn vollständig.
Aus dem Quellcode (beliebiges Linux, Python 3.11+):
git clone https://github.com/kamorin/DHCPig && cd DHCPig
python3 -m venv .venv && .venv/bin/pip install -e .
sudo .venv/bin/dhcpig-web --open
Die ausgegebene URL http://127.0.0.1:8787/?token=... öffnen. Drei Stolperfallen:
- Root ist in jedem Fall erforderlich (Raw-Sockets). Aus dem Quellcode (venv) den vollständigen
.venv/bin/- Pfad verwenden –sudosetztPATHzurück. - Das
?token=ist Pflicht. Ohne sie gibt es 401er und eine leere Seite. - Headless? Es bindet absichtlich an Loopback. Weiterleiten statt neu binden:
ssh -L 8787:127.0.0.1:8787 user@<vm-ip>.--openweglassen.
Auf Debian/Kali zuerst sudo apt install -y python3-venv ausführen, falls der venv-Schritt fehlschlägt.
CLI
sudo .venv/bin/dhcpig exhaust eth0 --report run.json
sudo .venv/bin/dhcpig release eth0 --scope 192.168.4.0/22 # DESTRUCTIVE
sudo .venv/bin/dhcpig active-scan eth0 --scope 192.168.4.0/22 # read-only
sudo .venv/bin/dhcpig release-previous eth0 # undo a previous run
dhcpig ifaces
| Flag | |
|---|---|
--dry-run | nur Recon: ARP-Sweep und Kontrolltransaktionen laufen real, nichts Mutierendes wird gesendet |
--scope CIDR | begrenzt die Ziele (wiederholbar); standardmäßig das eigene Netz des Interfaces |
--rate N | pps, Standard 7 – nicht bei exhaust, das sich selbst taktet |
--no-evict | überspringt die ARP-Konfliktphase |
--report FILE | schreibt am Ende des Laufs einen Sitzungsbericht nach FILE; das Format folgt der Endung von FILE (.json/.csv/.html, Standard JSON) |
--client-mac MAC | nur exhaust; diese MAC anstelle einer zufälligen verwenden (wiederholbar – rotiert durch die Liste) |
--request-option SPEC | exhaust/active-scan; DHCP-Option-55 (Parameter-Request-Liste) Inhalt zum Senden, z. B. 12,14-19,23 (Standard: das eingebaute macOS-Reihenfolgen-Profil) |
--no-spoof-eth-src | nur exhaust; die echte NIC-MAC als Ethernet-Quelle für jedes Frame verwenden (Wi-Fi; APs verwerfen Frames, deren Quell-MAC nicht die assoziierte Station ist) |
-v0 gibt nur Ergebnisse aus; -v3 fügt Paket-Level-Debug hinzu. Vollständige Flag-Referenz: man dhcpig
(oder packaging/dhcpig.1 vor der Installation).
Was jeder Modus tut
DHCP-Erschöpfung (exhaust) – destruktiv
- Inventarisiert das Segment per ARP und beweist dann, dass DHCP von dieser Maschine und für eine unbekannte MAC funktioniert
- Führt DHCPRELEASE für jeden Lease des Nachbarn aus – das Protokoll verlangt keinen Eigentumsnachweis
- Flutet DISCOVER/REQUEST von fabrizierten MACs, bis der Server nicht mehr antwortet
- Fragt die freigegebenen Adressen erneut per Name (Option 50) an, sobald der Pool erschöpft ist
- Fälscht RFC-5227-ARP-Konflikte gegen das, was es genommen hat, um zu sehen, ob Hosts die Adresse aufgeben
- Urteil: Könnte ein brandneuer Client danach immer noch eine Adresse bekommen?
DHCP-Release aktiver Clients (release) – destruktiv
- Gleiche Kette ohne die Flut: Inventar → Release → erneute Anfrage per Name → ARP-Konflikt
- Trifft Geräte, die gerade verbunden sind; der Pool bleibt intakt, sodass die meisten neu erhalten können
- Urteil: Hat irgendein Host seine Adresse verloren und keine neue bekommen?
Nach Erschöpfung / Zurücksetzen (release-previous) – Wiederherstellung
- Spielt das auf der Platte liegende Lease-Journal erneut ab und gibt jede Adresse zurück, die dieses Tool genommen hat
- Gefiltert auf dieses Interface, Netzwerk und diesen DHCP-Server;
--max-ageverwirft veraltete Einträge - Zeichnet auf, ob der Pool bereits erschöpft war, gibt aber journale Leases in jedem Fall frei
- Urteil: Ist der Pool wieder nutzbar?
Nachbarn finden (active-scan) – schreibgeschützt
- ARP-Sweept den Scope, sendet ein DHCPINFORM, um die DHCP-Server zu identifizieren
- Nimmt keine Adressen, stört keine Leases
Passiver Scan (scan) – schreibgeschützt, nur CLI
- Beobachtet DHCP und ARP; identifiziert Hosts anhand der Option-55-Reihenfolge, mit Fallback auf den MAC-Hersteller
- Sendet nichts. Läuft, bis es gestoppt wird
Einen Lauf auswerten
Alles landet im Ereignisprotokoll, Schlimmstes zuerst: Findings, dann eine Zeile pro Host, dann eine
OUTCOME-Zusammenfassung. Verbosity 0 (Web) oder -v0 (CLI) versteckt den Paketverkehr. Der JSON-Export
ist der vollständige Datensatz – das Protokoll ist eine Zusammenfassung.
Einen Lauf rückgängig machen
Leases werden nach einem Lauf behalten, damit der erschöpfte Zustand verifiziert werden kann. Sie freigeben:
sudo .venv/bin/dhcpig restore eth0 # same process still running
sudo .venv/bin/dhcpig release-previous eth0 # any time later, from the lease journal
Das Journal ($XDG_STATE_HOME/dhcpig/leases-<iface>.jsonl) zeichnet MAC, IP, Server und
Zeitstempel pro genommenem Lease auf – Engagement-Daten. Nach Abschluss löschen.
Haftungsausschluss
Nur gegen Netzwerke ausführen, die dir gehören oder für die du ausdrücklich autorisiert bist. release und
exhaust stören absichtlich Live-Clients; --scope ist optional und standardmäßig das gesamte
Segment. Die Autoren sind nicht für Missbrauch verantwortlich.
Designhinweise und Interna: docs/DESIGN.md. Mitwirken: CONTRIBUTING.md.
Lizenz: GPL v2 oder neuer.