DeDeCMS v5.7 密碼修改漏洞分析
0x01 背景
織夢內容管理系統(DedeCms)以簡單、實用、開源而聞名,是國內最知名的PHP開源網站管理系統,也是使用使用者最多的PHP類CMS系統,在經歷多年的發展,目前的版本無論在功能,還是在易用性方面,都有了長足的發展和進步,DedeCms免費版的主要目標使用者鎖定在個人站長,功能更專注於個人網站或中小型門戶的構建,當然也不乏有企業使用者和學校等在使用該系統。 2018年1月10日, 錦行資訊保安公眾號公開了一個關於DeDeCMS前臺任意使用者密碼修改漏洞的細節[2]。 2018年1月10日,Seebug漏洞平臺[3]收錄該漏洞,漏洞編號為SSV-97074,知道創宇404漏洞應急團隊成功復現該漏洞。 2018年1月17日,阿里先知平臺公開了一個任意使用者登陸漏洞[4][5],和一個安全隱患[6],通過組合漏洞,導致後臺密碼可以被修改。 2018年1月18日,知道創宇404漏洞應急團隊成功復現該漏洞。
0x02 漏洞簡述
整個漏洞利用鏈包括3個過程:
- 前臺任意使用者密碼修改漏洞
- 前臺任意使用者登陸漏洞
- 前臺管理員密碼修改可影響後臺的安全隱患
通過3個問題連起來,我們可以重置後臺admin密碼,如果我們獲得了後臺地址,就可以進一步登陸後臺進行下一步攻擊。
1、前臺任意使用者密碼修改漏洞
前臺任意使用者密碼修改漏洞的核心問題是由於DeDeCMS對於部分判斷使用錯誤的弱型別判斷,再加上在設定初始值時使用了NULL作為預設填充,導致可以使用弱型別判斷的漏洞來繞過判斷。 漏洞利用有幾個限制:
- 漏洞隻影響前臺賬戶 admin賬戶在前臺是敏感詞無法登陸
- admin賬戶的前後臺密碼不一致,無法修改後臺密碼。
- 漏洞隻影響未設定密保問題的賬戶
2、前臺任意使用者登陸漏洞
前臺任意使用者登陸漏洞主要是利用了DeDeCMS的機制問題,通過一個特殊的機制,我們可以獲得任意通過後臺加密過的cookie,通過這個cookie我們可以繞過登陸,實現任意使用者登陸。 漏洞利用有一個限制: 如果後臺開啟了賬戶註冊稽核,那就必須等待稽核通過才能進行下一步利用。
3、前臺管理員密碼修改可影響後臺的安全隱患
在DeDeCMS的設計中,admin被設定為不可從前臺登陸,但是當後臺登陸admin賬戶的時候,前臺同樣會登陸管理員賬戶。 而且在前臺的修改密碼介面,如果提供了舊密碼,admin同樣可以修改密碼,並且這裡修改密碼會同步給後臺賬戶。 通過3個漏洞配合,我們可以避開整個漏洞利用下的大部分問題。 前臺任意使用者密碼修改漏洞->修改admin密碼,前臺任意使用者登入漏洞->登陸admin賬戶,通過剛才修改的admin密碼,來重置admin賬戶密碼。
0x03 漏洞復現
1、 登陸admin前臺賬戶
安裝DeDeCMS訪問
http://your_website/member/index.php?uid=0000001
獲取cookie中last_vid_ckMd5
值,設定DeDeUserID_ckMd5
為剛才獲取的值,並設定DedeUserID
為0000001 訪問
http://your_website/member/
2、修改admin前臺登陸密碼
使用DeDeCMS前臺任意使用者密碼修改漏洞修改admin前臺密碼。 構造漏洞利用請求
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獲取登陸狀態的程式碼。
/include/memberlogin.class.php 161行
通過GetCookie函式從DedeUserID
取到了明文的M_ID,通過intval
轉化之後,直接從資料庫中讀取該id對應的使用者資料。 讓我們來看看GetCookie
函式
/include/helpers/cookie.helper.php 56行
這裡的cfg_cookie_encode
是未知的,DeDeCMS通過這種加鹽的方式,來保證cookie只能是服務端設定的,所以我們沒辦法通過自己設定cookie來登陸其他賬戶。 這裡我們需要從別的地方獲取這個加密後的值。
/member/index.php 161行
161行存在一段特殊的程式碼,這段程式碼是用來更新最新的訪客記錄的,當last_vid
沒有設定的時候,會把userid
更新到這個變數中,更新到flag中。 而這裡的userid
就是註冊時的使用者名稱(如果不是已存在的使用者名稱的話,會因為使用者不存在無法訪問這個頁面)。 通過這種方式,我們就可以通過已知明文來獲取我們想要的密文。 這裡我們通過註冊userid
為形似00001或者1aaa這樣的使用者,在獲取登陸狀態時,mid
會經過intval
的轉化變為1,我們就成功的登陸到admin的賬戶下。 ps:該漏洞影響所有使用者
2、前臺任意使用者密碼修改
漏洞主要邏輯在 /member/resetpassword.php
75行至95行
下面是設定了安全問題時資料庫的樣子,safequestion代表問題的id,safeanswer代表安全問題的回答。 我們需要繞過第一個判斷
if(empty($safequestion)) $safequestion = '';
這裡我們只要傳入0.0
就可以繞過這裡,然後0.0 == 0
為True,第二個判斷NULL==""
為True,成功進入sn函式。 跟入/member/inc/inc_pwd_functions.php
第150行
有效時間10分鐘,進入newmail函式 跟入/member/inc/inc_pwd_functions.php
第73行
77行通過random生成了8位的臨時密碼。 這裡我們使用的是安全問題修改密碼,所以直接進入94行,將key代入修改頁。 跳轉進入形似
/member/resetpassword.php?dopost=getpasswd&id=1&key=nlszc9Kn
的連結,進入修改密碼流程 唯一存在問題的是,這裡&
錯誤的經過一次編碼,所以這裡我們只能手動從流量中抓到這個連結,訪問修改密碼。
3、修改後臺密碼安全隱患
在DeDeCMS的程式碼中,專門對前臺修改管理員密碼做了設定,如果是管理員,則一併更新後臺密碼,也就是這個安全隱患導致了這個問題。
/member/edit_baseinfo.php 119行
0x05 修復方案
截至該文章完成時,DeDeCMS的官方仍然沒有修復該漏洞,所以需要採用臨時修復方案,等待官方正式修復更新。 由於攻擊漏洞涉及到3個漏洞,但官方仍然沒有公開補丁,所以只能從一定程度上減小各個漏洞的影響。
- 前臺任意使用者登陸漏洞:開啟新使用者註冊稽核,當發現userid為1xxxx或1時,不予以 通過稽核。
在官方更新正式補丁之前,可以嘗試暫時註釋該部分程式碼,以避免更大的安全隱患
/member/index.php 161-162行
- 前臺修改後臺管理員密碼:設定較為複雜的後臺地址,如果後臺地址不可發現,則無法登陸後臺。
- 前臺任意使用者密碼修改漏洞:
修改檔案/member/resetpassword.php
第84行
即可臨時防護該該漏洞。
0x06 ref
[1] DeDeCMS官網 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'@知道創宇404實驗室
相關文章
- DedeCMS最新版(20180109)任意使用者密碼修改漏洞分析密碼
- Dede網站後臺密碼修改,輕鬆掌握DedeCMS後臺密碼重置方法網站密碼
- DEDECMS如何修改資料庫密碼?以及忘記了後臺密碼怎麼辦?資料庫密碼
- 如何修改Dedecms網站,Dedecms網站修改指南網站
- DedeCMS v5.7 通過檔案包含和CSRF的配合利用
- DedeCMS最新通殺注入(buy_action.php)漏洞分析PHP
- ansible 修改密碼密碼
- Ubuntu 修改密碼Ubuntu密碼
- 公司網站密碼怎麼修改?修改密碼網站?網站密碼
- dedecms模板怎麼修改
- 一些常見的重置密碼漏洞分析整理密碼
- dedecms網站模板在哪裡修改,如何在DedeCMS中修改網站模板網站
- chpasswd 批量修改密碼密碼
- Mendix 修改pg密碼密碼
- 修改帝國網站登入密碼?網站被人修改了密碼?網站密碼
- 修改 MySQL 登入密碼MySql密碼
- mysql8.0修改密碼MySql密碼
- Sqlserver修改連線密碼SQLServer密碼
- dedecms網站模板內容修改?網站
- 邏輯漏洞之密碼重置密碼
- DedeCMS後臺管理員密碼忘記的解決方法密碼
- 修改git使用者密碼Git密碼
- 修改docker中Mysql的密碼DockerMySql密碼
- OEM13.2修改SYSMAN密碼密碼
- 修改BeEF工具預設密碼密碼
- Jupyter Notebook修改登陸密碼密碼
- 寶塔如何修改FTP密碼FTP密碼
- php網站admin密碼修改?PHP網站密碼
- 修改Mysql root密碼的方法MySql密碼
- ubuntu系統下mysql重置密碼和修改密碼操作UbuntuMySql密碼
- MySQL8.0 忘記 root 密碼下如何修改密碼MySql密碼
- 漏洞簡析——CWE-259:使用硬編碼的密碼漏洞密碼
- 密碼找回邏輯漏洞總結密碼
- mysql 8.0.11 以上版本修改root密碼MySql密碼
- MySQL 8.0之後版本密碼修改MySql密碼
- laravel 傳送郵件修改密碼Laravel密碼
- 銀河麒麟命令列修改密碼命令列密碼
- 實用小技巧! 修改MySQL密碼MySql密碼