freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

如何使用DWN在Docker中进行渗透测试
2021-04-13 20:26:32

关于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

┏━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓

┃ 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(屏幕截图)这个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: 4444<-4444

(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中存在的所有用于运行调用的选项都是可以使用的有效选项。

项目地址

DWN:https://github.com/sensepost/dwn

许可证协议

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

# 渗透测试 # pwn
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录