如何快速的搭建漏洞环境到复现到PoC

1

docker快速搭建环境的思路

Docker是个好东西,希望你有一个。

Docker的出现不止在开发领域,在安全领域也有很多用处,最基础的就是漏洞环境了。

之前我也写过一系列低级的文章来描述docker的使用,以及docker怎么快速搭建漏洞环境。

今天就来一篇实战的和说一些高级用法~

之前我说过能快速搭建起漏洞环境才是王道,至于你搞出来的容器像不像一些大牛github上开源漏洞环境的dockerfile那么优雅。倒不是重点了~

用最挫的办法docker cp+docker commit完成得比别人快,比别人更快的复现不就行了,能够快速复现出PoC你的时效性就高,攻防是争分夺秒的。

这次,我想对wordpress插件进行研究,顺便输出几个PoC。

很懒的我自然不会配一个环境了,由于戒掉了在物理机上用phpstudy 的习惯(实在是不安全啊…)所以就基本改用docker了。

docker pull了一个wordpress镜像,wordpress在官方是有镜像的。然后再拉一个mysql的镜像连接起来,官方的数据库没有封装mysql进去的,详情可以看wordpress github的docker file:https://github.com/docker-library/wordpress/

原本以为又是安逸的一天,一切都顺顺利利的,我运行起docker然后安装上插件,然后复现,写PoC,走人。没想到蛋碎一地,碰到了好多问题。

2

docker link的介绍

首先介绍下docker link,映射网络端口不是吧container彼此连接起来的唯一方法。Docker的linking系统允许你吧多个 container连接起来, 让他们彼此交互信息。Docker的linking会创建一种父子级别的关系。 父container可以看到他的子container提供的信息。

Docker的linking系统依赖于container的名字。我们已经注意到了每个container都会被自动的分配一个名字

比如我起一个pentest的docker,那么就会打开自动为其分配一个名字,这里分配的名字是practical_morse。如下图:

为了容器连接的方便,我们通常会为其指定一个名称,可以用docker run –-name xxxx来指定名称。

但是值得注意的一点,如果我们指定名称来启动docker,那么这个名称的容器信息会被永久的存在硬盘里面,这点与自动分配docker名称启动是不一样的。哪怕我们停止或者删除容器还是会存在。下次如果你还要指定相同的名称会报如下错误。

我们可以通过docker rename,双击tab键来看看我的硬盘里面存在哪些指定名称。

tab会自动补齐,显示,这样比docker history去看更方便。

解决命名问题的方法有两种:

一种是刚刚说的docker name,运行命令:docker rename pentest xxxxx

第二种是在启动的时候指定--rm,这样在停止容器的时候就不会将名称留在硬盘里头了,运行命令:docker run --rm --name pentest pentest:v8

我兴致冲冲的准备启动mysql容器后将wordpress的容器与之连接。

接着我们聊聊docker link的用法:

首先我们要启动一个父容器,也就是mysql容器,然后启动子容器连接它。

docker run --rm --name wordpress --link mysql:latest

3

碰到的坑

一、发现虚拟机的磁盘空间不足,

在我运行完mysql镜像的时候,我用docker ps查看是否有正在运行的镜像,即镜像有没有运行成功。

出现了如下状况,运行失败了。

这时候老司机肯定想到用docker history排坑。而我用的是,直接运行,不让他在后台运行。

这种不带参数的运行方式会爆出异常的原因。

我们发现/dev/sda1占用率是100%...

悲催,貌似在创建虚拟机的时候没有选择自动扩容,只能手动扩容了。

用到的工具gparted:https://sourceforge.net/projects/gparted/files/

重启ubuntu的时候选择以这个软件的镜像启动,bios快速启动cd\dvd。

依次删除 linux-swap项, extended项, 最后只剩下sda1和未分配, 然后右键"sda1"项进行调整大小, 将磁盘容量调整到合适的大小并预留空间作为交换区,交换区的大小为你系统内存的大小

再右键"未分配"进行扩展分区出extended分区,然后新建逻辑分区linux-swap

扩容成功。

4

连接wordpress容器与mysql容器

1、 wordpress容器的参数介绍

启动 WordPress 容器时可以指定的一些环境参数包括:

-e WORDPRESS_DB_USER=... 缺省为 “root”

-e WORDPRESS_DB_PASSWORD=...

缺省为连接mysql容器的环境变量 MYSQL_ROOT_PASSWORD 的值

-e WORDPRESS_DB_NAME=... 缺省为 “wordpress”

-e WORDPRESS_AUTH_KEY=...

-e WORDPRESS_SECURE_AUTH_KEY=...

-e WORDPRESS_LOGGED_IN_KEY=...

-e WORDPRESS_NONCE_KEY=...

-e WORDPRESS_AUTH_SALT=...

-e WORDPRESS_SECURE_AUTH_SALT=...

-e WORDPRESS_LOGGED_IN_SALT=...

-e WORDPRESS_NONCE_SALT=... 缺省为随机 sha1 串

