
d(ockerp)wn - un gestore di strumenti pwn per Docker
dwn è un "docker-compose per hacker". Utilizzando un semplice formato YAML "plan" simile a docker-compose, vengono definiti nomi di immagini, versioni e mapping di volumi/porte per configurare uno strumento per l'uso.
Con dwn puoi:
Basta eseguire pip3 install dwn.
dwn è in realtà molto semplice. Il concetto principale è quello dei "piani" (plans) dove vengono definite informazioni su uno strumento (come nome, versione, mount e bind). Ci sono alcuni piani integrati già disponibili, ma puoi anche crearne di tuoi. Senza argomenti, eseguire semplicemente dwn apparirebbe così.
❯ 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
Per elencare i piani disponibili, esegui 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
Per eseguire un piano come gowitness che fa screenshot di https://google.com, esegui dwn run gowitness --disable-db single https://www.google.com. Questo piano terminerà al completamento, quindi non devi eseguire 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 piano come netcat-reverse invece rimarrà attivo. Puoi connetterti alla TTY del piano dopo l'avvio per interagire con eventuali shell ricevute. Un esempio di utilizzo sarebbe:
❯ 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
Collegandosi al piano (ed eseguendo nc -e da qualche altra parte)
❯ 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
Puoi anche ottenere un report dei piani in esecuzione
❯ 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 │ │ │
└────────────────┴───────────────────────────────────────┴────────────┴───────────┘
E infine, fermare un piano.
❯ dwn stop netcat-reverse -y
(i) stopping 2 containers for plan netcat-reverse
dwn ti permette di mappare dinamicamente le porte ai piani senza riavviare i container. I comandi di rete si trovano nel sottocomando dwn network. Prendendo come esempio il piano nginx, possiamo aggiungere un mapping di porte dinamicamente. Per prima cosa, avvia il piano 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
Successivamente, testa la comunicazione 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
La porta 9000 non è aperta, quindi aggiungiamo un nuovo binding di porte e testiamo la connettività
❯ 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!
Il comando dwn plans pull può essere utilizzato per aggiornare le images definite nei piani. Per aggiornare un solo piano, aggiungi il nome del piano dopo pull. Ad esempio: dwn plans pull nginx.
Esiste un comando dwn plans new per creare rapidamente un nuovo piano. Mentre solo poche opzioni sono necessarie per avviare un piano, tutte le opzioni presenti nell'SDK Python Docker per la chiamata run sono tag validi che possono essere utilizzati.
dwn è concesso in licenza sotto GNU General Public v3 License. Autorizzazioni al di là dello scopo di questa licenza possono essere disponibili all'indirizzo http://sensepost.com/contact/.