前段时间乌云上曝光了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']) {
有啥问题或者有更好的修复办法可以留言~
沙发,学习了。没DZ没烦恼
DZ都快被玩坏了,以后多调戏WP~
CSRF删除管理员漏洞这个放个懒人包出来嘛,我直接覆盖就行了
你也太懒了啦,每个版本之间可能不一样的,覆盖就出问题啦
放个2.5的来
亲,最好还是自己改哦,我给你的文件出了问题我不负责的
链接: http://pan.baidu.com/s/1o6mbDYa 密码: 5ert
hhh,这次漏洞太爆了
官方默默地修补了漏洞却不放出补救办法……
一头雾水
。。。
漏洞出来了也不知道怎么补救了
现在可以补救了w
其实我在意的是如何利用漏洞= =
你看我在每个漏洞下面加了个乌云链接,你进去看看就知道了
不错不错。
博主,萌萌哒(=゚ω゚)=
( ´∀`) 吃药药了哦
你可曾知道我爱你
哈哈,学习了。当时我临时解决方法是替换关键词= =
(*゚∀゚*) 治本!
刚才我在邮件中点击“> 您在 橙的记事本 中的留言有回复啦!”中的“橙的记事本”链接时,跳转到了小将博客……修复下吧
好~