DiscuzX 3.2 死循环GET漏洞修复方案

就在刚刚,Hostker 又遇到一个客户被访客 CC 自己,查看 URL 非常熟悉,正是年初时我们报的 Bug。

滚去官网发现最后更新时间是 6 月,然而下回来的代码发现官方还是没修好这个地方。DZ 已完。

想帮客户修复时发现细节已经忘光,还好有聊天记录可以翻到。因此记下这个 Bug 以及修复方案。

漏洞说明

如果连续多层楼(例如4层)都有回帖可见或者购买可见的隐藏内容,并且隐藏内容为图片的时候(文字暂时没测试),在帖子第一页底部进行回帖,会导致死循环变成CC攻击服务器,此时浏览器失去响应,关闭都很困难,只能杀死浏览器进程。

以下是服务器的 Log:

212211574426ebcea0c9478729639888a3253c00

祈祷这个访客的爪机不会爆炸吧 /w\

我对 DiscuzX 不是很熟悉,因此联系到 BranchZero (DZ 签到插件的开发者)协助排查问题,以下细节均为 BranchZero 提供。

在 \static\js\forum_viewthread.js 大约 228 行有一个函数 succeedhandle_fastpost 代码如下:

[js]
function succeedhandle_fastpost(locationhref, message, param) {
var pid = param['pid'];
var tid = param['tid'];
var from = param['from'];
if(pid) {
ajaxget('forum.php?mod=viewthread&tid=' + tid + '&viewpid=' + pid + '&from=' + from, 'post_new', 'ajaxwaitid', '', null, 'fastpostappendreply()');
if(replyreload) {
var reloadpids = replyreload.split(',');
for(var i = 1;i < reloadpids.length;i++) {
ajaxget('forum.php?mod=viewthread&tid=' + tid + '&viewpid=' + reloadpids[i] + '&from=' + from, 'post_' + reloadpids[i], 'ajaxwaitid');
}
}
$('fastpostreturn').className = '';
}
[/js]

这个 pid 用于回帖后去服务器获取对应楼层内容,并显示出来。看起来似乎没什么问题。

唯一有可能存在问题的地方就是 for 循环,因此把 i 和 replyreload 打印出来,发现 replyreload 值为 ,2,3,4,5,6,7

然而 i 一直停留在 5 并且一直在重复死循环。一定是 ajaxget 函数改变了 i ,继续跟踪看看:

QQ图片20151207164522 QQ图片20151207164527

Bug 就是这么来的╮(╯▽╰)╭

修复方法

succeedhandle_fastpost 函数的 i 变量改改名字即可,像这样:

[js]
function succeedhandle_fastpost(locationhref, message, param) {
var pid = param['pid'];
var tid = param['tid'];
var from = param['from'];
if(pid) {
ajaxget('forum.php?mod=viewthread&tid=' + tid + '&viewpid=' + pid + '&from=' + from, 'post_new', 'ajaxwaitid', '', null, 'fastpostappendreply()');
if(replyreload) {
var reloadpids = replyreload.split(',');
for(hostker_i = 1;hostker_i < reloadpids.length;hostker_i++) {
ajaxget('forum.php?mod=viewthread&tid=' + tid + '&viewpid=' + reloadpids[hostker_i] + '&from=' + from, 'post_' + reloadpids[hostker_i], 'ajaxwaitid');
}
}
$('fastpostreturn').className = '';
}
[/js]

DiscuzX 3.2 死循环GET漏洞修复方案 有 8 个评论

    1. 小新喵 回复 itorr

      i 被 ajaxget 调用的 ajaxinnerhtml 固定为 5 导致死循环

  1. hcl

    越来越感觉 Discuz! X 系列越做越不行,甚至不如 Discuz! 7.2。被 T 讯收购之后尤其如此。现在更是直接弃坑了。

  2. tcdw

    然而国人更多适应的是 Discuz 的模式。

  3. glzjin

    求申请友情链接~然而没找到专门的页面,就只能在这里发了~

    标题:赵

    地址:https://www.zhaojin97.cn

    1. 小新喵 回复 glzjin

      友情链接顾名思义,只加认识的小伙伴的。

发表回复

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

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据