
d(ockerp)wn - 도커 pwn 도구 관리자
dwn은 "해커를 위한 docker-compose"입니다. docker-compose와 유사한 간단한 YAML "플랜" 형식을 사용하여 이미지 이름, 버전, 볼륨/포트 매핑을 정의하여 도구를 설정합니다.
dwn을 사용하면 다음을 할 수 있습니다:
간단히 pip3 install dwn을 실행하세요.
dwn은 실제로 매우 간단합니다. 주요 개념은 도구에 대한 정보(이름, 버전, 마운트 및 바인드 등)를 정의하는 "플랜"입니다. 이미 사용 가능한 몇 가지 내장 플랜이 있으며, 직접 만들 수도 있습니다. 인수 없이 dwn을 실행하면 다음과 같이 표시됩니다.
❯ 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
사용 가능한 플랜을 나열하려면 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
gowitness 플랜을 실행하여 https://google.com 스크린샷을 찍으려면 dwn run gowitness --disable-db single https://www.google.com을 실행하세요. 이 플랜은 완료되면 종료되므로 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
그러나 netcat-reverse와 같은 플랜은 계속 실행됩니다. 시작된 후 플랜의 TTY에 연결하여 수신할 수 있는 쉘과 상호 작용할 수 있습니다. 사용 예는 다음과 같습니다:
❯ 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
플랜에 연결(그리고 다른 곳에서 nc -e 실행)
❯ 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
실행 중인 플랜 보고서도 얻을 수 있습니다
❯ 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 │ │ │
└────────────────┴───────────────────────────────────────┴────────────┴───────────┘
마지막으로 플랜을 중지합니다.
❯ dwn stop netcat-reverse -y
(i) stopping 2 containers for plan netcat-reverse
dwn을 사용하면 컨테이너 재시작 없이 동적으로 포트를 플랜에 매핑할 수 있습니다. 네트워킹 명령은 dwn network 하위 명령 아래에 있습니다. nginx 플랜을 예로 들어 포트 매핑을 동적으로 추가해 보겠습니다. 먼저 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
다음으로, 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
포트 9000은 열려 있지 않으므로 새 포트 바인딩을 추가하고 연결을 테스트해 보겠습니다.
❯ 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!
dwn plans pull 명령을 사용하여 플랜에 정의된 images를 업데이트할 수 있습니다. 단일 플랜만 업데이트하려면 pull 뒤에 플랜 이름을 추가하세요. 예: dwn plans pull nginx.
새 플랜을 빠르게 스캐폴딩하는 dwn plans new 명령이 있습니다. 플랜을 실행하는 데 몇 가지 옵션만 필요하지만, 실행 호출을 위한 Python Docker SDK에 있는 모든 옵션은 유효한 태그로 사용할 수 있습니다.
dwn은 GNU General Public v3 License에 따라 라이선스가 부여됩니다. 이 라이선스 범위를 넘는 권한은 http://sensepost.com/contact/에서 확인할 수 있습니다.