
Uma ferramenta modular e distribuída de testes de penetração.
v0.6.0
English | 中文.
Swarm é uma ferramenta modular de teste de penetração distribuída de código aberto que utiliza fila de tarefas distribuída para implementar comunicação no sistema mestre-escravo e usa MongoDB para armazenamento de dados. Consiste em uma estrutura distribuída e módulos funcionais. O módulo funcional pode ser uma implementação totalmente nova de algumas funções de penetração ou pode ser um simples encapsulamento de uma ferramenta existente para implementar funcionalidade distribuída. Devido à arquitetura modular, é fácil personalizar e estender novos recursos sob a estrutura distribuída.
Agora nesta versão 0.6.0, possui cinco módulos:
Se quiser escrever seu próprio módulo, leia isto.
O zipball pode ser baixado aqui. Você também pode usar git para obter o swarm:
git clone [email protected]:Arvin-X/swarm.git
em seguida, use setup.py para instalar o swarm:
python setup.py install
Swarm funciona com Python 2.6.x ou 2.7.x e precisa de suporte MongoDB no host mestre.
Se você ainda não tem MongoDB, pode usar apt-get para instalá-lo:
apt-get install mongodb
Execute swarm no host mestre para distribuir tarefas e execute swarm-s com a opção '-p' no host escravo para concluir a subtarefa do mestre.
swarm-s -p 9090
Você também pode criar um listener na porta alvo do host escravo para receber comandos para despertar o swarm-s especificando a opção '--waken' ao executar swarm. Caso contrário, deixe '--waken' nulo. Para criar um listener, você pode usar nc ou socat, por exemplo:
nc -e /bin/sh -l 9191
E use o comando de despertar como:
swarm-s ARGS
Você precisa deixar "ARGS" em seu comando e garantir que ele será passado como argumentos de linha de comando para o swarm, para que o swarm o substitua por alguns argumentos necessários como '-p'.
Uso básico do swarm:
usage: swarm [-h] -m MODULE [-v] [-c] [-o PATH] [-t [TARGET [TARGET ...]]]
[-T PATH] [-s [SWARM [SWARM ...]]] [-S PATH] [--waken CMD]
[--timeout TIME] [--m-addr ADDR] [--m-port PORT] [--s-port PORT]
[--authkey KEY] [--db-addr ADDR] [--db-port PORT] [--process NUM]
[--thread NUM] [--taskg NUM] [--dom-compbrute] [--dom-dict PATH]
[--dom-maxlevel NUM] [--dom-charset SET] [--dom-levellen LEN]
[--dom-timeout TIME] [--dir-http-port PORT]
[--dir-https-port PORT] [--dir-compbrute] [--dir-charset SET]
[--dir-len LEN] [--dir-dict PATH] [--dir-maxdepth NUM]
[--dir-timeout TIME] [--dir-not-exist FLAG] [--dir-quick-scan]
[--nmap-ports PORTS] [--nmap-top-ports NUM] [--nmap-ops ...]
[--int-target [URLS [URLS ...]]] [--int-method METHOD]
[--int-headers JSON] [--int-cookies COOKIES] [--int-body BODY]
[--int-payload PAYLOAD] [--int-flag FLAGS] [--int-timeout TIME]
[--map-seed SEED] [--map-http-port PORT] [--map-https-port PORT]
[--map-cookies COOKIES] [--map-interval TIME]
[--map-timeout TIME]
optional arguments:
-h, --help mostra esta mensagem de ajuda e sai
-m MODULE Use o nome do módulo em ./modules/ para ativá-lo
Saída:
Essas opções podem ser usadas para controlar a saída
-v Saída mais detalhada
-c Desativa saída colorida de log
-o PATH Grava log em um arquivo alvo
Alvo:
Pelo menos uma dessas opções deve ser fornecida para definir o alvo, a menos
que haja outra opção especial para definir o alvo no módulo
-t [TARGET [TARGET ...]]
Separados por espaço (ex: github.com 127.0.0.0/24
192.168.1.5)
-T PATH Arquivo contendo lista de alvos, um alvo por linha
Swarm:
Use essas opções para personalizar a conexão swarm. Pelo menos um host
escravo deve ser fornecido.
-s [SWARM [SWARM ...]]
Endereço dos hosts escravos com porta se precisar
despertá-los (ex: 192.168.1.2:9090 192.18.1.3:9191).
Sem porta se swarm-s no host escravo já estiver em execução
-S PATH Arquivo contendo lista de escravos, um host por linha
--waken CMD Comando para despertar hosts escravos, nulo se swarm-s
no host escravo já estiver em execução
--timeout TIME Segundos para esperar antes que a requisição ao swarm
obtenha resposta
--m-addr ADDR Endereço mestre que seja acessível por todos os hosts
escravos
--m-port PORT Porta de escuta no host mestre para distribuir tarefa
--s-port PORT Porta de escuta no host escravo para receber comando
do mestre
--authkey KEY Chave de autenticação entre mestre e escravos
Banco de dados:
Essas opções podem ser usadas para acessar o servidor MongoDB
--db-addr ADDR Endereço do servidor MongoDB
--db-port PORT Porta de escuta do servidor MongoDB
Comum:
Essas opções podem ser usadas para personalizar configuração comum do host
escravo
--process NUM Número máximo de processos concorrentes no host escravo
--thread NUM Número máximo de threads concorrentes no host escravo
--taskg NUM Granularidade das subtarefas de 1 a 3
Varredura de Domínio:
Essas opções podem ser usadas para personalizar ação do swarm para
varredura de subdomínios
--dom-compbrute Usa força bruta completa sem dicionário no alvo
--dom-dict PATH Caminho para dicionário usado para varredura de
subdomínios
--dom-maxlevel NUM Nível máximo de subdomínio a varrer
--dom-charset SET Conjunto de caracteres usado para força bruta completa
--dom-levellen LEN Intervalo de comprimento de subdomínio em cada nível
--dom-timeout TIME Opção de timeout para varredura de subdomínios
Varredura de Diretório:
Essas opções podem ser usadas para personalizar ação do swarm para
varredura de diretório
--dir-http-port PORT Separado por vírgula se precisar de múltiplas portas
--dir-https-port PORT
Separado por vírgula se precisar de múltiplas portas
--dir-compbrute Usa força bruta completa sem dicionário no alvo
--dir-charset SET Conjunto de caracteres usado para força bruta completa
--dir-len LEN Intervalo de comprimento de nome de diretório ou arquivo
--dir-dict PATH Caminho para dicionário usado para varredura de diretório
--dir-maxdepth NUM Profundidade máxima na varredura de diretórios e arquivos
--dir-timeout TIME Opção de timeout para varredura de diretório
--dir-not-exist FLAG Separado por vírgula dupla se precisar de múltiplos
flags
--dir-quick-scan Usa método HEAD em vez de GET na varredura
Módulo Nmap:
Essas opções podem ser usadas para personalizar ação do nmap nos hosts
escravos
--nmap-ports PORTS Suporta formato como '80,443,3306,1024-2048'
--nmap-top-ports NUM Varre <número> de portas mais comuns
--nmap-ops ... Lista de opções do nmap conforme páginas man, isso deve
ser o último nos argumentos de linha de comando
Intruder:
Use o símbolo indicador '@n@' onde 'n' deve ser um número, como '@0@','@1@'
etc., para especificar ponto de ataque na opção 'int_target' e 'int_body'.
Use a opção 'int_payload' para especificar payload usado nesses pontos de
ataque para concluir este ataque.
--int-target [URLS [URLS ...]]
Use esta opção em vez de '-t' ou '-T' para especificar
alvos, separados por vírgula
--int-method METHOD Método HTTP usado neste ataque
--int-headers JSON Dados em formato JSON (ex: {"User-
Agent":"Mozilla/5.0","Origin":"XXX"})
--int-cookies COOKIES
Separados por vírgula. (ex: PHPSESSIONID:XX,token:XX)
--int-body BODY Corpo HTTP ou HTTPS. Você pode usar símbolo indicador
nesta opção
--int-payload PAYLOAD
O formato deve seguir '@0@:PATH,@1@:CHARSET
:NUM-NUM'
--int-flag FLAGS Separado por vírgula dupla se tiver múltiplos flags
--int-timeout TIME Opção de timeout para módulo intruder
Rastreador de Sitemap:
Essas opções podem ser usadas para personalizar o rastreador de sitemap,
ainda não suporta parsing de JS
--map-seed SEED Separado por vírgula se tiver múltiplas sementes
--map-http-port PORT Separado por vírgula se precisar de múltiplas portas
--map-https-port PORT
Separado por vírgula se precisar de múltiplas portas
--map-cookies COOKIES
Separado por vírgula se tiver múltiplos cookies
--map-interval TIME Intervalo de tempo entre duas requisições
--map-timeout TIME Opção de timeout para rastreador de sitemap
Recomenda-se usar arquivo de configuração para configurar o swarm em vez de argumentos de linha de comando se seus requisitos forem altos. Os arquivos de configuração estão localizados em /etc/swarm/.
Swarm é licenciado sob a GPLv3.