0x01 背景
織夢內(nèi)容管理系統(tǒng)(DedeCms)以簡單通殃、實(shí)用、開源而聞名湾碎,是國內(nèi)最知名的PHP開源網(wǎng)站管理系統(tǒng)宙攻,也是使用用戶最多的PHP類CMS系統(tǒng),在經(jīng)歷多年的發(fā)展介褥,目前的版本無論在功能座掘,還是在易用性方面,都有了長足的發(fā)展和進(jìn)步柔滔,DedeCms免費(fèi)版的主要目標(biāo)用戶鎖定在個(gè)人站長溢陪,功能更專注于個(gè)人網(wǎng)站或中小型門戶的構(gòu)建,當(dāng)然也不乏有企業(yè)用戶和學(xué)校等在使用該系統(tǒng)睛廊。 2018年1月10日形真, 錦行信息安全公眾號公開了一個(gè)關(guān)于DeDeCMS前臺任意用戶密碼修改漏洞的細(xì)節(jié)[2]。 2018年1月10日喉前,Seebug漏洞平臺[3]收錄該漏洞没酣,漏洞編號為SSV-97074,知道創(chuàng)宇404漏洞應(yīng)急團(tuán)隊(duì)成功復(fù)現(xiàn)該漏洞卵迂。 2018年1月17日裕便,阿里先知平臺公開了一個(gè)任意用戶登陸漏洞[4][5],和一個(gè)安全隱患[6]见咒,通過組合漏洞偿衰,導(dǎo)致后臺密碼可以被修改。 2018年1月18日改览,知道創(chuàng)宇404漏洞應(yīng)急團(tuán)隊(duì)成功復(fù)現(xiàn)該漏洞下翎。
0x02 漏洞簡述
整個(gè)漏洞利用鏈包括3個(gè)過程:
- 前臺任意用戶密碼修改漏洞
- 前臺任意用戶登陸漏洞
- 前臺管理員密碼修改可影響后臺的安全隱患
通過3個(gè)問題連起來,我們可以重置后臺admin密碼宝当,如果我們獲得了后臺地址视事,就可以進(jìn)一步登陸后臺進(jìn)行下一步攻擊。
1庆揩、前臺任意用戶密碼修改漏洞
前臺任意用戶密碼修改漏洞的核心問題是由于DeDeCMS對于部分判斷使用錯(cuò)誤的弱類型判斷俐东,再加上在設(shè)置初始值時(shí)使用了NULL作為默認(rèn)填充,導(dǎo)致可以使用弱類型判斷的漏洞來繞過判斷订晌。 漏洞利用有幾個(gè)限制:
- 漏洞只影響前臺賬戶 admin賬戶在前臺是敏感詞無法登陸
- admin賬戶的前后臺密碼不一致虏辫,無法修改后臺密碼。
- 漏洞只影響未設(shè)置密保問題的賬戶
2锈拨、前臺任意用戶登陸漏洞
前臺任意用戶登陸漏洞主要是利用了DeDeCMS的機(jī)制問題砌庄,通過一個(gè)特殊的機(jī)制,我們可以獲得任意通過后臺加密過的cookie,通過這個(gè)cookie我們可以繞過登陸娄昆,實(shí)現(xiàn)任意用戶登陸佩微。 漏洞利用有一個(gè)限制: 如果后臺開啟了賬戶注冊審核,那就必須等待審核通過才能進(jìn)行下一步利用萌焰。
3喊衫、前臺管理員密碼修改可影響后臺的安全隱患
在DeDeCMS的設(shè)計(jì)中,admin被設(shè)置為不可從前臺登陸杆怕,但是當(dāng)后臺登陸admin賬戶的時(shí)候族购,前臺同樣會登陸管理員賬戶。 而且在前臺的修改密碼接口陵珍,如果提供了舊密碼寝杖,admin同樣可以修改密碼,并且這里修改密碼會同步給后臺賬戶互纯。 通過3個(gè)漏洞配合瑟幕,我們可以避開整個(gè)漏洞利用下的大部分問題。 前臺任意用戶密碼修改漏洞->修改admin密碼留潦,前臺任意用戶登錄漏洞->登陸admin賬戶只盹,通過剛才修改的admin密碼,來重置admin賬戶密碼兔院。
0x03 漏洞復(fù)現(xiàn)
1殖卑、 登陸admin前臺賬戶
安裝DeDeCMS訪問
http://your_website/member/index.php?uid=0000001
獲取cookie中last_vid_ckMd5
值坊萝,設(shè)置DeDeUserID_ckMd5
為剛才獲取的值孵稽,并設(shè)置DedeUserID
為0000001 訪問
http://your_website/member/
2、修改admin前臺登陸密碼
使用DeDeCMS前臺任意用戶密碼修改漏洞修改admin前臺密碼十偶。 構(gòu)造漏洞利用請求
http://yourwebsite/member/resetpassword.php
dopost=safequestion&safequestion=0.0&safeanswer=&id=1
從Burp獲取下一步利用鏈接
/member/resetpassword.php?dopost=getpasswd&id=1&key=nlszc9Kn
成功修改登陸admin密碼
3、修改后臺密碼
訪問
http://yourwebsite/member/edit_baseinfo.php
使用剛才修改的密碼再次修改密碼 0x04 代碼分析
1惦积、 前臺任意用戶登陸
在分析漏洞之前接校,我們先來看看通過cookie獲取登陸狀態(tài)的代碼。
/include/memberlogin.class.php 161行
通過GetCookie函數(shù)從DedeUserID
取到了明文的M_ID狮崩,通過intval
轉(zhuǎn)化之后蛛勉,直接從數(shù)據(jù)庫中讀取該id對應(yīng)的用戶數(shù)據(jù)。 讓我們來看看GetCookie
函數(shù)
/include/helpers/cookie.helper.php 56行
這里的cfg_cookie_encode
是未知的厉亏,DeDeCMS通過這種加鹽的方式董习,來保證cookie只能是服務(wù)端設(shè)置的烈和,所以我們沒辦法通過自己設(shè)置cookie來登陸其他賬戶爱只。 這里我們需要從別的地方獲取這個(gè)加密后的值。
/member/index.php 161行
161行存在一段特殊的代碼招刹,這段代碼是用來更新最新的訪客記錄的恬试,當(dāng)last_vid
沒有設(shè)置的時(shí)候窝趣,會把userid
更新到這個(gè)變量中,更新到flag中训柴。 而這里的userid
就是注冊時(shí)的用戶名(如果不是已存在的用戶名的話哑舒,會因?yàn)橛脩舨淮嬖跓o法訪問這個(gè)頁面)。 通過這種方式幻馁,我們就可以通過已知明文來獲取我們想要的密文洗鸵。 這里我們通過注冊userid
為形似00001或者1aaa這樣的用戶,在獲取登陸狀態(tài)時(shí)仗嗦,mid
會經(jīng)過intval
的轉(zhuǎn)化變?yōu)?膘滨,我們就成功的登陸到admin的賬戶下。 ps:該漏洞影響所有用戶
2稀拐、前臺任意用戶密碼修改
漏洞主要邏輯在 /member/resetpassword.php
75行至95行
下面是設(shè)置了安全問題時(shí)數(shù)據(jù)庫的樣子铲咨,safequestion代表問題的id,safeanswer代表安全問題的回答蜓洪。 我們需要繞過第一個(gè)判斷
if(empty($safequestion)) $safequestion = '';
這里我們只要傳入0.0
就可以繞過這里纤勒,然后0.0 == 0
為True,第二個(gè)判斷NULL==""
為True隆檀,成功進(jìn)入sn函數(shù)踊东。 跟入/member/inc/inc_pwd_functions.php
第150行
有效時(shí)間10分鐘,進(jìn)入newmail函數(shù) 跟入/member/inc/inc_pwd_functions.php
第73行
77行通過random生成了8位的臨時(shí)密碼刚操。 這里我們使用的是安全問題修改密碼闸翅,所以直接進(jìn)入94行,將key代入修改頁菊霜。 跳轉(zhuǎn)進(jìn)入形似
/member/resetpassword.php?dopost=getpasswd&id=1&key=nlszc9Kn
的鏈接坚冀,進(jìn)入修改密碼流程 唯一存在問題的是,這里&
錯(cuò)誤的經(jīng)過一次編碼鉴逞,所以這里我們只能手動(dòng)從流量中抓到這個(gè)鏈接记某,訪問修改密碼萎羔。
3撒踪、修改后臺密碼安全隱患
在DeDeCMS的代碼中,專門對前臺修改管理員密碼做了設(shè)置枚赡,如果是管理員勾徽,則一并更新后臺密碼滑凉,也就是這個(gè)安全隱患導(dǎo)致了這個(gè)問題。
/member/edit_baseinfo.php 119行
0x05 修復(fù)方案
截至該文章完成時(shí),DeDeCMS的官方仍然沒有修復(fù)該漏洞畅姊,所以需要采用臨時(shí)修復(fù)方案咒钟,等待官方正式修復(fù)更新。 由于攻擊漏洞涉及到3個(gè)漏洞若未,但官方仍然沒有公開補(bǔ)丁朱嘴,所以只能從一定程度上減小各個(gè)漏洞的影響。
- 前臺任意用戶登陸漏洞:開啟新用戶注冊審核粗合,當(dāng)發(fā)現(xiàn)userid為1xxxx或1時(shí)萍嬉,不予以 通過審核。
在官方更新正式補(bǔ)丁之前隙疚,可以嘗試暫時(shí)注釋該部分代碼帚湘,以避免更大的安全隱患
/member/index.php 161-162行
- 前臺修改后臺管理員密碼:設(shè)置較為復(fù)雜的后臺地址,如果后臺地址不可發(fā)現(xiàn)甚淡,則無法登陸后臺大诸。
- 前臺任意用戶密碼修改漏洞:
修改文件/member/resetpassword.php
第84行
即可臨時(shí)防護(hù)該該漏洞。
0x06 ref
[1] DeDeCMS官網(wǎng) http://www.dedecms.com/ [2] 漏洞詳情原文https://mp.weixin.qq.com/s/2ULQj2risPKzskX32WRMeg [3] Seebug漏洞平臺https://www.seebug.org/vuldb/ssvid-97074 [4] 阿里先知平臺漏洞分析1https://xianzhi.aliyun.com/forum/topic/1959 [5] 阿里先知平臺漏洞分析2https://xianzhi.aliyun.com/forum/topic/1961 [6] 漏洞最早分析原文http://www.cnblogs.com/iamstudy/articles/dedecms_old_version_method.html 作者:LoRexxar'@知道創(chuàng)宇404實(shí)驗(yàn)室