phpMyAdmin
是一个web
端通用MySQL
管理工具,上述版本在/libraries/gis/pma_gis_factory.php
文件里的存在任意文件包含漏洞,恶意访问者利用此漏洞可以获取数据库中敏感信息,存在GETSHELL风险。
该漏洞受影响的版本为: phpMyAdmin 4.0.1 -- 4.2.12
我分析官方发布的漏洞补丁,看以看到代码如下/libraries/gis/pma_gis_factory.php
。
在对比下有漏洞的/libraries/gis/pma_gis_factory.php
代码。
可以看到多了一段 PMA_isValid($type_lower, PMA_Util::getGISDatatypes())
对$type_lower
参数的判断,大概可以猜测漏洞和这个参数有关系。这里的代码逻辑是:用file_exists
判断文件是否存在,如果存在,就用include_once
包含这个文件。如果$type_lower
这个变量是可控的,那么就造成文件包含漏洞。追溯$type_lower
的来源,可以发现是factory
函数的参数,所以找调用factory
函数的地方。
找到gis_data_editor.php
文件,第63行调用factory函数,并且参数等于 $gis_data['gis_type']
,而且 $gis_data = $_REQUEST['gis_data'];
这句代码说明$gis_data
变量是可控的,那说明factory
函数的传参也是可以控制,既然可控,就可以文件包含。这里的文件包含只能跨目录包含.php
的文件,不能任意包含,服务器上的php文件一般不会对它感兴趣。不过当服务器的php
版本满足php
截断条件,那就可以任意文件包含,并且假如在web程序中有上传功能,我们只需上传一个.jpg
这种正常的文件,并再里面嵌入自己的后门,最后利用文件包含来利用这个后门。
实验环境
- 操作机:
Windows XP
实验步骤
我们在网站根目录放置phpinfo.txt
该文件内PHP代码可以打印出PHP详细的版本等信息,我们用来测试任意文件包含,恶意访问者可以上传恶意其他类型文件,包含一句话文件等操作,来达到GETSEHLL的目的。
我们打开http://localhost/
页面来访问本地搭建的存在漏洞的phpMyAdmin
,使用帐号root
密码root
即可登录。登录成功后即可生成token
下面进行下一步操作。如下图所示:
我们点击hackbar
工具的load url
即可将url
地址加载到hackbar
的栏目中,我们把该token
复制下来,准备下一步操作利用任意文件包含。
下面我们在hackbar
栏目中输入:http://localhost/gis_data_editor.php?token=(上面操作复制的内容粘贴进入这里)&gis_data[gis_type]=/../../../phpinfo.txt%00
输入完毕后点击Execute
提交即可,即可包含执行phpinfo.txt
中的php
代码, 如下图所示:
网友评论