漏洞原理
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+,所以无法复现本漏洞)
复现环境
攻击机:kali-linux-2021.3
靶机:ubuntu(192.168.11.241/24)
复现过程
启动靶场环境
查看端口
docker ps
可以看到开启了8080端口
访问网页192.168.11.241:8080
访问到phpmyadmin界面
用户名root 密码root 登录
这个功能需要登录,且能够写入数据。
因为目标环境使用root,所以我们可以创建一个临时数据库和数据表,进行漏洞利用。
发现test目录可以写入数据
下载POC脚本phpMyAdmin 4.6.2 - (Authenticated) Remote Code Execution - PHP webapps Exploit (exploit-db.com) 复制到kali中
执行python命令
-d是已经可以写的数据库,-c是待执行的PHP语句,如果没有指定表名,这个POC会创建一个名为prgpwn
的表。
可以看到,执行了ls命令
完成!!!