phpmyadmin 2.8.0.3任意文件包含漏洞(无需登录)分析

华盟原创文章投稿奖励计划

漏洞来源于路人甲在wooyun提交的漏洞

存在漏洞的已知版本为 2.8.0.32.11及以上版本已修复

漏洞文件代码/scripts/setup.php

图片[2]-phpmyadmin 2.8.0.3任意文件包含漏洞(无需登录)分析-华盟网

把传入的configuration给反序列化,而这个setup.php中引入了common.lib.php

来到common.lib.php

图片[3]-phpmyadmin 2.8.0.3任意文件包含漏洞(无需登录)分析-华盟网

common.lib.php中引入了Config.class.php

再看看Config.class.php


图片[4]-phpmyadmin 2.8.0.3任意文件包含漏洞(无需登录)分析-华盟网

继续看load方法:

图片[5]-phpmyadmin 2.8.0.3任意文件包含漏洞(无需登录)分析-华盟网

Config.class.php中含有__wakeup魔术方法,因此可以构造序列化参数,造成反序列化漏洞

所以整个思路就是:

setup.php->common.lib.php->Config.class.php->__wakeup()->load()->eval();

POC

url:

http://localhost/phpmyadmin/scripts/setup.php

post data:

configuration=O:10:”PMA_Config”:1:{s:6:”source”;s:11:”/etc/passwd”;}&action=test

mac下测试:

图片[6]-phpmyadmin 2.8.0.3任意文件包含漏洞(无需登录)分析-华盟网

windows下测试:

图片[7]-phpmyadmin 2.8.0.3任意文件包含漏洞(无需登录)分析-华盟网

PHPPOC(用法如win图中所示)

phpmyadin.php

GETSHELL:

但是经过分析这个漏洞php文件的,因为有了,相当于任意文件包含了,不过另一方面这也是有好处的,如果能写入文件,文件中包含一个一句话就可以直接getshell了。作者给的方式是用error log

根据作者的方法,使用默认环境,才发现稍微有点鸡肋。不仅要获得errorlog路径,在ubuntu下,一般是不允许用root权限运行,实际测试中,是无法读取access.log的,所以getshell就比较困难。在windows下,由于几乎所有的浏览器和python模块都会很自觉地将特殊字符编码进行转换getshell就更难了,所以只能用socket去构造shell

图片[8]-phpmyadmin 2.8.0.3任意文件包含漏洞(无需登录)分析-华盟网

Access log中就出现了shell了。

图片[9]-phpmyadmin 2.8.0.3任意文件包含漏洞(无需登录)分析-华盟网

再用任意文件包含漏洞去包含,就可以拿到shell了。

图片[10]-phpmyadmin 2.8.0.3任意文件包含漏洞(无需登录)分析-华盟网

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容