
Einfach single-threaded Kommandozeilen-Anwendungen in eine schnelle, multi-threaded Anwendung mit CIDR- und Glob-Unterstützung verwandeln.
Verwandle einfach single-threaded Kommandozeilenanwendungen in eine schnelle, multi-threaded Anwendung mit CIDR- und Glob-Unterstützung.
Installation mit:
$ python3 setup.py install
Abhängigkeiten werden dann installiert und Interlace wird Ihrem Pfad als interlace hinzugefügt.
| Beispiel | Notationstyp |
|---|---|
| 80 | Einzelner Port |
| 1-80 | Bindestrich-Notation, führt einen Befehl für jeden Port von 1-80 aus |
| 80,443 | Führt einen Befehl sowohl für Port 80 als auch für Port 443 aus |
Sowohl -t als auch -tL werden gleich verarbeitet. Sie können Ziele genauso übergeben wie bei nmap. Dies kann mit CIDR-Notation, Bindestrich-Notation oder einer kommagetrennten Liste von Zielen erfolgen. Eine einzelne Zieldatei kann auch pro Zeile verschiedene Notationstypen verwenden.
Alternativ können Sie Ziele über STDIN übergeben und weder -t noch -tL sind erforderlich.
Die folgenden Variablen werden zur Laufzeit in Befehlen ersetzt:
Interlace ermöglicht außerdem die Verwendung von zwei zusätzlichen Funktionen zur Steuerung des Ausführungsflusses innerhalb einer Befehlsdatei: _blocker_ und _block:<name>_. Blocker verhindern die Ausführung von Befehlen, die nach ihnen aufgelistet sind, bis alle Befehle vor ihnen abgeschlossen sind. Blöcke können verwendet werden, um die sequentielle Ausführung von Befehlen innerhalb eines Blocks für ein Ziel zu erzwingen.
Diese werden auf Ebene jedes einzelnen Ziels ausgeführt. Wenn Threads verfügbar sind und ein Blocker für das aktuelle Ziel im Weg ist, startet Interlace Befehle vom nächsten Ziel in der Zielliste, um die Effizienz zu maximieren.
Die Verwendung dieser Funktionen ermöglicht es Ihnen, den Ausführungsfluss für einzelne Ziele direkter zu steuern, um zu verhindern, dass Befehle in falscher Reihenfolge ausgeführt werden.
Blocker verhindern, dass etwas unterhalb von ihnen ausgeführt wird, bis alle Befehle oberhalb von ihnen abgeschlossen sind (für den aktuell aktiven Host). Zum Beispiel im folgenden:
mkdir -p _output_/_target_/scans/
_blocker_
nmap _target_ -oA _output_/_target_/scans/_target_-nmap
Die Verwendung eines Blockers verhindert hier, dass nmap auf einem Ziel läuft, bevor die grundlegende Ordnerstruktur erstellt wurde, und verhindert so, dass nmap eine Ausnahme auslöst.
Blöcke erzwingen, dass alles innerhalb von ihnen sequentiell ausgeführt wird. Sie können auch mehrere Blöcke pro Befehlsdatei verwenden. Zum Beispiel im folgenden:
_block:nmap_
mkdir -p _target_/output/scans/
nmap _target_ -oN _target_/output/scans/_target_-nmap
_block:nmap_
nikto --host _target_
In diesem Beispiel würde der Block wie zuvor ausgeführt werden, aber vorausgesetzt, die Thread-Anzahl ist hoch genug, würde nikto sofort zu laufen beginnen und Ergebnisse an das Terminal zurückgeben (während nmap und die Dateierstellung im Hintergrund stattfanden).
Angenommen, Sie haben eine Datei targets.txt mit folgendem Inhalt:
bugcrowd.com
hackerone.com
Sie könnten Interlace verwenden, um über eine beliebige Anzahl von Zielen in dieser Datei zu laufen, mit:
➜ /tmp interlace -tL ./targets.txt -threads 5 -c "nikto --host _target_ > ./_target_-nikto.txt" -v
=========================================================================
Interlace v1.0 by Michael Skelton (@codingo_) & Sajeeb Lohani (@sml555_)
=========================================================================
[14:33:23] [THREAD] [nikto --host hackerone.com > ./hackerone.com-nikto.txt] Added to Queue
[14:33:23] [THREAD] [nikto --host bugcrowd.com > ./bugcrowd.com-nikto.txt] Added to Queue
Dies würde Nikto über jeden Host ausführen und für jedes Ziel eine Datei speichern. Beachten Sie im obigen Beispiel, dass wir den Operator > verwenden, sodass die Ergebnisse nicht an das Terminal zurückgegeben werden; dies ist jedoch die gewünschte Funktionalität, da wir sonst nicht zuordnen könnten, für welches Ziel die Nikto-Ergebnisse zurückgegeben werden.
Für Anwendungen, bei denen Sie Rückmeldung wünschen, übergeben Sie Befehle einfach wie gewohnt (oder verwenden Sie tee).
Im obigen Beispiel angenommen, Sie möchten unabhängige Scans sowohl für die Ports 80 als auch 443 für die gleichen Ziele durchführen. Dann würden Sie Folgendes verwenden:
➜ /tmp interlace -tL ./targets.txt -threads 5 -c "nikto --host _target_:_port_ > ./_target_-_port_-nikto.txt" -p 80,443 -v
=========================================================================
Interlace v1.0 by Michael Skelton (@codingo_) & Sajeeb Lohani (@sml555_)
=========================================================================
[14:33:23] [THREAD] [nikto --host hackerone.com:80 > ./hackerone.com-nikto.txt] Added to Queue
[14:33:23] [THREAD] [nikto --host bugcrowd.com:80 > ./hackerone.com-nikto.txt] Added to Queue
[14:33:23] [THREAD] [nikto --host bugcrowd.com:443 > ./bugcrowd.com-nikto.txt] Added to Queue
[14:33:23] [THREAD] [nikto --host hackerone.com:443 > ./hackerone.com-nikto.txt] Added to Queue
Bei Penetrationstests gibt es oft eine Liste von Befehlen, die in nahezu jedem Auftrag ausgeführt werden sollen. Angenommen, diese Liste enthält testssl.sh, nikto und sslscan, dann könnten Sie eine Befehlsliste mit folgendem Inhalt in einer Datei namens commands.txt speichern:
nikto --host _target_:_port_ > _output_/_target_-nikto.txt
sslscan _target_:_port_ > _output_/_target_-sslscan.txt
testssl.sh _target_:_port_ > _output_/_target_-testssl.txt
Wenn Ihnen dann ein Ziel example.com gegeben wird, könnten Sie jeden dieser Befehle gegen dieses Ziel mit folgendem Befehl ausführen:
interlace -t example.com -o ~/Engagements/example/ -cL ./commands.txt -p 80,443
Dies würde dann nikto, sslscan und testssl.sh sowohl für Port 80 als auch 443 gegen example.com ausführen und die Dateien in Ihren Auftragsordner speichern.
Interlace expandiert CIDR-Notation automatisch beim Starten von Threads (es sei denn, das Flag --no-cidr wird übergeben). Dies ermöglicht es Ihnen, CIDR-Notation an eine Vielzahl von Anwendungen zu übergeben:
Um einen virtuellen Host-Scan gegen jedes Ziel innerhalb von 192.168.12.0/24 mit einem direkten Befehl durchzuführen, könnten Sie Folgendes verwenden:
interlace -t 192.168.12.0/24 -c "vhostscan _target_ -oN _output_/_target_-vhosts.txt" -o ~/scans/ -threads 50
Dies funktioniert, obwohl VHostScan keine eingebaute CIDR-Notation unterstützt. Da Interlace die Notation vor dem Aufbau einer Thread-Warteschlange expandiert, erhält VHostScan effektiv nur eine Liste von direkten IP-Adressen zum Scannen.
Interlace expandiert automatisch Glob-Bereiche beim Starten von Threads. Dies ermöglicht es Ihnen, Glob-Bereiche an eine Vielzahl von Anwendungen zu übergeben:
Um einen virtuellen Host-Scan gegen jedes Ziel innerhalb von 192.168.12.* mit einem direkten Befehl durchzuführen, könnten Sie Folgendes verwenden:
interlace -t 192.168.12.* -c "vhostscan _target_ -oN _output_/_target_-vhosts.txt" -o ~/scans/ -threads 50
Auch hier hat VHostScan keine eingebaute Unterstützung für Glob-Bereiche.
Interlace expandiert automatisch Bindestrich-Bereiche beim Starten von Threads. Dies ermöglicht es Ihnen, Glob-Bereiche an eine Vielzahl von Anwendungen zu übergeben:
Um einen virtuellen Host-Scan gegen jedes Ziel innerhalb von 192.168.12.1-15 mit einem direkten Befehl durchzuführen, könnten Sie Folgendes verwenden:
interlace -t 192.168.12.1-15 -c "vhostscan _target_ -oN _output_/_target_-vhosts.txt" -o ~/scans/ -threads 50
Auch hier hat VHostScan keine eingebaute Unterstützung für Bindestrich-Bereiche.
Führen Sie einen virtuellen Host-Scan gegen jeden Host in einer Datei (target-list.txt) durch, während Sie die Scans gleichzeitig auf maximal 50 Threads begrenzen.
Dies könnte mit einem direkten Befehl erfolgen:
interlace -tL ./target-list.txt -c "vhostscan -t _target_ -oN _output_/_target_-vhosts.txt" -o ~/scans/ -threads 50
Oder alternativ, um den gleichen Befehl wie oben, aber mit einer Befehlsdatei auszuführen:
interlace -cL ./vhosts-commands.txt -tL ./target-list.txt -threads 50 -o ~/scans
Dies setzt voraus, dass der Inhalt der Befehlsdatei ist:
vhostscan -t $target -oN _output_/_target_-vhosts.txt
Dies würde für jedes Ziel eine Datei im angegebenen Ausgabeordner ausgeben. Sie könnten auch mehrere Befehle ausführen, indem Sie sie einfach zur Befehlsdatei hinzufügen.
Interlace schließt automatisch alle angegebenen Hosts aus, wenn sie über die Argumente -e oder -eL angegeben werden. Diese Argumente sind auch mit den oben genannten Bereichsnotationen (CIDR, Glob und Bindestrich) kompatibel.
Um einen virtuellen Host-Scan gegen jedes Ziel im CIDR-Bereich 192.168.12.0/24 durchzuführen, aber nicht für die Ziele im Bereich 192.168.12.0/26, mit einem direkten Befehl, könnten Sie Folgendes verwenden:
interlace -t 192.168.12.0/24 -e 192.168.12.0/26 -c "vhostscan _target_ -oN _output_/_target_-vhosts.txt" -o ~/scans/ -threads 50
Im obigen Beispiel angenommen, Sie möchten unabhängige Scans über verschiedene Proxys für die gleichen Ziele durchführen. Dann würden Sie Folgendes verwenden:
➜ /tmp interlace -tL ./targets.txt -pL ./proxies.txt -threads 5 -c "nikto --host _target_:_port_ -useproxy _proxy_ > ./_target_-_port_-nikto.txt" -p 80,443 -v
Ursprünglich geschrieben von Michael Skelton (codingo) und Sajeeb Lohani (sml555) mit Hilfe von Charelle Collett (@Charcol0x89) für das Threading-Refactoring und den Gesamtansatz, und Luke Stephens (hakluke) für Tests und Ansatz.
Beiträge zu diesem Projekt sind sehr willkommen. Wenn Sie neu im Open Source-Bereich sind und etwas Hilfe dabei benötigen, zögern Sie nicht, uns auf Twitter zu kontaktieren (@codingo_) / (@sml555_) – wir helfen, wo wir können.
| Argument | Beschreibung |
|---|
| (stdin) | Ziel-Listen von einer anderen Anwendung im kommagetrennten Format, CIDR-Notation oder als einzelner Host über Pipe einlesen |
| -t | Ein Ziel oder einen Domainnamen angeben, entweder im kommagetrennten Format, CIDR-Notation oder als einzelner Host |
| -tL | Eine Liste von Zielen oder Domainnamen angeben |
| -e | Eine Liste von Zielen zum Ausschließen angeben, entweder im kommagetrennten Format, CIDR-Notation oder als einzelner Host |
| -eL | Eine Liste von Zielen zum Ausschließen angeben |
| -threads | Die maximale Anzahl gleichzeitig laufender Threads angeben (STANDARD:5) |
| -timeout | Einen Timeout-Wert in Sekunden für einen einzelnen Thread angeben (STANDARD:600) |
| -c | Einen einzelnen Befehl angeben, der über jedes Ziel oder jede Domain ausgeführt werden soll |
| -cL | Eine Liste von Befehlen angeben, die über jedes Ziel oder jede Domain ausgeführt werden soll |
| -o | Eine Ausgabe-Ordner-Variable angeben, die in Befehlen als _output_ verwendet werden kann |
| -p | Eine Liste von Port-Variablen angeben, die in Befehlen als _port_ verwendet werden kann. Dies kann ein einzelner Port, eine kommagetrennte Liste oder ein Bereich mit Bindestrich-Notation sein |
| -pL | Eine Liste von Proxys angeben |
| --proto | Protokolle angeben, die in Befehlen als _proto_ verwendet werden können |
| -rp | Eine echte Port-Variable angeben, die in Befehlen als _realport_ verwendet werden kann |
| -random | Ein Verzeichnis von Dateien angeben, das zufällig in Befehlen als _random_ verwendet werden kann |
| --no-bar / --sober | Wenn gesetzt, wird die Fortschrittsanzeige entfernt |
| --no-cidr | Wenn gesetzt, wird CIDR-Notation in einer Zieldatei nicht automatisch in einzelne Hosts expandiert |
| --no-color | Wenn gesetzt, werden alle Vorder- oder Hintergrundfarben entfernt |
| --silent | Wenn gesetzt, werden nur wichtige Informationen angezeigt und Banner sowie andere Informationen ausgeblendet |
| -v | Wenn gesetzt, wird eine ausführliche Ausgabe im Terminal angezeigt |
| Variable | Ersetzung |
|---|
| _target_ | Ersetzt durch die expandierte Zielliste, gegen die der aktuelle Thread läuft |
| _cleantarget_ | Ersetzt durch das Ziel, bereinigt von http:// oder https:// |
| _safe-target_ | Ersetzt durch das Ziel, automatisch für Befehle maskiert, um die Ausführung von Unterbefehlen zu verhindern |
| _host_ | Funktioniert wie _target_ und kann austauschbar verwendet werden |
| _output_ | Ersetzt durch die Ausgabeordner-Variable von Interlace |
| _port_ | Ersetzt durch die expandierte Port-Variable von Interlace |
| _realport_ | Ersetzt durch die echte Port-Variable von Interlace |
| _proxy_ | Ersetzt durch die Proxy-Liste von Interlace |
| _random_ | Ersetzt durch die zufällig ausgewählte Datei von Interlace |