Discuz! X 附件免积分下载(2016)原理及修复方案

2017-3-9 此问题已提交 Discuz! 官方,并在 Discuz! X3.4 中得到修复。

事实上,在2014年,我发现过 Discuz! 的一个附件越权下载漏洞(顺便可以免积分),当时也有不少利用工具出现。今天看到一位高手(ID: 快乐的小2B)发布了一个新版的免积分工具(感谢作者发布及朋友告知),测试下来发现确实可以使用,带着好奇分析了下具体实现原理。

重现

1、附件URL形如:forum.php?mod=attachment&aid=****%3D%3D

2、以游客访问附件URL(隐身模式,不带cookies),跳转到了该URL:forum.php?mod=misc&action=attachcredit&aid=693540&formhash=22ae3c59

QQ截图20160706155215

3、上图箭头处所指的链接,即为下载URL,游客访问无法下载。但使用已登录的账号,访问该下载URL,即可免积分直接下载。

4、经过测试,本漏洞可以通过遍历第2步中的aid,越权查看内部板块的以及收费的附件的文件名,但不可以越权下载。对积分体系会有一定危害,对网站安全危害不大。

分析&修复

漏洞利用方式主要是第二步中,对游客也返回了下载URL,同时对游客无法扣费,造成了免积分。

Discuz! X 附件机制这样设计(各种key)应该也是有原因的,深入可能比较复杂。这里暂时提供一个临时修复方案,即不对游客访问返回下载URL即可。

修复方案如下:

文件:source/module/forum/forum_misc.php

查找(约第29行)

[php]if($_GET[‘formhash’] != FORMHASH) {[/php]

替换为

[php]if($_GET[‘formhash’] != FORMHASH || !$_G[‘uid’]) {[/php]

即可修复该问题。

Coxxs

Discuz! X 附件免积分下载(2016)原理及修复方案》有6个想法

  1. 附件中的aid是什么,站长能否解释一下,好像不只是一种ID,aid貌似会变动的

    1. Discuz! 中,每一个附件都有一个唯一数字ID,这个ID被称为aid。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注