运行命令:

docker run --name mysql_vul -e MYSQL_ROOT_PASSWORD=vaf -d mysql

docker run --rm --name wordpress --link mysql_vul:mysql -p 8080:80 -d wordpress_test

2、 wordpress官方容器upload_max_filesize上传大小的限制

这里我们需要修改php.ini。

在docker中有三种方法修改:

A、 在docker file中修改

RUN touch /usr/local/etc/php/conf.d/uploads.ini \ && echo "upload_max_filesize = 10M;" >> /usr/local/etc/php/conf.d/uploads.ini

B、 修改 .htaccess文件

用find . -name ‘.htaccess’命令,我的文件地址在:/var/www/html/.htaccess

增加以下内容:

C、 创建一个uploads.ini文件

将其上传至/usr/local/etc/php/conf.d目录。

使用docker cp命令

docker cp upload.ini 47f4:/usr/local/etc/php/conf.d/upload.ini

重启apache之后就可以放飞自己了。

5

漏洞复现

说来也是吐血,原本简简单单的一个漏洞复现到现在才到了这一步。

不过也没事,以后wordpress的靶场基本就现启现用了(多是复现、研究一些插件的漏洞)。

在wordpress的官方网站:https://cn.wordpress.org/plugins/

基本是搜索不到这个存在漏洞的插件的,官方对待这种爆出漏洞的插件除了下架基本就是杀一个程序员祭天了。

你搜索这个漏洞插件那么wordpress官方就会把你定位到一个官方的安全插件,PV。

搜索存在漏洞的插件推荐以下网站,大部分都能找到的。

第三个是wpscan的官网,wpscan可以说是一块不错的渗透工具

1、 http://chooseplugin.com/plugin-info/

2、 http://wp-plugins-directory.com/

3、 https://wpvulndb.com/

然后复现就是一句话的事情了~

给出payload:

Python版本的exp可以去github上搜索呀,暂时不放链接了。

参考链接:

http://www.vapidlabs.com/advisory.php?v=178

http://www.vapidlabs.com/advisory.php?v=179

http://www.vapidlabs.com/advisory.php?v=180

http://www.vapidlabs.com/advisory.php?v=181

http://www.vapidlabs.com/advisory.php?v=182

原文发布于微信公众号 - 晨星先生(MoXuanIT)

原文发表时间:2017-09-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏信安之路

如何安全快速地部署多道 ctf pwn 比赛题目

一开始接触 pwn 的时候,我们要么本地调试,要么自己用 socat 将程序启动起来远程调试

4593
来自专栏云计算教程系列

如何在Ubuntu 18.04上使用Kubeadm创建Kubernetes 1.11集群

Kubernetes是一个容器编排系统,可以大规模管理容器。Kubernetes最初由谷歌根据其在生产中运行容器的经验开发而成,是一个开源的,并由世界各地的社区...

6790
来自专栏散尽浮华

Docker网络解决方案-Calico部署记录

Calico简单简介 Calico是一个纯三层的协议,为OpenStack虚机和Docker容器提供多主机间通信。Calico不使用重叠网络比如flannel和...

97510
来自专栏北京马哥教育

KVM虚拟化平台部署及管理

前言 KVM即Kernel Virtual Machine,最初是由以色列公司Qumranet开发。2007年2月被导入Linux 2.6.20核心中,成为内核...

4787
来自专栏晨星先生的自留地

docker(四)终篇之靶场环境的搭建

4443
来自专栏机器之心

专栏 | 新手入门?一步一步教你如何安装PaddlePaddle

机器之心发布 来源:百度PaddlePaddle 不久之前,机器之心联合百度推出 PaddlePaddle 专栏,为想要学习这一平台的技术人员推荐相关教程与资源...

5327
来自专栏杨硕的专栏

【腾讯云的1001种玩法】试用腾讯云 Windows Server 2012 R2 镜像的几点经验分享

作者 :杨硕 腾讯云Windows Server 2012 R2镜像上线有段时间了,相信大家都用过了。我自己也用了,分享下我的经验。 1.2012 ping不通...

8786
来自专栏杂文共赏

使用DCHQ自动部署和管理Docker Cloud /虚拟Java微服务

本文演示了一个在云或虚拟平台上,用于自动化部署和管理Docker Java微服务应用程序的解决方案。我们通过扩展现有项目Chris Richardson的示例—...

2024
来自专栏实用工具入门教程

如何部署 Kubernetes 集群

Kubernetes是一个容器编排系统,可以大规模管理容器。Kubernetes最初由谷歌根据其在生产中运行容器的经验开发而成,是一个开源的,并由世界各地的社区...

2713
来自专栏技术翻译

使用Kubernetes和Ambassador API Gateway部署Java应用程序

在本文中,您将学习如何将三个简单的Java服务部署到Kubernetes(通过新的Docker for Mac / Windows集成在本地运行),并通过Kub...

7142

扫码关注云+社区

领取腾讯云代金券