
Transforme facilmente aplicações de linha de comando single-threaded em uma aplicação rápida e multi-threaded com suporte a CIDR e glob.
Transforme facilmente aplicações de linha de comando single-threaded em uma aplicação rápida e multi-threaded com suporte a CIDR e glob.
Instale usando:
$ python3 setup.py install
As dependências serão instaladas e o Interlace será adicionado ao seu caminho como interlace.
| Exemplo | Tipo de Notação |
|---|---|
| 80 | Porta única |
| 1-80 | Notação de traço, executa um comando para cada porta de 1 a 80 |
| 80,443 | Executa um comando para ambas as portas 80 e 443 |
Tanto -t quanto -tL serão processados da mesma forma. Você pode passar alvos da mesma forma que faria ao usar o nmap. Isso pode ser feito usando notação CIDR, notação de traço ou uma lista delimitada por vírgulas de alvos. Um único arquivo de lista de alvos também pode usar diferentes tipos de notação por linha.
Alternativamente, você pode passar alvos via STDIN e nem -t nem -tL serão necessários.
As seguintes variáveis serão substituídas nos comandos em tempo de execução:
O Interlace também permite o uso de dois recursos adicionais para controlar o fluxo de execução dentro de um arquivo de comando: _blocker_ e _block:<nome>_. Os Blockers impedem a execução dos comandos listados depois deles até que todos os comandos anteriores tenham sido concluídos, e os blocos podem ser usados para forçar a execução sequencial de comandos listados dentro de um bloco, para um alvo.
Estes são executados em um nível por alvo. Se houver threads disponíveis e um blocker estiver no caminho para o alvo atual, o Interlace iniciará comandos do próximo alvo dentro de uma lista de alvos para maximizar a eficiência.
Usar esses recursos permitirá que você controle o fluxo de execução para alvos individuais de forma mais direta, a fim de evitar que comandos sejam executados fora de ordem.
Os Blockers impedem que qualquer coisa abaixo deles seja executada até que todos os comandos acima deles tenham sido concluídos (para o host atualmente ativo). Por exemplo, no seguinte:
mkdir -p _output_/_target_/scans/
_blocker_
nmap _target_ -oA _output_/_target_/scans/_target_-nmap
O uso de um blocker aqui evita que o nmap seja executado em um alvo antes que a estrutura básica de pastas tenha sido criada, evitando que o nmap lance uma exceção.
Os Blocos forçam tudo dentro deles a ser executado sequencialmente. Você também pode usar vários blocos por arquivo de comando. Por exemplo, no seguinte:
_block:nmap_
mkdir -p _target_/output/scans/
nmap _target_ -oN _target_/output/scans/_target_-nmap
_block:nmap_
nikto --host _target_
Neste exemplo, o bloco seria executado da mesma forma que antes, mas assumindo que o número de threads seja alto o suficiente, o nikto começaria a ser executado imediatamente, enviando resultados de volta ao terminal (enquanto o nmap e a criação de arquivo ocorreriam em segundo plano).
Vamos supor que você tenha um arquivo targets.txt com o seguinte conteúdo:
bugcrowd.com
hackerone.com
Você poderia usar o Interlace para executar sobre qualquer número de alvos dentro deste arquivo usando: bash
➜ /tmp interlace -tL ./targets.txt -threads 5 -c "nikto --host _target_ > ./_target_-nikto.txt" -v
=========================================================================
Interlace v1.0 por Michael Skelton (@codingo_) & Sajeeb Lohani (@sml555_)
=========================================================================
[14:33:23] [THREAD] [nikto --host hackerone.com > ./hackerone.com-nikto.txt] Adicionado à Fila
[14:33:23] [THREAD] [nikto --host bugcrowd.com > ./bugcrowd.com-nikto.txt] Adicionado à Fila
Isso executaria o Nikto em cada host e salvaria em um arquivo para cada alvo. Observe que no exemplo acima, como estamos usando o operador >, os resultados não serão enviados de volta ao terminal; no entanto, essa é uma funcionalidade desejada, caso contrário, não seríamos capazes de atribuir para qual alvo os resultados do Nikto estavam retornando.
Para aplicações onde você deseja feedback, simplesmente passe os comandos como faria normalmente (ou use tee).
Usando o exemplo acima, vamos supor que você queira executar varreduras independentes para ambas as portas 80 e 443 para os mesmos alvos. Você então usaria o seguinte:
➜ /tmp interlace -tL ./targets.txt -threads 5 -c "nikto --host _target_:_port_ > ./_target_-_port_-nikto.txt" -p 80,443 -v
=========================================================================
Interlace v1.0 por Michael Skelton (@codingo_) & Sajeeb Lohani (@sml555_)
=========================================================================
[14:33:23] [THREAD] [nikto --host hackerone.com:80 > ./hackerone.com-nikto.txt] Adicionado à Fila
[14:33:23] [THREAD] [nikto --host bugcrowd.com:80 > ./hackerone.com-nikto.txt] Adicionado à Fila
[14:33:23] [THREAD] [nikto --host bugcrowd.com:443 > ./bugcrowd.com-nikto.txt] Adicionado à Fila
[14:33:23] [THREAD] [nikto --host hackerone.com:443 > ./hackerone.com-nikto.txt] Adicionado à Fila
Frequentemente em testes de penetração, há uma lista de comandos que você deseja executar em quase todos os trabalhos. Supondo que essa lista inclua testssl.sh, nikto e sslscan, você poderia salvar uma lista de comandos com o seguinte conteúdo em um arquivo chamado 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 você recebesse um alvo example.com, poderia executar cada um desses comandos contra este alvo usando o seguinte:
interlace -t example.com -o ~/Engagements/example/ -cL ./commands.txt -p 80,443
Isso executaria nikto, sslscan e testssl.sh para ambas as portas 80 e 443 contra example.com e salvaria os arquivos na sua pasta de engajamentos.
O Interlace expande automaticamente a notação CIDR ao iniciar threads (a menos que a flag --no-cidr seja passada). Isso permite que você passe notação CIDR para uma variedade de aplicações:
Para executar uma varredura de host virtual contra cada alvo dentro de 192.168.12.0/24 usando um comando direto, você poderia usar:
interlace -t 192.168.12.0/24 -c "vhostscan _target_ -oN _output_/_target_-vhosts.txt" -o ~/scans/ -threads 50
Isso apesar do VHostScan não ter suporte embutido para notação CIDR. Como o Interlace expande a notação antes de construir uma fila de threads, o VHostScan, para todos os efeitos, está recebendo apenas uma lista de endereços IP diretos para escanear.
O Interlace expande automaticamente intervalos glob ao iniciar threads. Isso permite que você passe intervalos glob para uma variedade de aplicações:
Para executar uma varredura de host virtual contra cada alvo dentro de 192.168.12.* usando um comando direto, você poderia usar:
interlace -t 192.168.12.* -c "vhostscan _target_ -oN _output_/_target_-vhosts.txt" -o ~/scans/ -threads 50
Novamente, o VHostScan não possui suporte embutido para formato de intervalo glob.
O Interlace expande automaticamente intervalos de traço ao iniciar threads. Isso permite que você passe intervalos glob para uma variedade de aplicações:
Para executar uma varredura de host virtual contra cada alvo dentro de 192.168.12.1-15 usando um comando direto, você poderia usar:
interlace -t 192.168.12.1-15 -c "vhostscan _target_ -oN _output_/_target_-vhosts.txt" -o ~/scans/ -threads 50
Novamente, o VHostScan não possui suporte embutido para formato de intervalo de traço.
Execute uma varredura de host virtual contra cada host em um arquivo (target-lst.txt), ao mesmo tempo limitando as varreduras a no máximo 50 threads por vez.
Isso poderia ser feito usando um comando direto:
interlace -tL ./target-list.txt -c "vhostscan -t _target_ -oN _output_/_target_-vhosts.txt" -o ~/scans/ -threads 50
Ou, alternativamente, para executar o mesmo comando acima, mas usando um arquivo de comandos:
interlace -cL ./vhosts-commands.txt -tL ./target-list.txt -threads 50 -o ~/scans
Isso pressupõe que o conteúdo do arquivo de comando seja:
vhostscan -t $target -oN _output_/_target_-vhosts.txt
Isso geraria um arquivo para cada alvo na pasta de saída especificada. Você também poderia executar vários comandos simplesmente adicionando-os ao arquivo de comando.
O Interlace exclui automaticamente quaisquer hosts fornecidos quando especificados pelos argumentos -e ou -eL. Esses argumentos também são compatíveis com as notações de intervalo mencionadas acima (CIDR, glob e traço)
Para executar uma varredura de host virtual contra cada alvo no intervalo CIDR 192.168.12.0/24, mas não para os alvos no intervalo 192.168.12.0/26, usando um comando direto, você poderia 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 o exemplo acima, vamos supor que você queira executar varreduras independentes através de diferentes proxies para os mesmos alvos. Você então usaria o seguinte:
➜ /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
Originalmente escrito por Michael Skelton (codingo) e Sajeeb Lohani (sml555) com ajuda de Charelle Collett (@Charcol0x89) para a refatoração de threading e abordagem geral, e Luke Stephens (hakluke) para testes e abordagem.
Contribuições para este projeto são muito bem-vindas. Se você é novo em código aberto e gostaria de alguma ajuda para fazê-lo, sinta-se à vontade para nos contatar no Twitter (@codingo_) / (@sml555_) e ajudaremos no que for possível.
| Argumento | Descrição |
|---|
| (stdin) | Passe listas de alvos de outra aplicação em formato delimitado por vírgulas, notação CIDR ou como um host individual |
| -t | Especifique um alvo ou nome de domínio em formato delimitado por vírgulas, notação CIDR ou como um host individual |
| -tL | Especifique uma lista de alvos ou nomes de domínio |
| -e | Especifique uma lista de alvos a excluir em formato delimitado por vírgulas, notação CIDR ou como um host individual |
| -eL | Especifique uma lista de alvos a excluir |
| -threads | Especifique o número máximo de threads a executar em qualquer momento (PADRÃO:5) |
| -timeout | Especifique um valor de timeout em segundos para qualquer thread única (PADRÃO:600) |
| -c | Especifique um único comando a executar sobre cada alvo ou domínio |
| -cL | Especifique uma lista de comandos a executar sobre cada alvo ou domínio |
| -o | Especifique uma variável de pasta de saída que pode ser usada em comandos como _output_ |
| -p | Especifique uma lista de variáveis de porta que podem ser usadas em comandos como _port_. Pode ser uma única porta, uma lista delimitada por vírgulas ou um intervalo usando notação de traço |
| -pL | Especifique uma lista de proxies |
| --proto | Especifique protocolos que podem ser usados em comandos como _proto_ |
| -rp | Especifique uma variável de porta real que pode ser usada em comandos como _realport_ |
| -random | Especifique um diretório de arquivos que podem ser usados aleatoriamente em comandos como _random_ |
| --no-bar / --sober | Se definido, a barra de progresso será removida |
| --no-cidr | Se definido, a notação CIDR em um arquivo de alvos não será automaticamente expandida para hosts individuais |
| --no-color | Se definido, quaisquer cores de primeiro plano ou fundo serão removidas |
| --silent | Se definido, apenas informações importantes serão exibidas e banners e outras informações serão omitidas |
| -v | Se definido, a saída detalhada será exibida no terminal |
| Variável | Substituição |
|---|
| _target_ | Substituída pela lista expandida de alvos contra a qual a thread atual está executando |
| _cleantarget_ | Substituída pelo alvo limpo de http:// ou https:// |
| _safe-target_ | Substituída pelo alvo com automatic quoting para comandos, evitando execução de subcomandos |
| _host_ | Funciona da mesma forma que _target_, e pode ser usada de forma intercambiável |
| _output_ | Substituída pela variável de pasta de saída do Interlace |
| _port_ | Substituída pela variável de porta expandida do Interlace |
| _realport_ | Substituída pela variável de porta real do Interlace |
| _proxy_ | Substituída pela lista de proxies do Interlace |
| _random_ | Substituída pelo arquivo escolhido aleatoriamente do Interlace |