織夢CMS V5 7任意使用者密碼重置漏洞復現

2022-09-09 20:54:18 字數 2653 閱讀 7713

前端時間看了織夢cms_v5.7版本的任意使用者密碼重置漏洞的分析,當時沒有時間記錄下來,現利用空閒時間又復現了一次。

織夢內容管理系統(dedecms) 以簡單、實用、開源而聞名,是國內最知名的php開源**管理系統,也是使用使用者最多的php類cms系統,在經歷多年的發展,目前的版本無論在功能,還是在易用性方面,都有了長足的發展和進步。廣泛應用於中小型企業門戶**,個人**,企業和學習**建設,在中國,dedecms應該屬於最受人們喜愛的cms系統。

漏洞檔案入口:member/resetpassword.php:75

在找回密碼時,使用安全問題:$dopost == "safequestion",通過傳入的$mid對應的id值來查詢對應使用者的安全問題。這裡的大問題就是使用==判斷安全問題和安全問題答案,這就給了我們利用弱型別繞過的可能,我們就可以繞過驗證進行下一步的密碼重置。

當使用者沒有設定安全問題和答案,那麼預設情況下安全問題的值為 0 ,答案的值為 null ,此時:$row['safequestion']="0"、 $row['safeanswer']=null,當沒有設定safequestionsafeanswer的值時,它們的值均為空字串。if表示式也就變成了if('0' == '' && null == ''),即if(false && true),所以我們只要讓表示式$row['safequestion'] == $safequestion為 true 即可。

通過測試,」0.0」、」0.」、」0e1」可以使$row['safequestion'] == $safequestion為 true,成功進入sn()函式

這裡當第一次進行忘記密碼操作時,$row應該時空,開始執行newmail()函式,傳送郵件insert一條記錄到dede_pwd_tmp表裡;如果之前進行過忘記密碼操作,但是時間已經超過10分鐘,那麼繼續進行傳送新驗證碼的操作update dede_pwd_tmp表裡面的資料,跟進當前檔案的newmail()函式。

這裡第一次進行insert操作(update操作也是一樣的)時,將8位的隨機字串$randval加密後新增到dede_pwd_tmp表中,然後當$send = n時,將隨機字串$randval拼接到url中返回,返回的url為:

也就是說這裡的idkey我們可控,跟進dopost=getpasswd的操作,在member/resetpassword.php:96

首先判斷 id 是否為空,如果不為空,進入$row = $db->getone("select * from pwd_tmp where mid = '$mid'");,這裡如果$row為空,就會退出,但是前面的insert操作使得mid在臨時密碼表中存在了,繼續判斷時間是否超時,如果沒有,進入templets/resetpassword2.htm

這裡密碼修改頁面會將$setp賦值為2,繼續回到member/resetpassword.php

從臨時密碼表中取出來 key 和我們前端 url 中的 key 對比,相等執行密碼修改。

以上就是分析的整個過程,但是這個漏洞存在乙個缺陷,因為通過分析可以看出來只有沒有設定安全問題的使用者才會受此漏洞的影響;而且只能修改前台使用者的密碼。

織夢5 7注入加上傳漏洞

會員中心查詢會員資訊語句過濾不嚴,導致url可提交注入引數 會員中心有上傳動作過濾不嚴,導致上傳漏洞 詳細說明 注入漏洞。這站 首先訪問 data admin ver.txt 頁面獲取系統最後公升級時間,然後訪問 member ajax membergroup.php?action post mem...

織夢5 7注入加上傳漏洞

織夢5.7注入加上傳漏洞 分類 安全 2012 05 5 擼過12,571次 2人扯談 會員中心查詢會員資訊語句過濾不嚴,導致url可提交注入引數 會員中心有上傳動作過濾不嚴,導致上傳漏洞 詳細說明 注入漏洞。這站 首先訪問 data admin ver.txt 頁面獲取系統最後公升級時間,然後訪問...

織夢5 7DEDECMS標籤大全

1.關鍵描述呼叫標籤 2.路徑呼叫標籤 dede global name cfg webname 4.欄目導航呼叫標籤 首頁 field pubdate runphp yes a strftime m d me b strftime m d me ntime time day3 3600 24 if...