首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

phpmyadmin-复现分析

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

新年快乐

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190212G0BHTA00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券