Discuz的CSRF删除管理员和ed2k解析漏洞的简单修复

前段时间乌云上曝光了Discuz的几个漏洞,多数是一些XSS,这个我也没在意,因为DZ的auth cookie是httponly的,最多也就弹个窗、跳转下链接,而且我用的是nginx,没有Apache低版本那个奇葩的数据溢出导致泄漏httponly的cookie。不过那个CSRF删除管理员的洞洞真是太刁,估计很多人已经中招了。很多站长可能也像我一样,懒得升级或者无法升级,所以这里就提供一下临时解决方案:
1、ed2k解析漏洞
乌云链接:https://sell.moe/z1hq
此漏洞利用的是论坛对ed2k链接的自动解析过滤不严格的缺陷,虽然cookies没啥可利用的,不过被人跳转到钓鱼页面也是很蛋疼的,假如用户被跳转到一个仿造的QQ或微博登陆页面就可能泄露账号密码,所以必须要把这漏洞彻底干掉!
解决方法:
定位到“source/function/function_discuzcode.php”的约107行

if(allowbbcode) {
	if(strpos(msglower, 'ed2k://') !== FALSE) {
		message = preg_replace("/ed2k:\/\/(.+?)\//e", "parseed2k('\\1')",message);
	}
}

改为:

	if(allowbbcode) {
		if(strpos(msglower, 'ed2k://') !== FALSE) {
			message = preg_replace("/ed2k:\/\/(.+?)\//e", "利用漏洞的话会被捅屁股的哦",message);
		}
	}

当然,换成什么提示文字就随便你写了。协会终于彻底干掉了这个洞洞(正常的ed2k也解析不了了,但是这鸡肋功能本来就没啥用吧)
2、CSRF删除管理员漏洞
乌云链接:https://sell.moe/bvwh
此漏洞是利用了管理员操作没有进行formhash的验证的缺陷。其实修改方法也是类似的,只要把[img]标签内的链接过滤掉不就好了。要加个formhash的验证的话比较麻烦点,可能随后会更新请到本文章下方查看最新解决方法!
解决方法:
定位到“source/function/function_discuzcode.php”的约234行

), $message);

后面加上这么一句:

if (preg_match("/admin/i", message)) {message = "利用漏洞的话会被捅屁股的哦";
}

也就是说一旦有人在[img]标签内加入admin字样的图片链接时自动替换成你说的那句话
这里有个小技巧:你可以把文字改成:“@你的管理员用户名”,当坏蛋发完帖子后自动@你,你就可以禁止他访问了,或者做得更绝一点,直接DB::query(DELETE*****)删除那个人的账户ww
————————————————————————————————————————————————————————————
补充一下刚才测试成功的修补办法,此方法是针对CSRF这个漏洞的,修补方法是增加了FORMHASH的验证,由于后台操作不止clean这一种,所以要改的地方会比较多,大家千万别改错了
定位“source/admincp/admincp_members.php”
73行
以下所有的待修改处的代码与此处是相同的,如果行数不对,请检查上下几行

}else{

改为:

} elseif(submitcheck('submit', 1) && _G['formhash'] ==_POST['formhash']) {

331行改为:

} elseif(submitcheck('submit', 1) && _G['formhash'] ==_POST['formhash']) {

611行改为:

} elseif(submitcheck('newslettersubmit', 1) && _G['formhash'] ==_POST['formhash']) {

751行改为:

} elseif(submitcheck('rewardsubmit', 1) && _G['formhash'] ==_POST['formhash']) {

825行改为:

} elseif(submitcheck('confermedalsubmit', 1) && _G['formhash'] ==_POST['formhash']) {

898行改为:

} elseif(submitcheck('confermagicsubmit', 1) && _G['formhash'] ==_POST['formhash']) {

934行改为:

} elseif(submitcheck('addsubmit', 1) && _G['formhash'] ==_POST['formhash']) {

1090行改为:

} elseif(submitcheck('editsubmit', 1) && _G['formhash'] ==_POST['formhash']) {

1246行改为:

} elseif(submitcheck('creditsubmit', 1) && _G['formhash'] ==_POST['formhash']) {

1314行改为:

} elseif(submitcheck('medalsubmit', 1) && _G['formhash'] ==_POST['formhash']) {

1483行改为:

} elseif(submitcheck('bansubmit', 1) && _G['formhash'] ==_POST['formhash']) {

1814行改为:

} elseif(submitcheck('accesssubmit', 1) && _G['formhash'] ==_POST['formhash']) {

1989行改为:

} elseif(submitcheck('editsubmit', 1) && _G['formhash'] ==_POST['formhash']) {

2148行改为:

} elseif(submitcheck('ipbansubmit', 1) && _G['formhash'] ==_POST['formhash']) {

2325行改为:

} elseif(submitcheck('editsubmit', 1) && _G['formhash'] ==_POST['formhash']) {

2456行改为:

} elseif(submitcheck('ordersubmit', 1) && _G['formhash'] ==_POST['formhash']) {

2606行改为:

} elseif(submitcheck('statsubmit', 1) && _G['formhash'] ==_POST['formhash']) {

有啥问题或者有更好的修复办法可以留言~

这篇文章有22条评论

  1. kn007 2014/7/2 #1 回复TA

    沙发,学习了。没DZ没烦恼

  2. 揭金雁 2014/7/2 #2 回复TA

    CSRF删除管理员漏洞这个放个懒人包出来嘛,我直接覆盖就行了

  3. Moon 2014/7/4 #3 回复TA

    hhh,这次漏洞太爆了

    • Kagami po主 回复 Moon 2014/7/4 回复TA

      官方默默地修补了漏洞却不放出补救办法……

  4. PU鞋底厂 2014/7/5 #4 回复TA

    一头雾水

  5. 屠龙 2014/7/7 #5 回复TA

    漏洞出来了也不知道怎么补救了

  6. Ytf4425 2014/7/9 #6 回复TA

    其实我在意的是如何利用漏洞= =

    • Kagami po主 回复 Ytf4425 2014/7/9 回复TA

      你看我在每个漏洞下面加了个乌云链接,你进去看看就知道了

  7. 不错不错。

  8. 来赚博客 2014/7/10 #8 回复TA

    博主,萌萌哒(=゚ω゚)=

  9. 你可曾知道我爱你

  10. 哈哈,学习了。当时我临时解决方法是替换关键词= =

发表评论戳我取消回复

*

List
Love
00:00