
Convierte fácilmente aplicaciones de línea de comandos monohilo en una aplicación rápida y multihilo con soporte para CIDR y glob.
Convierta fácilmente aplicaciones de línea de comandos de un solo hilo en una aplicación rápida y multiproceso con soporte CIDR y glob.
Instalar usando:
$ python3 setup.py install
Las dependencias se instalarán e Interlace se agregará a tu ruta como interlace.
| Ejemplo | Tipo de notación |
|---|---|
| 80 | Puerto único |
| 1-80 | Notación de guión, ejecuta un comando para cada puerto del 1 al 80 |
| 80,443 | Ejecuta un comando tanto para el puerto 80 como para el puerto 443 |
Tanto -t como -tL se procesarán de la misma manera. Puedes pasar objetivos de la misma forma que al usar nmap. Esto se puede hacer usando notación CIDR, notación de guión o una lista de objetivos separados por comas. Un solo archivo de lista de objetivos también puede usar diferentes tipos de notación por línea.
Alternativamente, puedes pasar objetivos a través de STDIN y no se necesitarán ni -t ni -tL.
Las siguientes variables se reemplazarán en los comandos en tiempo de ejecución:
Interlace también permite el uso de dos características adicionales para controlar el flujo de ejecución dentro de un archivo de comandos: _blocker_ y _block:<nombre>_. Los bloqueadores impiden la ejecución de los comandos listados después de ellos, hasta que todos los comandos anteriores hayan finalizado, y los bloques se pueden usar para forzar la ejecución secuencial de los comandos listados dentro de un bloque, para un objetivo.
Estos se ejecutan a nivel de objetivo individual. Si hay hilos disponibles y un bloqueador está en el camino para el objetivo actual, Interlace iniciará comandos del siguiente objetivo dentro de una lista de objetivos para maximizar la eficiencia.
Usar estas características te permitirá controlar el flujo de ejecución para objetivos individuales de manera más directa para evitar que los comandos se ejecuten fuera de orden.
Los bloqueadores impiden que cualquier cosa debajo de ellos se ejecute hasta que todos los comandos anteriores hayan finalizado (para el host actualmente activo). Por ejemplo, en lo siguiente:
mkdir -p _output_/_target_/scans/
_blocker_
nmap _target_ -oA _output_/_target_/scans/_target_-nmap
El uso de un bloqueador aquí evita que nmap se ejecute en un objetivo antes de que se haya creado la estructura de carpetas base, evitando que nmap lance una excepción.
Los bloques fuerzan que todo lo que contienen se ejecute secuencialmente. También puedes usar múltiples bloques por archivo de comandos. Por ejemplo, en lo siguiente:
_block:nmap_
mkdir -p _target_/output/scans/
nmap _target_ -oN _target_/output/scans/_target_-nmap
_block:nmap_
nikto --host _target_
En este ejemplo, el bloque se ejecutaría igual que antes, pero asumiendo que el número de hilos es suficientemente alto, nikto comenzaría a ejecutarse inmediatamente, devolviendo los resultados a la terminal (mientras nmap y la creación de archivos ocurren en segundo plano).
Supongamos que tienes un archivo targets.txt con el siguiente contenido:
bugcrowd.com
hackerone.com
Podrías usar Interlace para ejecutar sobre cualquier número de objetivos dentro de este archivo usando:
➜ /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
Esto ejecutaría Nikto sobre cada host y guardaría en un archivo para cada objetivo. Nota que en el ejemplo anterior, dado que estamos usando el operador >, los resultados no se devolverán a la terminal; sin embargo, esta es la funcionalidad deseada, ya que de lo contrario no podríamos atribuir a qué objetivo pertenecen los resultados de Nikto.
Para aplicaciones donde deseas retroalimentación, simplemente pasa los comandos como lo harías normalmente (o usa tee).
Usando el ejemplo anterior, supongamos que deseas que se ejecuten escaneos independientes tanto para los puertos 80 como 443 para los mismos objetivos. Entonces usarías lo siguiente:
➜ /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
A menudo, en las pruebas de penetración, hay una lista de comandos que deseas ejecutar en casi todos los trabajos. Suponiendo que esa lista incluye testssl.sh, nikto y sslscan, podrías guardar una lista de comandos con lo siguiente en un archivo llamado 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 luego se te diera un objetivo example.com, podrías ejecutar cada uno de estos comandos contra ese objetivo usando lo siguiente:
interlace -t example.com -o ~/Engagements/example/ -cL ./commands.txt -p 80,443
Esto ejecutaría nikto, sslscan y testssl.sh tanto para el puerto 80 como para el 443 contra example.com y guardaría los archivos en tu carpeta de compromisos.
Interlace expande automáticamente la notación CIDR al iniciar hilos (a menos que se pase la bandera --no-cidr). Esto permite pasar notación CIDR a una variedad de aplicaciones:
Para ejecutar un escaneo de hosts virtuales contra cada objetivo dentro de 192.168.12.0/24 usando un comando directo, podrías usar:
interlace -t 192.168.12.0/24 -c "vhostscan _target_ -oN _output_/_target_-vhosts.txt" -o ~/scans/ -threads 50
Esto a pesar de que VHostScan no tiene soporte incorporado para notación CIDR. Dado que Interlace expande la notación antes de construir una cola de hilos, VHostScan, a todos los efectos, solo recibe una lista de direcciones IP directas para escanear.
Interlace expande automáticamente los rangos glob al iniciar hilos. Esto permite pasar rangos glob a una variedad de aplicaciones:
Para ejecutar un escaneo de hosts virtuales contra cada objetivo dentro de 192.168.12.* usando un comando directo, podrías usar:
interlace -t 192.168.12.* -c "vhostscan _target_ -oN _output_/_target_-vhosts.txt" -o ~/scans/ -threads 50
Una vez más, VHostScan no tiene soporte incorporado para formato de rango glob.
Interlace expande automáticamente los rangos de guión al iniciar hilos. Esto permite pasar rangos de guión a una variedad de aplicaciones:
Para ejecutar un escaneo de hosts virtuales contra cada objetivo dentro de 192.168.12.1-15 usando un comando directo, podrías usar:
interlace -t 192.168.12.1-15 -c "vhostscan _target_ -oN _output_/_target_-vhosts.txt" -o ~/scans/ -threads 50
Una vez más, VHostScan no tiene soporte incorporado para formato de rango de guión.
Ejecuta un escaneo de hosts virtuales contra cada host en un archivo (target-lst.txt), mientras también limitas los escaneos en cualquier momento a un máximo de 50 hilos.
Esto podría hacerse usando un comando directo:
interlace -tL ./target-list.txt -c "vhostscan -t _target_ -oN _output_/_target_-vhosts.txt" -o ~/scans/ -threads 50
O, alternativamente, para ejecutar el mismo comando anterior, pero usando un archivo de comandos:
interlace -cL ./vhosts-commands.txt -tL ./target-list.txt -threads 50 -o ~/scans
Esto supone que el contenido del archivo de comandos es:
vhostscan -t $target -oN _output_/_target_-vhosts.txt
Esto generaría un archivo para cada objetivo en la carpeta de salida especificada. También podrías ejecutar múltiples comandos simplemente agregándolos al archivo de comandos.
Interlace excluye automáticamente cualquier host proporcionado cuando se especifica mediante los argumentos -e o -eL. Estos argumentos también son compatibles con las notaciones de rango mencionadas anteriormente (CIDR, glob y guión).
Para ejecutar un escaneo de hosts virtuales contra cada objetivo en el rango CIDR 192.168.12.0/24 pero no para los objetivos en el rango 192.168.12.0/26, usando un comando directo, podrías usar:
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 el ejemplo anterior, supongamos que deseas que los escaneos independientes se realicen a través de diferentes proxies para los mismos objetivos. Entonces usarías lo siguiente:
➜ /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
Escrito originalmente por Michael Skelton (codingo) y Sajeeb Lohani (sml555) con ayuda de Charelle Collett (@Charcol0x89) para la refactorización de hilos y el enfoque general, y Luke Stephens (hakluke) para pruebas y enfoque.
Las contribuciones a este proyecto son muy bienvenidas. Si eres nuevo en el código abierto y te gustaría recibir ayuda para hacerlo, no dudes en contactarnos en Twitter (@codingo_) / (@sml555_) y te ayudaremos en lo que podamos.
| Argumento | Descripción |
|---|
| (stdin) | Enviar listas de objetivos desde otra aplicación en formato separado por comas, notación CIDR o como un host individual |
| -t | Especificar un objetivo o nombre de dominio en formato separado por comas, notación CIDR o como un host individual |
| -tL | Especificar una lista de objetivos o nombres de dominio |
| -e | Especificar una lista de objetivos a excluir en formato separado por comas, notación CIDR o como un host individual |
| -eL | Especificar una lista de objetivos a excluir |
| -threads | Especificar el número máximo de hilos a ejecutar en un momento dado (POR DEFECTO:5) |
| -timeout | Especificar un valor de tiempo de espera en segundos para cualquier hilo individual (POR DEFECTO:600) |
| -c | Especificar un solo comando a ejecutar sobre cada objetivo o dominio |
| -cL | Especificar una lista de comandos a ejecutar sobre cada objetivo o dominio |
| -o | Especificar una variable de carpeta de salida que se puede usar en comandos como _output_ |
| -p | Especificar una variable de lista de puertos que se puede usar en comandos como _port_. Puede ser un solo puerto, una lista separada por comas o un rango usando notación de guión |
| -pL | Especificar una lista de proxies |
| --proto | Especificar protocolos que se pueden usar en comandos como _proto_ |
| -rp | Especificar una variable de puerto real que se puede usar en comandos como _realport_ |
| -random | Especificar un directorio de archivos que se pueden usar aleatoriamente en comandos como _random_ |
| --no-bar / --sober | Si se establece, se elimina la barra de progreso |
| --no-cidr | Si se establece, la notación CIDR en un archivo de objetivos no se expandirá automáticamente a hosts individuales |
| --no-color | Si se establece, se eliminarán los colores de primer plano o fondo |
| --silent | Si se establece, solo se mostrará información importante y se ocultarán banners y otra información |
| -v | Si se establece, se mostrará la salida detallada en la terminal |
| Variable | Reemplazo |
|---|
| _target_ | Reemplazado por la lista de objetivos expandida contra la que se está ejecutando el hilo actual |
| _cleantarget_ | Reemplazado por el objetivo limpio de http:// o https:// |
| _safe-target_ | Reemplazado por el objetivo automáticamente escapado para comandos, evitando la ejecución de subcomandos |
| _host_ | Funciona igual que _target_ y se puede usar indistintamente |
| _output_ | Reemplazado por la variable de carpeta de salida de Interlace |
| _port_ | Reemplazado por la variable de puerto expandida de Interlace |
| _realport_ | Reemplazado por la variable de puerto real de Interlace |
| _proxy_ | Reemplazado por la lista de proxies de Interlace |
| _random_ | Reemplazado por el archivo elegido aleatoriamente de Interlace |