
Trasforma facilmente applicazioni a thread singolo in applicazioni veloci e multi-thread con supporto per CIDR e glob.
Trasforma facilmente applicazioni a riga di comando single-thread in un'applicazione veloce multi-thread con supporto per CIDR e glob.
Installa usando:
$ python3 setup.py install
Le dipendenze verranno installate e Interlace sarà aggiunto al tuo PATH come interlace.
| Esempio | Tipo di notazione |
|---|---|
| 80 | Porta singola |
| 1-80 | Notazione trattino, esegue un comando per ogni porta da 1 a 80 |
| 80,443 | Esegue un comando sia per la porta 80 che per la porta 443 |
Sia -t che -tL verranno elaborati allo stesso modo. Puoi passare i target come faresti con nmap. Questo può essere fatto usando la notazione CIDR, la notazione trattino o un elenco delimitato da virgole. Un singolo file di elenco target può anche usare diversi tipi di notazione per riga.
In alternativa, puoi passare i target tramite STDIN e non saranno necessari né -t né -tL.
Le seguenti variabili verranno sostituite nei comandi in fase di esecuzione:
Interlace utilizza anche due funzionalità aggiuntive per controllare il flusso di esecuzione all'interno di un file di comandi: _blocker_ e _block:<name>_. I Blocker impediscono l'esecuzione dei comandi elencati dopo di loro fino a quando tutti i comandi prima di essi non sono stati completati, mentre i Blocchi possono essere usati per forzare l'esecuzione sequenziale dei comandi elencati all'interno di un blocco, per un target.
Questi vengono eseguiti a livello di singolo target. Se ci sono thread disponibili e un blocker è d'intralcio per il target corrente, Interlace avvierà i comandi dal target successivo all'interno dell'elenco target per massimizzare l'efficienza.
Usare queste funzionalità ti permetterà di controllare il flusso di esecuzione per singoli target in modo più diretto, prevenendo che i comandi vengano eseguiti nell'ordine sbagliato.
I Blocker impediscono che qualsiasi cosa al di sotto di essi venga eseguita fino a quando tutti i comandi sopra di essi non sono stati completati (per l'host attualmente attivo). Ad esempio, nel seguente caso:
mkdir -p _output_/_target_/scans/
_blocker_
nmap _target_ -oA _output_/_target_/scans/_target_-nmap
L'uso di un blocker qui impedisce a nmap di essere eseguito su un target prima che la struttura di cartelle di base sia stata creata, evitando che nmap generi un'eccezione.
I Blocchi impongono che tutto ciò che è al loro interno venga eseguito in sequenza. Puoi anche usare più blocchi per file di comandi. Ad esempio, nel seguente caso:
_block:nmap_
mkdir -p _target_/output/scans/
nmap _target_ -oN _target_/output/scans/_target_-nmap
_block:nmap_
nikto --host _target_
In questo esempio, il blocco funzionerebbe come prima, ma assumendo che il numero di thread sia sufficientemente alto, nikto inizierebbe subito a essere eseguito, inviando i risultati al terminale (mentre nmap e la creazione dei file avvengono in background).
Supponiamo di avere un file targets.txt con il seguente contenuto:
bugcrowd.com
hackerone.com
Potresti usare Interlace per eseguire scansioni su qualsiasi numero di target all'interno di questo file usando: bash
➜ /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
Questo eseguirebbe Nikto su ogni host e salverebbe un file per ciascun target. Nota che nell'esempio sopra, poiché stiamo usando l'operatore >, i risultati non verranno restituiti al terminale; tuttavia questa è una funzionalità desiderata perché altrimenti non saremmo in grado di attribuire a quale target i risultati di Nikto si riferiscano.
Per applicazioni dove desideri ricevere feedback, passa i comandi normalmente (o usa tee).
Usando l'esempio sopra, supponiamo di voler eseguire scansioni indipendenti sia per le porte 80 che 443 per gli stessi target. Dovresti quindi usare:
➜ /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
Spesso nei penetration test esiste un elenco di comandi che vuoi eseguire su quasi ogni job. Supponendo che l'elenco includa testssl.sh, nikto e sslscan, potresti salvare un elenco di comandi con il seguente contenuto in un file chiamato commands.txt:
nikto --host _target_:_port_ > _output_/_target_-nikto.txt
sslscan _target_:_port_ > _output_/_target_-sslscan.txt
testssl.sh _target_:_port_ > _output_/_target_-testssl.txt
Se ti venisse poi assegnato un target example.com, potresti eseguire ciascuno di questi comandi contro questo target usando:
interlace -t example.com -o ~/Engagements/example/ -cL ./commands.txt -p 80,443
Questo eseguirebbe nikto, sslscan e testssl.sh sia per la porta 80 che per la 443 su example.com e salverebbe i file nella cartella degli impegni.
Interlace espande automaticamente la notazione CIDR quando avvia i thread (a meno che non venga passato il flag --no-cidr). Questo ti permette di passare la notazione CIDR a varie applicazioni:
Per eseguire una scansione di virtual host su ogni target all'interno di 192.168.12.0/24 usando un comando diretto potresti usare:
interlace -t 192.168.12.0/24 -c "vhostscan _target_ -oN _output_/_target_-vhosts.txt" -o ~/scans/ -threads 50
Questo nonostante VHostScan non abbia alcun supporto integrato per la notazione CIDR. Poiché Interlace espande la notazione prima di costruire una coda di thread, VHostScan, di fatto, riceve solo un elenco di indirizzi IP diretti da scansionare.
Interlace espande automaticamente gli intervalli glob quando avvia i thread. Questo ti permette di passare intervalli glob a varie applicazioni:
Per eseguire una scansione di virtual host su ogni target all'interno di 192.168.12.* usando un comando diretto potresti usare:
interlace -t 192.168.12.* -c "vhostscan _target_ -oN _output_/_target_-vhosts.txt" -o ~/scans/ -threads 50
Ancora una volta, VHostScan non ha alcun supporto integrato per il formato degli intervalli glob.
Interlace espande automaticamente gli intervalli trattino quando avvia i thread. Questo ti permette di passare intervalli trattino a varie applicazioni:
Per eseguire una scansione di virtual host su ogni target all'interno di 192.168.12.1-15 usando un comando diretto potresti usare:
interlace -t 192.168.12.1-15 -c "vhostscan _target_ -oN _output_/_target_-vhosts.txt" -o ~/scans/ -threads 50
Ancora una volta, VHostScan non ha alcun supporto integrato per il formato degli intervalli trattino.
Esegui una scansione di virtual host su ogni host in un file (target-list.txt), limitando contemporaneamente le scansioni a un massimo di 50 thread in esecuzione.
Questo potrebbe essere fatto usando un comando diretto:
interlace -tL ./target-list.txt -c "vhostscan -t _target_ -oN _output_/_target_-vhosts.txt" -o ~/scans/ -threads 50
Oppure, in alternativa, per eseguire lo stesso comando di cui sopra ma usando un file di comandi:
interlace -cL ./vhosts-commands.txt -tL ./target-list.txt -threads 50 -o ~/scans
Questo presuppone che il contenuto del file di comandi sia:
vhostscan -t $target -oN _output_/_target_-vhosts.txt
Questo produrrebbe un file per ogni target nella cartella di output specificata. Potresti anche eseguire più comandi semplicemente aggiungendoli al file di comandi.
Interlace esclude automaticamente qualsiasi host fornito quando specificato tramite gli argomenti -e o -eL. Questi argomenti sono anche compatibili con le notazioni di intervallo menzionate sopra (CIDR, glob e trattino).
Per eseguire una scansione di virtual host su ogni target nell'intervallo CIDR 192.168.12.0/24 ma non per i target nell'intervallo 192.168.12.0/26, usando un comando diretto, potresti usare:
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
Usando l'esempio sopra, supponiamo di voler eseguire scansioni indipendenti attraverso diversi proxy per gli stessi target. Dovresti quindi usare:
➜ /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
Scritto originariamente da Michael Skelton (codingo) e Sajeeb Lohani (sml555) con l'aiuto di Charelle Collett (@Charcol0x89) per il refactoring del threading e l'approccio generale, e Luke Stephens (hakluke) per test e approccio.
I contributi a questo progetto sono molto graditi. Se sei nuovo nell'open source e desideri un aiuto in merito, non esitare a contattarci su Twitter (@codingo_) / (@sml555_) e ti assisteremo il più possibile.
| Argomento | Descrizione |
|---|
| (stdin) | Inoltra elenchi di target da un'altra applicazione in formato delimitato da virgole, notazione CIDR o come host singolo |
| -t | Specifica un target o nome di dominio in formato delimitato da virgole, notazione CIDR o come host singolo |
| -tL | Specifica un elenco di target o nomi di dominio |
| -e | Specifica un elenco di target da escludere in formato delimitato da virgole, notazione CIDR o come host singolo |
| -eL | Specifica un elenco di target da escludere |
| -threads | Specifica il numero massimo di thread da eseguire contemporaneamente (DEFAULT:5) |
| -timeout | Specifica un timeout in secondi per ogni singolo thread (DEFAULT:600) |
| -c | Specifica un singolo comando da eseguire su ogni target o dominio |
| -cL | Specifica un elenco di comandi da eseguire su ogni target o dominio |
| -o | Specifica una variabile di cartella di output utilizzabile nei comandi come _output_ |
| -p | Specifica una variabile di porta utilizzabile nei comandi come _port_. Può essere una singola porta, un elenco delimitato da virgole o un intervallo usando la notazione trattino |
| -pL | Specifica un elenco di proxy |
| --proto | Specifica i protocolli utilizzabili nei comandi come _proto_ |
| -rp | Specifica una variabile di porta reale utilizzabile nei comandi come _realport_ |
| -random | Specifica una directory di file che possono essere usati casualmente nei comandi come _random_ |
| --no-bar / --sober | Se impostato, la barra di progresso viene rimossa |
| --no-cidr | Se impostato, la notazione CIDR in un file di target non verrà automaticamente espansa in host singoli |
| --no-color | Se impostato, eventuali colori di primo piano o sfondo verranno rimossi |
| --silent | Se impostato, verranno mostrate solo informazioni importanti e i banner e altre informazioni saranno oscurati |
| -v | Se impostato, verrà mostrato output verbose nel terminale |
| Variabile | Sostituzione |
|---|
| _target_ | Sostituito con l'elenco dei target espanso su cui il thread corrente sta operando |
| _cleantarget_ | Sostituito con il target ripulito da http:// o https:// |
| _safe-target_ | Sostituito con il target automaticamente citato per i comandi, impedendo l'esecuzione di sottocomandi |
| _host_ | Funziona come _target_, e può essere usato in modo intercambiabile |
| _output_ | Sostituito con la variabile di cartella di output di Interlace |
| _port_ | Sostituito con la variabile di porta espansa di Interlace |
| _realport_ | Sostituito con la variabile di porta reale di Interlace |
| _proxy_ | Sostituito con l'elenco dei proxy di Interlace |
| _random_ | Sostituito con il file scelto casualmente da Interlace |