2018年01月09日,Dedecms官方更新了DedeCMS V5.7 SP2正式版,后續(xù)在10日有網(wǎng)友爆出其存在任意用戶密碼重置漏洞。
攻擊難度:低。
危害程度:高。
官方修復(fù)情況如下:
目前暫未發(fā)布升級補丁
文章目錄
織夢內(nèi)容管理系統(tǒng)(DeDeCMS) 以簡單、實用、開源而聞名,是國內(nèi)最知名的PHP開源網(wǎng)站管理系統(tǒng),也是使用用戶最多的PHP類CMS系統(tǒng),在經(jīng)歷多年的發(fā)展,目前的版本無論在功能,還是在易用性方面,都有了長足的發(fā)展和進步。廣泛應(yīng)用于中小型企業(yè)門戶網(wǎng)站,個人網(wǎng)站,企業(yè)和學(xué)習(xí)網(wǎng)站建設(shè),在中國,DedeCMS應(yīng)該屬于最受人們喜愛的CMS系統(tǒng)。
2018年01月09日之前的所有版本。
此漏洞點出現(xiàn)在忘記密碼功能處.文件/member/resetpassword.php:
在找回密碼時,當(dāng)$dopost = safequestion時,通過傳入的member_id查詢出對應(yīng)id用戶的安全問題和答案信息,當(dāng)我們傳入的問題和答案不為空,而且等于之前設(shè)置的問題和答案是就進入sn()函數(shù)。
這里如果用戶設(shè)置了問題和答案,我們并不知道問題和答案是什么,就無法進入sn()函數(shù)。但是如我此用戶沒有設(shè)置問題和答案呢?此時系統(tǒng)默認問題是”0”,答案是空。
那么我們傳入答案$safeanswer = “”時:
$row[‘safeanswer’] == $safeanswer;成立。
但是傳入問題$safequestion = “0”時:
if(empty($safequestion)) $safequestion = ”,而$row[safequestion] = “0”
此時$row[safequestion] == $safequestion;不成立。
所以要讓$row[safequestion] == $safequestion;成立必須繞過if判斷,此時如果屬性PHP的話,會想到PHP的弱類型問題,所以在類型轉(zhuǎn)換的時候往往會發(fā)生意料之外的情況。
下面我們來看看如何繞過if empty的判斷:
可以看到使用”0.0”,”0.”,”0e1”都可以繞過前面的判斷,最后進入sn()函數(shù),繼續(xù)跟進。
sn()函數(shù)在文件/member/inc/inc_pwd_functions.php:
這里當(dāng)?shù)谝淮芜M行忘記密碼操作時,$row應(yīng)該時空,所以進入第一個if條件發(fā)送郵件insert一條記錄到dede_pwd_tmp表里;如果之前進行過忘記密碼操作,但是時間已經(jīng)超過10分鐘,那么繼續(xù)進行發(fā)送新驗證碼的操作update dede_pwd_tmp表里面的數(shù)據(jù),跟進當(dāng)前文件的newmail()函數(shù)。
例如這里第一次進行insert操作(update操作是一樣的)時,將8為的隨機字符串$randval加密后下乳dede_pwd_tmp表中,然后當(dāng)$send = N時(上面默認傳入N),將隨機字符串$randval拼接到url中返回,返回的url為:
http://www.attack.com/member/resetpassword.php?dopost=getpasswd&id=$mid&key=$randval
$mid就是可控的參數(shù)member_id,既然這列已經(jīng)返回了重置密碼的驗證碼key那么就可以直接重置對應(yīng)id的用戶密碼了,跟進一下重置密碼的過程。
首先在重置密碼時,判斷輸入的id對應(yīng)用戶是否進行過密碼重置操作,如果沒有就退出了。
然后判斷傳入的key的md5是否等于數(shù)據(jù)庫中的pwd內(nèi)容,如果相等就直接修改了dede_member表中對應(yīng)用戶的密碼了。
直接發(fā)送如下請求即可獲取重置密碼的鏈接:
http://localhost/DedeCMS-V5.7-UTF8-SP2/member/resetpassword.php?dopost=safequestion&safequestion=0e1&safeanwser=&id=1
然后獲取的重置面鏈接為:
http://localhost/DedeCMS-V5.7-UTF8-SP2/member/resetpassword.php?dopost=getpasswd&id=1&key=D2kIQomh
然后就可以直接重置密碼了。
這里修改id的值即可修改對應(yīng)的用戶的密碼。
但是這個漏洞存在一個缺陷,因為通過分析可以看出來只有沒有設(shè)置安全問題的用戶才會受此漏洞的影響;而且只能修改前臺用戶的密碼。
臨時方案可以暫時關(guān)閉會員功能,等待官方發(fā)布升級補丁然后升級。
版權(quán)聲明: 本站資源均來自互聯(lián)網(wǎng)或會員發(fā)布,如果侵犯了您的權(quán)益請與我們聯(lián)系,我們將在24小時內(nèi)刪除!謝謝!
轉(zhuǎn)載請注明: DedeCMS最新版(20180109)任意用戶密碼修改