0x01 phpmyadmin简述
phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库。借由此Web接口可以成为一个简易方式输入繁杂SQL语法的较佳途径,尤其要处理大量资料的汇入及汇出更为方便。其中一个更大的优势在于由于phpMyAdmin跟其他PHP程式一样在网页服务器上执行,但是您可以在任何地方使用这些程式产生的HTML页面,也就是于远端管理MySQL数据库,方便的建立、修改、删除数据库及资料表。也可借由phpMyAdmin建立常用的php语法,方便编写网页时所需要的sql语法正确性。
0x02 影响版本
phpmyadmin 4.8.1
0x03 利用条件
需要登陆
0x04 漏洞分析
这个漏洞是前两天chamd5公布的,然后呢,由于比较忙,第一时间没有看,趁着周末翻翻看看。
漏洞位置
漏洞位置在index.php 55~63行代码。
简单分析一下这段代码。
这里有个if判断,进入到之前需要经过5个判断:
1.不能为空
2.为字符串
3.不能以index开头
4.不在数组内
5.需要满足
这里首先我们先看一下第4点是个什么东西,在index.php的第50~52行
所以这里第四点只要满足target 参数不是 import.php 或 export.php 就行。
然后第5点我们说到需要满足,这里跟进一下看看这个函数具体在干嘛。
函数具体位置在libraries\classes\core.php的443~476行
问题出在了下面这串代码
这里会将page参数进行url解码,然后判断是否在是的话返回true。
这里可以看看有哪些。
跟进看到下面这些白名单数组。
漏洞利用
网上给的payload:中的db_sql.php可以用上述的白名单替换从而绕过。
这串主要使用查找第一次出现的位置,然后通过函数第一位的数据,并且赋值给然后与白名单进行比较。
这里有小问题,为什么要针对进行二次编码。
这里简化一下代码。
windows下测试
在windows下测试时候发现:
php会针对二次编码传入之后的参数,进行一次urldecode操作,然后可以成功包含,但是如果是一次编码,会报错,找不到文件。看一下原因发现target值会被解析成,然后php会把前面db_sql.php%3f当成目录,所以要多加一个../来跨出目录。
mac下测试
我在mac下测试时候,通过网上的方法依然可以包含,但是我发现一个有趣的东西
我发现不通过编码的话,依然能够包含文件
国外也有个小哥哥发现了这个问题,我想这两个差异应该和操作系统有关系。
getshell
chamd5中给的方法是将数据库查询数据写入到文件里。
新建test1表,插入
最后访问
还有种简单的办法,包含session文件,php一般会在tmp下生成session 文件。
refer
新年快乐
领取专属 10元无门槛券
私享最新 技术干货