
d(ockerp)wn - un gestionnaire d'outils docker pwn
dwn est un "docker-compose pour hackers". En utilisant un format simple de "plan" YAML similaire à docker-compose, les noms d'images, les versions et les mappages de volumes / ports sont définis pour configurer un outil.
Avec dwn, vous pouvez :
Exécutez simplement pip3 install dwn.
dwn est en fait très simple. Le concept principal est celui de "plans" où les informations sur un outil (comme le nom, la version, les montages et les liaisons) sont définies. Il existe déjà quelques plans intégrés, mais vous pouvez aussi créer les vôtres. Sans arguments, lancer dwn ressemblerait à ceci.
❯ 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
Pour lister les plans disponibles, exécutez 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
Pour exécuter un plan tel que gowitness pour prendre une capture d'écran de https://google.com, exécutez dwn run gowitness --disable-db single https://www.google.com. Ce plan se terminera une fois terminé, vous n'avez donc pas besoin de 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 comme netcat-reverse restera toutefois actif. Vous pouvez vous connecter au TTY du plan après son démarrage pour interagir avec les shells que vous pourriez recevoir. Un exemple d'utilisation serait :
❯ 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
Attacher au plan (et exécuter nc -e ailleurs)
❯ 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
Vous pouvez aussi obtenir un rapport des plans en cours
❯ 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 │ │ │
└────────────────┴───────────────────────────────────────┴────────────┴───────────┘
Et enfin, arrêter un plan.
❯ dwn stop netcat-reverse -y
(i) stopping 2 containers for plan netcat-reverse
dwn vous permet de mapper dynamiquement des ports sur des plans sans redémarrer les conteneurs. Les commandes réseau se trouvent sous la sous-commande dwn network. En prenant l'exemple du plan nginx, nous pouvons ajouter un mappage de port dynamiquement. Tout d'abord, démarrez le 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
Ensuite, testez la communication avec 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
Le port 9000 n'est pas ouvert, alors ajoutons une nouvelle liaison de port et testons la connectivité
❯ 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!
La commande dwn plans pull peut être utilisée pour mettre à jour les images définies dans les plans. Pour ne mettre à jour qu'un seul plan, ajoutez le nom du plan après pull. Ex : dwn plans pull nginx.
Une commande dwn plans new existe pour générer rapidement un nouveau plan. Bien que seules quelques options soient nécessaires pour faire fonctionner un plan, toutes les options existantes dans le SDK Docker Python pour l'appel run sont des balises valides pouvant être utilisées.
dwn est sous licence GNU General Public v3. Des permissions au-delà de cette licence peuvent être disponibles à http://sensepost.com/contact/.