
d(ockerp)wn - ein Docker-Pwn-Tool-Manager
dwn ist ein "docker-compose für Hacker". Mit einem einfachen YAML-"Plan"-Format ähnlich wie docker-compose werden Image-Namen, Versionen und Volume-/Port-Zuordnungen definiert, um ein Werkzeug für die Nutzung einzurichten.
Mit dwn kannst du:
Führe einfach pip3 install dwn aus.
dwn ist eigentlich wirklich einfach. Das Hauptkonzept ist das der "Pläne", in denen Informationen über ein Werkzeug (wie Name, Version, Mounts und Bindungen) definiert werden. Es gibt bereits einige eingebaute Pläne, aber du kannst auch deine eigenen erstellen. Ohne Argumente sieht die Ausführung von dwn so aus:
❯ 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
Um die verfügbaren Pläne aufzulisten, führe dwn plans show aus.
❯ 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
Um einen Plan wie gowitness auszuführen, der Screenshots von https://google.com erstellt, führe dwn run gowitness --disable-db single https://www.google.com aus. Dieser Plan wird nach der Fertigstellung beendet, sodass du nicht dwn stop gowitness ausführen musst.
❯ 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
Ein Plan wie netcat-reverse bleibt jedoch aktiv. Du kannst nach dem Start eine Verbindung zum TTY des Plans herstellen, um mit eventuell empfangenen Shells zu interagieren. Eine Beispielnutzung wäre:
❯ 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
Verbinden mit dem Plan (und Ausführen von nc -e woanders)
❯ 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
Du kannst auch einen Bericht über laufende Pläne erhalten
❯ 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 │ │ │
└────────────────┴───────────────────────────────────────┴────────────┴───────────┘
Und schließlich, einen Plan stoppen.
❯ dwn stop netcat-reverse -y
(i) stopping 2 containers for plan netcat-reverse
dwn ermöglicht es dir, Ports dynamisch auf Pläne abzubilden, ohne Container neu starten zu müssen. Netzwerkbefehle befinden sich im Unterbefehl dwn network. Am Beispiel des nginx-Plans können wir eine Port-Zuordnung dynamisch hinzufügen. Starte zuerst den nginx-Plan.
❯ 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
Als nächstes testest du die Kommunikation mit 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
Port 9000 ist nicht geöffnet, also fügen wir eine neue Port-Bindung hinzu und testen die Verbindung
❯ 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!
Der Befehl dwn plans pull kann verwendet werden, um die in Plänen definierten images zu aktualisieren. Um nur einen einzelnen Plan zu aktualisieren, füge den Plannamen nach pull hinzu. Z.B.: dwn plans pull nginx.
Es gibt einen Befehl dwn plans new, um schnell ein neues Plan-Gerüst zu erstellen. Obwohl nur wenige Optionen benötigt werden, um einen Plan zum Laufen zu bringen, sind alle Optionen, die im Python Docker SDK für den run-Aufruf existieren, gültige Tags, die verwendet werden können.
dwn ist lizenziert unter der GNU General Public License v3. Erweiterte Berechtigungen über den Rahmen dieser Lizenz hinaus sind möglicherweise unter http://sensepost.com/contact/ erhältlich.