怎么进行Discuz! X任意文件删除的漏洞分析

2023-05-15

这篇文章将为大家详细讲解有关怎么进行Discuz! X任意文件删除的漏洞分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

0x00 背景介绍


Discuz 官方于2017年9月29号在Git上提交更新:优化 加强安全性。360CERT跟进了此更新并确认存在任意文件删除漏洞。

0x01 漏洞描述


此漏洞曾在2014年被提交到乌云Wooyun平台,Discuz进行了针对性修复。但360CERT通过此次commit分析,由于之前的修复不完全,可导致补丁被bypass,攻击者登录后可以通过设置个人资料为删除文件路径,并构造一次文件上传,就可以绕过补丁造成任意文件删除。

0x02 漏洞攻击影响


影响面

普通注册用户即可实现任意文件删除。经过360CERT研判后确认,漏洞风险等级高。

影响版本

Discuz! X3.4

Discuz! X3.3

Discuz! X3.2

Discuz! X2.5

修复版本

码云平台Discuz!X 

commit 7d603a197c2717ef1d7e9ba654cf72aa42d3e574

0x03 漏洞详情


1、技术细节

可以看到在14年修复的打的补丁:

$_G['cache']['profilesetting'][$key]['formtype']== 'file'对formtype类型做了验证。

查看昨日commit,一共删除了五处unlink文件删除函数,其中对228行unlink函数做的限制最少。

在spacecp_profile.php里有文件上传处理函数,其中使用$upload->get_image_info($attach['target'])

对上传文件进行检查,如果不是图片则continue跳过,所以需要上传为图片类型。

删除文件名为$space[$key],也没有进行安全处理

只需要在前一次提交数据对参数进行进行保存,比如真实姓名处填写删除文件名../../../robots.txt,数据库中的realname就会被保存为../../../robots.txt,再次请求上传文件,就会触发并删除文件.

0x04 修复建议


按照官方Git更新,彻底删除spacecp_profile.php下unlink处代码

关于怎么进行Discuz! X任意文件删除的漏洞分析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

《怎么进行Discuz! X任意文件删除的漏洞分析.doc》

下载本文的Word格式文档,以方便收藏与打印。