民审-M

低于Discuz!X3.4版本以下附件免积分越权下载漏洞原理及修复方案

作者:民审-M   发布时间:2017-08-09 09:28   回复数:0   浏览数:6613
民审-M
66130民审-M金牌草根
2017-08-09 09:28:04
66130 2017-08-09 09:28:04
本帖最后由 民审-M 于 2017-8-9 09:29 编辑

低于Discuz!X3.4版本以下附件免积分下载漏洞原理及修复方案:

[color=rgb(34, 49, 63)]Discuz! 的一个附件越权下载漏洞(顺便可以免积分),当时也有不少利用工具出现。今天看到一位高手(ID: 快乐的小2B)发布了一个[color=rgb(34, 49, 63)]新版的免积分工具(感谢作者发布及朋友告知),测试下来发现确实可以使用,带着好奇分析了下具体实现原理。
重现
1、附件URL形如:forum.php?mod=attachment&aid=****%3D%3D
2、以游客访问附件URL(隐身模式,不带cookies),跳转到了该URL:forum.php?mod=misc&action=attachcredit&aid=693540&formhash=22ae3c59
[color=rgb(34, 49, 63)]
3、上图箭头处所指的链接,即为下载URL,游客访问无法下载。但使用已登录的账号,访问该下载URL,即可免积分直接下载。
4、经过测试,本漏洞可以通过遍历第2步中的aid,越权查看内部板块的以及收费的附件的文件名,但不可以越权下载。对积分体系会有一定危害,对网站安全危害不大。
分析&修复
漏洞利用方式主要是第二步中,对游客也返回了下载URL,同时对游客无法扣费,造成了免积分。
Discuz! X 附件机制这样设计(各种key)应该也是有原因的,深入可能比较复杂。这里暂时提供一个临时修复方案,即不对游客访问返回下载URL即可。
修复方案如下:
文件:source/module/forum/forum_misc.php
查找(约第29行)
if($_GET['formhash'] != FORMHASH) {

替换为
if($_GET['formhash'] != FORMHASH || !$_G['uid']) {

即可修复该问题。

游客
登录后才可以回帖,登录 或者 注册