PHPCMS v9.6.2 任意文件读取漏洞(最新版本补丁可绕过)
laoyan 2017-05-05 21:07:52
分 享


漏洞简介


PHPCMS v9.6.2 是官方 5月3日发布的最新版本,对 v9.6.1 中任意文件读取漏洞和 swfupload.swf XSS 漏洞进行了修复。 新版本发布情况如下:


phpcmsv9.6.2 远程代码执行漏洞01.png


但是任意文件读取的漏洞似乎并没有补好。经验证,该漏洞在最新的 v9.6.2 版本中依然可以被绕过利用。


漏洞分析


PHPCMSv9.6.2 的补丁中只修改了 phpcms/modules/content/down.php 一个文件,删除了 103 行校验文件名的代码:


phpcmsv9.6.2远程代码执行漏洞02.png


将其添加到了第 126 行


phpcms v9.6.2 远程代码执行漏洞03.png


从而阻止了替换<、>之后造成的任意文件读取。


但是通过分析这一句if判断发现,它仅仅过滤了 *.php, *php.*, ../../a.txt, C:\a.txt这类文件名,但是仍然可以读取很多文件,比如 Linux 下的  /etc/passwd。所以  v9.6.1 的文件读取漏洞仍然可以使用。


漏洞利用


利用方式与 v9.6.1 的利用方式相同,这里简单说明一下。


1、phpcms/modules/content/down.php 中的 down->download() 方法在将 $fileurl 传递给 file_down 之前,会去除其中的  <  和  > ,所以可以利用 <  和  > 来绕过过滤规则:


phpcms 远程代码执行漏洞04.png


而 $fileurl 是由 $f 和 $s 组成的,所以我们需要控制 $f 和 $s:


phpcms v9.6.2远程代码执行漏洞05.png


down->download() 函数首先从参数中解密 a_k 参数,做一次 safe_replace,然后再 parse_str 取出各个变量:


phpcms v9.6.2 远程代码执行漏洞06.png


所以我们需要提供合法的 a_k 参数,使其能够被正确解密,并且能够通过 parse_str 获得变量。


2、我们可以通过 phpcms/modules/attachment/attachments.php 中的 swfupload_json() 函数来帮助我们完成加密工作:


phpcms v9.6.2远程代码执行漏洞07.png


其中的 param::set_cookie() 会调用系统的加密函数,并把加密后的字符串通过 Cookie 返回给我们。所以我们需要做的就是将 payload 放到 src 参数中。 但是 attachments 的构造函数会校验用户的 id,我们可以在登陆后获取 userid,或者 POST 一个 userid_flash 参数:


phpcms v9.6.2远程代码执行漏洞08.png


因为 sys_auth($_POST['userid_flash'],'DECODE'),所以 userid_flash 参数也需要正确地加密。


3、为了加密 userid_flash 参数,我们可以利用  phpcms/modules/wap/index.php 模块。其构造函数会获取 siteid 参数,将其加密后放入 cookie 中:


phpcms v9.6.2 远程代码执行漏洞09.png


终于,走通了流程!总结一下:


(1)利用 wap/index 获取加密的 userid_flash

(2)使用 userid_flash 绕过 attachments 的校验,执行 swfupload_json 函数,为 s,f 加密

(3)使用 down->init() 方法生成加密后的下载链接

(4)访问下载链接,down->download() 解密 a_k,从中取出 s,f 变量,组成$fileurl,最后去除 > 符号,传入 file_down() 函数,返回文件内容。


利用结果


phpcms v9.6.2 远程代码执行漏洞10.png

phpcms v9.6.2 远程代码执行漏洞11.png


解决方法


1、严格过滤fileurl变量,将其限制在upload_path目录内


2、受影响用户请随时关注 PHPCMS 官方网站,获取最新修补方案,官网链接:http://bbs.phpcms.cn/forum.php


原文地址


千里目安全实验室  

我要小额支持下

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

取消
吐槽一下

游客

所有吐槽
  • 暂时还没有吐槽,赶紧来吐槽!