DeDeCMS v5.7 密碼修改漏洞分析

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è)過程:

  1. 前臺任意用戶密碼修改漏洞
  2. 前臺任意用戶登陸漏洞
  3. 前臺管理員密碼修改可影響后臺的安全隱患

通過3個(gè)問題連起來,我們可以重置后臺admin密碼宝当,如果我們獲得了后臺地址视事,就可以進(jìn)一步登陸后臺進(jìn)行下一步攻擊。

1庆揩、前臺任意用戶密碼修改漏洞

前臺任意用戶密碼修改漏洞的核心問題是由于DeDeCMS對于部分判斷使用錯(cuò)誤的弱類型判斷俐东,再加上在設(shè)置初始值時(shí)使用了NULL作為默認(rèn)填充,導(dǎo)致可以使用弱類型判斷的漏洞來繞過判斷订晌。 漏洞利用有幾個(gè)限制:

  1. 漏洞只影響前臺賬戶 admin賬戶在前臺是敏感詞無法登陸
  2. admin賬戶的前后臺密碼不一致虏辫,無法修改后臺密碼。
  3. 漏洞只影響未設(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
image

注冊用戶名為000001的賬戶
image

由于是本地復(fù)現(xiàn)漏洞,所以我們直接從數(shù)據(jù)庫中修改為審核通過
image

訪問

http://your_website/member/index.php?uid=0000001
image

獲取cookie中last_vid_ckMd5值坊萝,設(shè)置DeDeUserID_ckMd5為剛才獲取的值孵稽,并設(shè)置DedeUserID為0000001 訪問

http://your_website/member/
image
2、修改admin前臺登陸密碼

使用DeDeCMS前臺任意用戶密碼修改漏洞修改admin前臺密碼十偶。 構(gòu)造漏洞利用請求

http://yourwebsite/member/resetpassword.php

dopost=safequestion&safequestion=0.0&safeanswer=&id=1
image

從Burp獲取下一步利用鏈接

/member/resetpassword.php?dopost=getpasswd&id=1&key=nlszc9Kn
image

直接訪問該鏈接菩鲜,修改新密碼
image

成功修改登陸admin密碼

3、修改后臺密碼

訪問

http://yourwebsite/member/edit_baseinfo.php

使用剛才修改的密碼再次修改密碼
image

成功登陸
image

0x04 代碼分析

1惦积、 前臺任意用戶登陸

在分析漏洞之前接校,我們先來看看通過cookie獲取登陸狀態(tài)的代碼。

/include/memberlogin.class.php 161行
image

通過GetCookie函數(shù)從DedeUserID取到了明文的M_ID狮崩,通過intval轉(zhuǎn)化之后蛛勉,直接從數(shù)據(jù)庫中讀取該id對應(yīng)的用戶數(shù)據(jù)。 讓我們來看看GetCookie函數(shù)

/include/helpers/cookie.helper.php 56行
image

這里的cfg_cookie_encode是未知的厉亏,DeDeCMS通過這種加鹽的方式董习,來保證cookie只能是服務(wù)端設(shè)置的烈和,所以我們沒辦法通過自己設(shè)置cookie來登陸其他賬戶爱只。 這里我們需要從別的地方獲取這個(gè)加密后的值。

/member/index.php  161行
image

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行

image

當(dāng)找回密碼的方式為安全問題時(shí) dedecms會從數(shù)據(jù)庫中獲取用戶的安全問題火邓、回答進(jìn)行比對,當(dāng)我們在注冊時(shí)沒設(shè)置安全問題時(shí)德撬。 從數(shù)據(jù)庫中可以看到默認(rèn)值為NULL(admin默認(rèn)沒有設(shè)置安全問題)
image

下面是設(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行

image

有效時(shí)間10分鐘,進(jìn)入newmail函數(shù) 跟入/member/inc/inc_pwd_functions.php 第73行

image

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行
image

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行
image
  • 前臺修改后臺管理員密碼:設(shè)置較為復(fù)雜的后臺地址,如果后臺地址不可發(fā)現(xiàn)甚淡,則無法登陸后臺大诸。
  • 前臺任意用戶密碼修改漏洞:

修改文件/member/resetpassword.php 第84行

image

將其中的==修改為===
image

即可臨時(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)室

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末贯卦,一起剝皮案震驚了整個(gè)濱河市资柔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌撵割,老刑警劉巖贿堰,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異啡彬,居然都是意外死亡羹与,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門庶灿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來纵搁,“玉大人,你說我怎么就攤上這事往踢√谟” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵峻呕,是天一觀的道長利职。 經(jīng)常有香客問我,道長瘦癌,這世上最難降的妖魔是什么猪贪? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮讯私,結(jié)果婚禮上热押,老公的妹妹穿的比我還像新娘西傀。我一直安慰自己,他們只是感情好楞黄,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著抡驼,像睡著了一般鬼廓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上致盟,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天碎税,我揣著相機(jī)與錄音,去河邊找鬼馏锡。 笑死雷蹂,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的杯道。 我是一名探鬼主播匪煌,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼党巾!你這毒婦竟也來了萎庭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤齿拂,失蹤者是張志新(化名)和其女友劉穎驳规,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體署海,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡吗购,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了砸狞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捻勉。...
    茶點(diǎn)故事閱讀 40,096評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖刀森,靈堂內(nèi)的尸體忽然破棺而出贯底,到底是詐尸還是另有隱情,我是刑警寧澤撒强,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布禽捆,位于F島的核電站,受9級特大地震影響飘哨,放射性物質(zhì)發(fā)生泄漏胚想。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一芽隆、第九天 我趴在偏房一處隱蔽的房頂上張望浊服。 院中可真熱鬧统屈,春花似錦、人聲如沸牙躺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽孽拷。三九已至吨掌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間脓恕,已是汗流浹背膜宋。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留炼幔,地道東北人秋茫。 一個(gè)月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像乃秀,于是被迫代替她去往敵國和親肛著。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容