
d(ockerp)wn - um gerenciador de ferramentas pwn para docker
dwn é um "docker-compose para hackers". Usando um formato simples de "plano" YAML semelhante ao docker-compose, nomes de imagens, versões e mapeamentos de volume / porta são definidos para configurar uma ferramenta para uso.
Com o dwn você pode:
Simplesmente execute pip3 install dwn.
dwn é realmente muito simples. O conceito principal é o de "planos", onde informações sobre uma ferramenta (como nome, versão, montagens e binds) são definidas. Existem alguns planos embutidos já disponíveis, mas você também pode criar os seus próprios. Sem argumentos, apenas executar dwn teria a seguinte aparência.
❯ dwn
Usage: dwn [OPTIONS] COMMAND [ARGS]...
__
___/ / _____
/ _ / |/|/ / _ \
\_,_/|__,__/_//_/
docker pwn tool manager
by @leonjza / @sensepost
Options:
--debug enable debug logging
--help Show this message and exit.
Commands:
check Check plans and Docker environment
network Work with networks
plans Work with plans
run Run a plan
show Show running plans
stop Stop a plan
Para listar os planos disponíveis, execute dwn plans show.
❯ dwn plans show
planos dwn
┏━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ nome ┃ caminho ┃
┡━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ sqlmap │ /tools/dwn/plans/sqlmap.yml │
│ wpscan │ /tools/dwn/plans/wpscan.yml │
│ gowitness-report │ /tools/dwn/plans/gowitness-report.yml │
│ msfconsole │ /tools/dwn/plans/msfconsole.yml │
│ gowitness │ /tools/dwn/plans/gowitness.yml │
│ nginx │ /tools/dwn/plans/nginx.yml │
│ cme │ /tools/dwn/plans/cme.yml │
│ netcat-reverse │ /tools/dwn/plans/netcat-reverse.yml │
│ semgrep-sec │ /tools/dwn/plans/semgrep-sec.yml │
│ semgrep-ci │ ~/.dwn/plans/semgrep-ci.yml │
│ neo4j │ ~/.dwn/plans/neo4j.yml │
└──────────────────┴───────────────────────────────────────┘
11 planos
Para executar um plano como gowitness capturando tela de https://google.com, execute dwn run gowitness --disable-db single https://www.google.com. Este plano será encerrado ao final, então você não precisa usar dwn stop gowitness.
❯ dwn run gowitness --disable-db single https://www.google.com
(i) found plan for gowitness
(i) volume: ~/scratch -> /data
(i) streaming container logs
08 Feb 2021 10:46:18 INF preflight result statuscode=200 title=Google url=https://www.google.com
❯
❯ ls screenshots
https-www.google.com.png
Um plano como netcat-reverse no entanto permanecerá ativo. Você pode conectar ao TTY do plano após sua inicialização para interagir com quaisquer shells que receber. Exemplo de uso seria:
❯ dwn run netcat-reverse
(i) found plan for netcat-reverse
(i) port: 4444<-4444
(i) container booted! attach & detach commands are:
(i) attach: docker attach dwn_wghz_netcat-reverse
(i) detach: ctrl + p, ctrl + q
Anexando ao plano (e executando nc -e em outro lugar)
❯ docker attach dwn_wghz_netcat-reverse
connect to [::ffff:172.19.0.2]:4444 from dwn_wghz_netcat-reverse_net_4444_4444.dwn:46318 ([::ffff:172.19.0.3]:46318)
env | grep -i shell
SHELL=/bin/zsh
read escape sequence
Você também pode obter um relatório dos planos em execução
❯ dwn show
relatório de planos em execução
┏━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ plano ┃ container(s) ┃ porta(s) ┃ volume(s) ┃
┡━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ netcat-reverse │ dwn_wghz_netcat-reverse_net_4444_4444 │ 4444<-4444 │ │
│ │ dwn_wghz_netcat-reverse │ │ │
└────────────────┴───────────────────────────────────────┴────────────┴───────────┘
E, por fim, pare um plano.
❯ dwn stop netcat-reverse -y
(i) stopping 2 containers for plan netcat-reverse
dwn permite mapear portas dinamicamente para planos sem qualquer reinicialização de container. Os comandos de rede ficam sob o subcomando dwn network. Tomando o plano nginx como exemplo, podemos adicionar um mapeamento de porta dinamicamente. Primeiro, inicie o plano nginx.
❯ dwn run nginx
(i) found plan for nginx
(i) volume: ~/scratch -> /usr/share/nginx/html
(i) port: 80<-8888
(i) container dwn_wghz_nginx started for plan nginx, detaching
Em seguida, teste a comunicação com o cURL
❯ curl localhost:8888/poo.txt
haha, you touched it!
❯ curl localhost:9000/poo.txt
curl: (7) Failed to connect to localhost port 9000: Connection refused
Porta 9000 não está aberta, então vamos adicionar uma nova ligação de porta e testar a conectividade
❯ dwn network add nginx -i 80 -o 9000
(i) port binding for 9000->nginx:80 created
❯
❯ curl localhost:9000/poo.txt
haha, you touched it!
O comando dwn plans pull pode ser usado para atualizar as images definidas nos planos. Para atualizar apenas um único plano, adicione o nome do plano após pull. Ex: dwn plans pull nginx.
Existe um comando dwn plans new para criar rapidamente um esqueleto de novo plano. Embora apenas algumas opções sejam necessárias para colocar um plano em funcionamento, todas as opções que existem no SDK Docker Python para a chamada run são tags válidas que podem ser usadas.
dwn é licenciado sob a GNU General Public v3 License. Permissões além do escopo desta licença podem estar disponíveis em http://sensepost.com/contact/.