社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  docker

如何使用DWN在Docker中进行渗透测试

FreeBuf • 4 年前 • 518 次点击  

关于DWN

DWN是一个针对网络安全研究人员设计和开发的Docker-Compose,它使用的是一种简单的YAML格式的Plan,支持在工具配置和安装过程中定义镜像名称、版本、卷/端口映射等。本质上来说,DWN就是一个Docker版本的渗透测试工具管理器。

当前版本的DWN支持以下功能:

在Docker容器中安装和配置常用渗透测试工具。

能够自动识别卷宗加载。

在不重新启动容器的情况下动态修改端口绑定。

更多功能敬请期待…

DWN安装

首先,我们需要在本地系统安装并配置好Python环境,然后运行下列命令即可安装DWN:

pip3 install dwn

工具使用

DWN的使用非常简单,这里的核心思想就是定义关于工具的信息-Plan,比如说工具名称、版本信息、加载和绑定等等。DWN已经有一些预置的Plan了,我们可以直接运行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

如需查看所有可用Plan的列表,可以运行下列命令(“dwn plans show”):

❯ dwn plans show
dwn plans
┏━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
namepath
┡━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ 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(屏幕截图)这个Plan,可以直接运行下列命令:

dwn run gowitness --disable-db single https://www.google.com

这个Plan将会在完成任务后退出,因此我们不需要运行“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这样的Plan会一直保持运行,我们可以在它开始跟任意Shell交互之后接收到相关信息,比如说:

❯ dwn run netcat-reverse
(i) found plan for netcat-reverse
(i) port: 44444444
(i) container booted! attach & detach commands are:
(i) attach: docker attach dwn_wghz_netcat-reverse
(i) detach: ctrl + p, ctrl + q绑定Plan:❯ 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

最后,终止一个Plan:

❯ dwn stop netcat-reverse -y
(i) stopping 2 containers for plan netcat-reverse

网络连接

DWN允许我们对Plan进行动态端口映射,而无需重启容器。网络连接命令属于dwn network的子命令。我们用nginx这个Plan来举个例子,我们可以对其进行动态端口映射。首先,我们需要启动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

然后,使用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!

更新Plan

“dwn plans pull”命令可以更新Plan中定义的镜像。如需更新一个Plan,只需要在“pull”命令后添加Plan名称即可,比如说:

dwn plans pull nginx

编写Plan

“dwn plans new”命令可以用于快速构建新Plan。尽管启动和运行Plan只需要几个选项,但Python Docker SDK中存在的所有用于运行调用的选项都是可以使用的有效选项。

许可证协议

本项目的开发与发布遵循GNU General Public v3开源许可证协议。

项目地址:点击底部【阅读原文】获取







Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/113761
 
518 次点击