
Transformez facilement des applications en ligne de commande monothread en une application multithread rapide avec support CIDR et glob.
Transformez facilement des applications en ligne de commande monothread en une application rapide et multithread avec le support CIDR et glob.
Installez avec :
$ python3 setup.py install
Les dépendances seront alors installées et Interlace sera ajouté à votre PATH sous le nom interlace.
| Exemple | Type de notation |
|---|---|
| 80 | Port unique |
| 1-80 | Notation par tiret, exécute une commande pour chaque port de 1 à 80 |
| 80,443 | Exécute une commande pour le port 80 et le port 443 |
-t et -tL seront traités de la même manière. Vous pouvez passer des cibles comme vous le feriez avec nmap. Cela peut être fait en utilisant la notation CIDR, la notation par tiret, ou une liste délimitée par des virgules. Un seul fichier de liste de cibles peut également utiliser différents types de notation par ligne.
Alternativement, vous pouvez passer des cibles via STDIN et ni -t ni -tL ne seront nécessaires.
Les variables suivantes seront remplacées dans les commandes à l'exécution :
Interlace permet également l'utilisation de deux fonctionnalités supplémentaires pour contrôler le flux d'exécution dans un fichier de commandes : _blocker_ et _block:<name>_. Les bloqueurs empêchent l'exécution des commandes listées après eux, jusqu'à ce que toutes les commandes avant eux soient terminées, et les blocs peuvent être utilisés pour forcer l'exécution séquentielle des commandes listées dans un bloc, pour une cible.
Ces fonctionnalités sont exécutées par cible. Si des threads sont disponibles et qu'un bloqueur bloque la cible actuelle, Interlace commencera les commandes de la cible suivante dans la liste des cibles afin de maximiser l'efficacité.
L'utilisation de ces fonctionnalités vous permettra de contrôler plus directement le flux d'exécution pour des cibles individuelles afin d'empêcher les commandes de s'exécuter dans le désordre.
Les bloqueurs empêchent tout ce qui se trouve en dessous de s'exécuter jusqu'à ce que toutes les commandes au-dessus d'eux soient terminées (pour l'hôte actif). Par exemple, dans ce qui suit :
mkdir -p _output_/_target_/scans/
_blocker_
nmap _target_ -oA _output_/_target_/scans/_target_-nmap
L'utilisation d'un bloqueur ici empêche nmap de s'exécuter sur une cible avant que la structure de dossiers de base n'ait été créée, empêchant nmap de lever une exception.
Les blocs forcent tout ce qui se trouve à l'intérieur à s'exécuter séquentiellement. Vous pouvez également utiliser plusieurs blocs par fichier de commandes. Par exemple, dans ce qui suit :
_block:nmap_
mkdir -p _target_/output/scans/
nmap _target_ -oN _target_/output/scans/_target_-nmap
_block:nmap_
nikto --host _target_
Dans cet exemple, le bloc s'exécuterait comme avant, mais en supposant que le nombre de threads est suffisamment élevé, nikto commencerait à s'exécuter immédiatement, renvoyant les résultats dans le terminal (tandis que nmap et la création de fichiers se déroulent en arrière-plan).
Supposons que vous ayez un fichier targets.txt contenant ce qui suit :
bugcrowd.com
hackerone.com
Vous pourriez utiliser Interlace pour exécuter sur n'importe quel nombre de cibles dans ce fichier en utilisant :
➜ /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
Cela exécuterait Nikto sur chaque hôte et sauvegarderait dans un fichier pour chaque cible. Notez que dans l'exemple ci-dessus, comme nous utilisons l'opérateur >, les résultats ne seront pas renvoyés dans le terminal ; cependant, cela est une fonctionnalité souhaitée car autrement nous ne pourrions pas attribuer à quelle cible les résultats de Nikto appartiennent.
Pour les applications où vous souhaitez un retour, passez les commandes comme d'habitude (ou utilisez tee).
En reprenant l'exemple ci-dessus, supposons que vous souhaitiez exécuter des scans indépendants pour les ports 80 et 443 sur les mêmes cibles. Vous utiliseriez alors la commande suivante :
➜ /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
Souvent, lors de tests d'intrusion, il y a une liste de commandes que vous souhaitez exécuter sur presque chaque mission. Supposons que cette liste inclue testssl.sh, nikto et sslscan. Vous pourriez sauvegarder une liste de commandes dans un fichier appelé 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
Si l'on vous donne alors une cible example.com, vous pourriez exécuter chacune de ces commandes sur cette cible en utilisant la commande suivante :
interlace -t example.com -o ~/Engagements/example/ -cL ./commands.txt -p 80,443
Cela exécuterait nikto, sslscan et testssl.sh pour les ports 80 et 443 sur example.com et sauvegarderait les fichiers dans votre dossier d'engagements.
Interlace étend automatiquement la notation CIDR lorsqu'il lance des threads (sauf si le drapeau --no-cidr est passé). Cela vous permet de passer une notation CIDR à diverses applications :
Pour exécuter un scan d'hôte virtuel sur chaque cible dans 192.168.12.0/24 en utilisant une commande directe, vous pourriez utiliser :
interlace -t 192.168.12.0/24 -c "vhostscan _target_ -oN _output_/_target_-vhosts.txt" -o ~/scans/ -threads 50
Ceci bien que VHostScan n'ait aucun support intégré de notation CIDR. Puisqu'Interlace étend la notation avant de construire une file d'attente de threads, VHostScan ne reçoit en réalité qu'une liste d'adresses IP directes à scanner.
Interlace étend automatiquement les plages glob lorsqu'il lance des threads. Cela vous permet de passer des plages glob à diverses applications :
Pour exécuter un scan d'hôte virtuel sur chaque cible dans 192.168.12.* en utilisant une commande directe, vous pourriez utiliser :
interlace -t 192.168.12.* -c "vhostscan _target_ -oN _output_/_target_-vhosts.txt" -o ~/scans/ -threads 50
Encore une fois, VHostScan n'a aucun support intégré de plage glob.
Interlace étend automatiquement les plages par tiret lorsqu'il lance des threads. Cela vous permet de passer des plages par tiret à diverses applications :
Pour exécuter un scan d'hôte virtuel sur chaque cible dans 192.168.12.1-15 en utilisant une commande directe, vous pourriez utiliser :
interlace -t 192.168.12.1-15 -c "vhostscan _target_ -oN _output_/_target_-vhosts.txt" -o ~/scans/ -threads 50
Encore une fois, VHostScan n'a aucun support intégré de plage par tiret.
Exécutez un scan d'hôte virtuel sur chaque hôte dans un fichier (target-list.txt), tout en limitant les scans à 50 threads maximum à la fois.
Cela pourrait être fait en utilisant une commande directe :
interlace -tL ./target-list.txt -c "vhostscan -t _target_ -oN _output_/_target_-vhosts.txt" -o ~/scans/ -threads 50
Ou, alternativement, pour exécuter la même commande qu'au-dessus, mais en utilisant un fichier de commandes :
interlace -cL ./vhosts-commands.txt -tL ./target-list.txt -threads 50 -o ~/scans
Cela suppose que le contenu du fichier de commandes est :
vhostscan -t $target -oN _output_/_target_-vhosts.txt
Cela produirait un fichier pour chaque cible dans le dossier de sortie spécifié. Vous pourriez également exécuter plusieurs commandes simplement en les ajoutant dans le fichier de commandes.
Interlace exclut automatiquement tous les hôtes fournis lorsqu'ils sont spécifiés via les arguments -e ou -eL. Ces arguments sont également compatibles avec les notations de plage mentionnées ci-dessus (CIDR, glob et tiret).
Pour exécuter un scan d'hôte virtuel sur chaque cible dans la plage CIDR 192.168.12.0/24 mais pas pour les cibles dans la plage 192.168.12.0/26, en utilisant une commande directe, vous pourriez utiliser :
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
En reprenant l'exemple ci-dessus, supposons que vous souhaitiez exécuter des scans indépendants via différents proxys pour les mêmes cibles. Vous utiliseriez alors la commande suivante :
➜ /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
Écrit à l'origine par Michael Skelton (codingo) et Sajeeb Lohani (sml555) avec l'aide de Charelle Collett (@Charcol0x89) pour le refactoring du threading et l'approche globale, et Luke Stephens (hakluke) pour les tests et l'approche.
Les contributions à ce projet sont les bienvenues. Si vous êtes nouveau dans l'open source et souhaitez un peu d'aide pour le faire, n'hésitez pas à nous contacter sur Twitter (@codingo_) / (@sml555_) et nous vous assisterons autant que possible.
| Argument | Description |
|---|
| (stdin) | Transmettez des listes de cibles depuis une autre application au format délimité par des virgules, en notation CIDR, ou en tant qu'hôte individuel |
| -t | Spécifiez une cible ou un nom de domaine soit au format délimité par des virgules, en notation CIDR, ou en tant qu'hôte individuel |
| -tL | Spécifiez une liste de cibles ou de noms de domaine |
| -e | Spécifiez une liste de cibles à exclure, soit au format délimité par des virgules, en notation CIDR, ou en tant qu'hôte individuel |
| -eL | Spécifiez une liste de cibles à exclure |
| -threads | Spécifiez le nombre maximal de threads à exécuter simultanément (PAR DÉFAUT : 5) |
| -timeout | Spécifiez une valeur de timeout en secondes pour chaque thread (PAR DÉFAUT : 600) |
| -c | Spécifiez une commande unique à exécuter sur chaque cible ou domaine |
| -cL | Spécifiez une liste de commandes à exécuter sur chaque cible ou domaine |
| -o | Spécifiez une variable de dossier de sortie qui peut être utilisée dans les commandes en tant que _output_ |
| -p | Spécifiez une liste de variables de port qui peut être utilisée dans les commandes en tant que _port_. Cela peut être un port unique, une liste délimitée par des virgules, ou une plage utilisant la notation par tiret |
| -pL | Spécifiez une liste de proxies |
| --proto | Spécifiez des protocoles qui peuvent être utilisés dans les commandes en tant que _proto_ |
| -rp | Spécifiez une variable de port réel qui peut être utilisée dans les commandes en tant que _realport_ |
| -random | Spécifiez un répertoire de fichiers qui peuvent être utilisés aléatoirement dans les commandes en tant que _random_ |
| --no-bar / --sober | Si défini, la barre de progression sera supprimée |
| --no-cidr | Si défini, la notation CIDR dans un fichier de cibles ne sera pas automatiquement étendue en hôtes individuels |
| --no-color | Si défini, les couleurs de premier plan ou d'arrière-plan seront supprimées |
| --silent | Si défini, seules les informations importantes seront affichées, les bannières et autres informations seront masquées |
| -v | Si défini, la sortie verbeuse sera affichée dans le terminal |
| Variable | Remplacement |
|---|
| _target_ | Remplacé par la liste de cibles étendue sur laquelle le thread actuel s'exécute |
| _cleantarget_ | Remplacé par la cible nettoyée de http:// ou https:// |
| _safe-target_ | Remplacé par la cible automatiquement échappée pour les commandes, empêchant l'exécution de sous-commandes |
| _host_ | Fonctionne comme _target_, et peut être utilisé indifféremment |
| _output_ | Remplacé par la variable de dossier de sortie d'Interlace |
| _port_ | Remplacé par la variable de port étendue d'Interlace |
| _realport_ | Remplacé par la variable de port réel d'Interlace |
| _proxy_ | Remplacé par la liste de proxies d'Interlace |
| _random_ | Remplacé par le fichier choisi aléatoirement d'Interlace |