
d(ockerp)wn - un gestor de herramientas de pwn para Docker
dwn es un "docker-compose para hackers". Utilizando un formato de "plan" YAML simple similar a docker-compose, se definen nombres de imágenes, versiones y asignaciones de volúmenes/puertos para configurar una herramienta para su uso.
Con dwn puedes:
Simplemente ejecuta pip3 install dwn.
dwn es en realidad muy simple. El concepto principal es el de "planes" donde se define información sobre una herramienta (como nombre, versión, montajes y enlaces). Ya hay algunos planes incorporados disponibles, pero también puedes crear los tuyos propios. Sin argumentos, ejecutar dwn se vería así.
❯ 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 los planes disponibles, ejecuta dwn plans show.
❯ dwn plans show
dwn plans
┏━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ name ┃ path ┃
┡━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ 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 plans
Para ejecutar un plan como gowitness capturando pantalla de https://google.com, ejecuta dwn run gowitness --disable-db single https://www.google.com. Este plan terminará cuando termine, por lo que no necesitas 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
Un plan como netcat-reverse sin embargo permanecerá activo. Puedes conectarte a la TTY del plan después de que se inicie para interactuar con cualquier shell que puedas recibir. Un ejemplo de uso sería:
❯ 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
Conectándose al plan (y ejecutando nc -e en otro 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
También puedes obtener un informe del plan en ejecución
❯ dwn show
running plan report
┏━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ plan ┃ container(s) ┃ port(s) ┃ volume(s) ┃
┡━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ netcat-reverse │ dwn_wghz_netcat-reverse_net_4444_4444 │ 4444<-4444 │ │
│ │ dwn_wghz_netcat-reverse │ │ │
└────────────────┴───────────────────────────────────────┴────────────┴───────────┘
Y finalmente, detener un plan.
❯ dwn stop netcat-reverse -y
(i) stopping 2 containers for plan netcat-reverse
dwn te permite mapear puertos dinámicamente a planes sin reiniciar contenedores. Los comandos de red se encuentran en el subcomando dwn network. Tomando el plan nginx como ejemplo, podemos agregar un mapeo de puertos dinámicamente. Primero, inicia el plan 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
A continuación, prueba la comunicación con 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
El puerto 9000 no está abierto, así que agreguemos un nuevo enlace de puerto y probemos la conectividad
❯ 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!
El comando dwn plans pull se puede usar para actualizar las images definidas en los planes. Para actualizar solo un plan, agrega el nombre del plan después de pull. Ej: dwn plans pull nginx.
Existe un comando dwn plans new para generar rápidamente un nuevo plan. Aunque solo se necesitan unas pocas opciones para poner un plan en funcionamiento, todas las opciones que existen en el SDK de Python Docker para la llamada run son etiquetas válidas que se pueden usar.
dwn está licenciado bajo la Licencia Pública General de GNU v3. Los permisos más allá del alcance de esta licencia pueden estar disponibles en http://sensepost.com/contact/.