1. 程式人生 > >程式碼審計| DEDECMS -V5.7-UTF8-SP2-20180109漏洞集合

程式碼審計| DEDECMS -V5.7-UTF8-SP2-20180109漏洞集合

最近dedeCMS爆了好多洞(0day),於是將最近的漏洞進行復現和整理便成為了本篇漏洞集合。

最近dedeCMS爆了好多洞(0day),於是將最近的漏洞進行復現和整理便成為了本篇漏洞集合。期待師傅們的指導與交流。

cookie偽造導致任意前臺使用者登入

0×00 相關環境

原始碼資訊:DedeCMS-V5.7-UTF8-SP2-20180109

問題檔案: \DedeCMS-V5.7-UTF8-SP2\uploads\member\index.php

漏洞型別:cookie偽造導致前臺任意使用者登入

0×01 漏洞分析

在檔案\DedeCMS-V5.7-UTF8-SP2\uploads\member\index.php中的第125-166行中的程式碼塊,用於更新最近訪客記錄及站點統計記錄的程式碼,當滿足$vtime – $last_vtime > 3600 || !preg_match(‘#,’.$uid.’,#i’, ‘,’.$last_vid.’,')的時候且$last_vid的值為空的時候,會令$last_vid = $uid,然後在第164行中使用PutCookie(‘last_vid’, $last_vid, 3600*24, ‘/’);將cookie下發的客戶端。

客戶端.png

而dede在\DedeCMS-V5.7-UTF8-SP2\uploads\include\common.inc.php中的第108-117行中,使用的外部變數註冊的方法進行變數宣告,因此此處的$uid是使用者可控的位置。

位置.png

跟入PutCookie方法,在檔案\DedeCMS-V5.7-UTF8-SP2\uploads\include\helpers\cookie.helper.php中的第21-29行中,發現該方法,在該方法中的第27行中將值與配置檔案中的$cfg_cookie_encode進行拼接,然後進行MD5和截斷處理substr(md5($cfg_cookie_encode.$value),0,16),然後下發到客戶端。

下發.png

而在檔案\DedeCMS-V5.7-UTF8-SP2\uploads\include\helpers\cookie.helper.php中的第54-75行中發現GetCookie方法的程式碼塊,其中第65行用於校驗客戶端cookie是否進行了偽造,因此要進行cookie就自然想到要獲取\DedeCMS-V5.7-UTF8-SP2\uploads\data\config.cache.inc.php檔案中的內容,需要存在任意檔案讀取或下載的漏洞,當然還有另外一種方式,就是利用使用者第一次登入時候下發cookie的方法(PutCookie)直接生成cookie,這樣的cookie定會通過cookie校驗的方法(GetCookie)。

kie.png

接下來需要檢視登入位置的程式碼塊,知曉登入時候cookie的生成規則是否是PutCookie,在檔案\DedeCMS-V5.7-UTF8-SP2\uploads\include\memberlogin.class.php中輸入合規的loginuser和loginpwd便會執行PutLoginInfo。

info.png

跟入PutLoginInfo方法,在檔案\DedeCMS-V5.7-UTF8-SP2\uploads\include\memberlogin.class.php中的第517-540行中發現了該方法的程式碼塊,且在第531-539行中使用了PutCookie下發cookie。因此存在cookie的偽造漏洞。

漏洞.png

跟入檢測登入狀態的程式碼,在檔案\DedeCMS-V5.7-UTF8-SP2\uploads\include\memberlogin.class.php的第160-241行發現程式碼塊,其中第170行檢測cookie中的DedeUserID引數的值,合規在第185行中,傳入資料庫查詢獲得結果後,把結果展示在頁面上。

頁面.png

0×02 漏洞復現

情況一:

由於mid在資料庫中是int,所以要進行cookie的偽造需要註冊使用者名稱為要越權的使用者mid數值,而admin預設為1。因此可以直接登入為admin。

需要註冊使用者名稱為對應資料庫中dede_member表中mid對應的值。如註冊使用者名稱為0001對應dede_member表中mid為1,便是admin的mid。

md.png

然後訪問如下請求獲取偽造的cookie,

0001.png

接下來使用0001賬號登入,登入後的未修改的cookie。

IE.png

將last_vid的值賦給DedeUserID,last_vidckMd5的值賦給DedeUserIDckMd5修改後的cookie。

後 的.png

修改後重新整理頁面登入到admin使用者中。

中.png

情況二:

由於在\DedeCMS-V5.7-UTF8-SP2\uploads\include\memberlogin.class.php中的第170行中先進行cookie的校驗再使用GetNum進行非數字和點的資料的替換,然後轉成使用int型,拼接進入sql語句。

語句 1.png

語句 2.png

在\DedeCMS-V5.7-UTF8-SP2\uploads\member\index.php檔案中的第124行,當uid不為空的時候會require_once(DEDEMEMBER.’/inc/config_space.php’)

php.png

跟入config_space.php在\DedeCMS-V5.7-UTF8-SP2\uploads\member\inc\config_space.php檔案中第29行使用了GetUserSpaceInfos方法。

fangfa.png

跟入GetUserSpaceInfos方法在\DedeCMS-V5.7-UTF8-SP2\uploads\member\inc\config_space.php檔案中第118行發現該方法,且在第131行中使用了like的方式獲取使用者資料。

shuju.png

因此可以註冊類似於xxx1xx的使用者,如bala1bala(當然僅需要實際環境中有包含使用者名稱有包含1的即可),然後在uid位置使用%1%讓GetUserSpaceInfos方法可以正常獲取資料,從而使程式碼能夠進入PutCookie方法,從而生成偽造的cookie。

K.png

然後對cookie進行替換,DedeUserID=%1%; DedeUserID__ckMd5=8983265c65c8d1ca;中會滿足GetNum(GetCookie(“DedeUserID”));後並轉成int型1 ,再進行SQL拼接,因此便可以登入到admin。

min.png

任意修改前臺使用者密碼

0×00 相關環境

原始碼資訊:DedeCMS-V5.7-UTF8-SP2-20180109

問題檔案: \DedeCMS-V5.7-UTF8-SP2\uploads\member\resetpassword.php

漏洞型別:任意使用者密碼修改

0×01 漏洞分析

在\DedeCMS-V5.7-UTF8-SP2\uploads\member\resetpassword.php檔案中的第96-95行,其中$row['safequestion'] == $safequestion && $row['safeanswer'] == $safeanswer程式碼是問題的關鍵,預設$row['safequestion']在資料中的內容為0,$row['safeanswer']在資料庫中的結果為空,且變數$safeanswer與$safequestion是使用者可控制的變數,又使用了 ==進行判斷, 因此該判斷規則存在弱型別問題。

wentu.png

而在if(empty($safequestion)) $safequestion = ”;語句中,要使empty($safequestion) 為false且$row['safequestion'] == $safequestion未true,所以可以使用字元型的0.0,進行繞過。

raoguo.png

繞過後會進入sn的方法,因此跟入sn方法,在\DedeCMS-V5.7-UTF8-SP2\uploads\member\inc\inc_pwd_functions.php檔案中第150-172行發現程式碼塊,且該方法會呼叫newmail方法。

nm.png

跟入newmail方法,在\DedeCMS-V5.7-UTF8-SP2\uploads\member\inc\inc_pwd_functions.php檔案中第73-123行中發現程式碼塊,然後當傳入的$send為N的時候便會下發重置密碼的連結,進行密碼修改操作。

caozuo.png

0×02 漏洞復現

先進行如下請求獲取key

=1.png

然後點選跳轉連結便可以重置密碼

O.png

任意重置後臺使用者密碼

0×00 相關環境

原始碼資訊:DedeCMS-V5.7-UTF8-SP2-20180109

問題檔案: \DedeCMS-V5.7-UTF8-SP2\uploads\member\edit_baseinfo.php

漏洞型別:任意重置後臺使用者密碼

0×01 漏洞分析

在\DedeCMS-V5.7-UTF8-SP2\uploads\member\edit_baseinfo.php檔案中的第118-123行中,當使用admin使用者登入前臺進行密碼修改的時候會順帶將admin的後臺密碼也進行修改了。

修改.png

0×02 漏洞復現

先利用前臺使用者任意密碼重置漏洞重置admin的前臺密碼,然後使用cookie偽造漏洞使用admin使用者登入到前臺在如下頁面中進行密碼重置,舊密碼便是利用前臺使用者任意密碼重置漏洞重置admin的前臺密碼(admin123),新密碼自行設定(123456),設定好提交,操作步驟如下:

先利用前臺任意密碼重置,將admin的密碼重置為admin123,然後訪問該http://127.0.0.1/member/edit_baseinfo.php連結進行密碼修改,填入舊密碼(admin123),新密碼(123456)與郵箱提交。

tijiao.png

修改後訪問後臺可以直接使用修改後的密碼123456登入。

56.png

前臺任意檔案刪除

0×00 相關環境

原始碼資訊:DedeCMS-V5.7-UTF8-SP2-20180109

問題檔案: \DedeCMS-V5.7-UTF8-SP2\uploads\member\album_add.php

漏洞型別:任意檔案刪除

0×01 漏洞分析

問題在\DedeCMS-V5.7-UTF8-SP2\uploads\member\album_add.php檔案的第88-103行中的程式碼,其中第88行中包含了/inc/archives_check.php檔案對$litpic變數進行初始化,如下是/inc/archives_check.php檔案對$litpic變數進行初始化的程式碼塊。

daima.png

然後在\DedeCMS-V5.7-UTF8-SP2\uploads\member\album_add.php檔案的第100行中使用$litpic = $litpicname;再次對$litpic變數進行賦值,而$litpicname之前未被初始化,所以可以使用變數覆蓋的方式進行賦值,在檔案的第94行中要求$formhtml==1為1才能進入$litpic = $litpicname,但是$formhtml在為空的時候會被賦值,所以可以通過變數覆蓋為其賦值,使變數不為空,然後就可以進入$litpic = $litpicname。

name.png

在\DedeCMS-V5.7-UTF8-SP2\uploads\member\archives_do.php檔案的第161-162行中,當$row['issystem']!=-1的時候使用DelArc方法刪除文件,$row['issystem']== -1的時候使用DelArcSg刪除文件。

wendang.png

而預設情況下issystem的值為1,因此可以直接跟入DelArc方法,在\DedeCMS-V5.7-UTF8-SP2\uploads\member\inc\inc_batchup.php檔案中的第20-129行中發現該程式碼塊,其中第72-76行中,從資料庫中取出litpic列的值然後進行$litpic = DEDEROOT.$licp['litpic'];路徑拼接,僅做了檔案是否存在的判斷,並未判斷檔案型別,就進行刪除操作了,因此存在任意檔案刪除漏洞。

漏洞.png

0×02 漏洞復現

先在會員中心->內容中心->系統模型內容->圖集構造如下請求,新增formhtml引數的值為1,litpicname引數的值為要刪除的檔案路徑,以網站根目錄為基本目錄,構造好後進行請求。

POST /member/album_add.php HTTP/1.1

Host: 127.0.0.1

User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3

Accept-Encoding: gzip, deflate

Content-Type: multipart/form-data; boundary=---------------------------223472707522220

Content-Length: 1802

Referer: [http://127.0.0.1/member/album_add.php](http://127.0.0.1/member/album_add.php)

Cookie: PHPSESSID=kublnhoscak1n73fseggmmmb33; DedeUserID=8; DedeUserID__ckMd5=03ad72531b31e585; DedeLoginTime=1516599960; DedeLoginTime__ckMd5=5451388fd8bc13e8; last_vtime=1516600044; last_vtime__ckMd5=3bbb694896a75541; last_vid=0001; last_vid__ckMd5=b40da23c41809b4e; ENV_GOBACK_URL=%2Fmember%2Fcontent_list.php%3Fchannelid%3D2

Connection: close

Upgrade-Insecure-Requests: 1

-----------------------------223472707522220

Content-Disposition: form-data; name="dopost"

save

-----------------------------223472707522220

Content-Disposition: form-data; name="channelid"

2

-----------------------------223472707522220

Content-Disposition: form-data; name="imagebody"

-----------------------------223472707522220

Content-Disposition: form-data; name="title"

1

-----------------------------223472707522220

Content-Disposition: form-data; name="tags"

2

-----------------------------223472707522220

Content-Disposition: form-data; name="writer"

Thinking

-----------------------------223472707522220

Content-Disposition: form-data; name="typeid"

6

-----------------------------223472707522220

Content-Disposition: form-data; name="mtypesid"

0

-----------------------------223472707522220

Content-Disposition: form-data; name="description"

-----------------------------223472707522220

Content-Disposition: form-data; name="litpic"; filename="1.png"

Content-Type: image/png

‰PNG

-----------------------------223472707522220

Content-Disposition: form-data; name="imgmsg1"

11

-----------------------------223472707522220

Content-Disposition: form-data; name="vdcode"

5x3q

-----------------------------223472707522220

Content-Disposition: form-data; name="formhtml"

1

-----------------------------223472707522220

Content-Disposition: form-data; name="litpicname"

/1.txt

-----------------------------223472707522220--

在會員中心->內容中心->系統模型內容->圖集中找到剛才釋出的文章進行刪除操作,執行結束後便會刪除,前面定義好的litpicname的檔案。

GET /member/index.php?dopost=save HTTP/1.1

Host: 127.0.0.1

User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3

Accept-Encoding: gzip, deflate

Cookie: PHPSESSID=kublnhoscak1n73fseggmmmb33; DedeUserID=8; DedeUserID__ckMd5=03ad72531b31e585; DedeLoginTime=1516599960; DedeLoginTime__ckMd5=5451388fd8bc13e8

Connection: close

Upgrade-Insecure-Requests: 1

後臺任意檔案上傳

0×00 相關環境

原始碼資訊:DedeCMS-V5.7-UTF8-SP2-20180109

問題檔案: DedeCMS-V5.7-UTF8-SP2\uploads\include\dialog\select_images_post.php

漏洞型別:後臺任意檔案上傳

0×01 漏洞分析

在檔案DedeCMS-V5.7-UTF8-SP2\uploads\include\dialog\select_images_post.php的第33行-40行中,其中34行將檔名中正則匹配到的內容替換為空白,且在36行檢索檔名字中是否存在白名單中的檔案格式,這兩種做法均不是取檔案的字尾名來進行判斷的,所以存在被繞過的問題。

問題.png

而在檔案DedeCMS-V5.7-UTF8-SP2\uploads\include\dialog\select_images_post.php的第55行-62行中,取檔案的字尾名進行拼接和上傳操作。存在檢測方式與上傳檔案生成方式不一致的問題,導致被繞過。

繞過.png

跟入$cfg_imgtype在\DedeCMS-V5.7-UTF8-SP2\uploads\data\config.cache.inc.php中的第18行發現了的上傳型別格式限制。但是可以使用xxx.jpg.p%php,或xxx.jpg.p*hp等方式繞過,圖片的格式滿足config.cache.inc.php中的規定即可。

即可.png

0×02 漏洞復現

該漏洞需要開啟會員功能,然後可以在會員中心的編輯器中繞過上傳限制。

POST /include/dialog/select_images_post.php?CKEditor=body&CKEditorFuncNum=2&langCode=zh-cn HTTP/1.1

Host: 127.0.0.1

User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3

Accept-Encoding: gzip, deflate

Content-Type: multipart/form-data; boundary=---------------------------2029356716975

Content-Length: 620

Referer: [http://127.0.0.1/member/archives_add.php?channelid=6](http://127.0.0.1/member/archives_add.php?channelid=6)

Cookie: UM_distinctid=160e48790ce5b-0fcbfb6867024d-12666d4a-13c680-160e48790cfb2; CNZZDATA5760804=cnzz_eid%3D193867769-1515662577-%26ntime%3D1516000016; PHPSESSID=b602af1f688b3422d78ac6e9b0adcec3; _csrf_name_d913aa85=7ff3c606297ef8b30217286e08ade98c; _csrf_name_d913aa85__ckMd5=694e999a0caaaf1e; DedeUserID=8; DedeUserID__ckMd5=9360696c07c8bfb8; DedeLoginTime=1516153005; DedeLoginTime__ckMd5=a4bb8919e8626b76; ENV_GOBACK_URL=%2Fmember%2Fcontent_list.php%3Fchannelid%3D6

Connection: close

Upgrade-Insecure-Requests: 1

-----------------------------2029356716975

Content-Disposition: form-data; name="upload"; filename="1.png.p*hp"

Content-Type: image/png

‰PNG

相關推薦

程式碼審計| DEDECMS -V5.7-UTF8-SP2-20180109漏洞集合

最近dedeCMS爆了好多洞(0day),於是將最近的漏洞進行復現和整理便成為了本篇漏洞集合。 最近dedeCMS爆了好多洞(0day),於是將最近的漏洞進行復現和整理便成為了本篇漏洞集合。期待師傅們的指導與交流。 cookie偽造導致任意前臺使用者登入 0×00 相關環境

代碼審計-DedeCMS-V5.7前臺任意用戶密碼重置

漏洞分析 cti question 兩個 int 等於 允許 浮點 rdquo 0x01 漏洞影響 該漏洞允許攻擊者修改任意前臺用戶密碼。 0x02 漏洞利用條件 1,開啟會員模塊 2,攻擊者擁有一個正常的會員賬號 3,目標沒有設置安全問題 0x03

dedecms V5.7 SP2 web後臺getshell

1後臺getshell https://www.freebuf.com/vuls/164035.html https://github.com/SecWiki/CMS-Hunter/tree/master/DedeCMS/DedeCMS V5.7 SP2後臺存在程式碼執行漏洞 ded

dedecms v5.7 sp2前臺任意使用者登入(包括管理員)

dedecms v5.7 sp2前臺任意使用者登入(包括管理員) 前言 我們繼續來說一下dedecms最新的幾個漏洞,今天是一個前臺任意使用者登入的漏洞,該漏洞結合上一次提到的前臺任意密碼修改漏洞可以直接修改管理員的密碼,剩下的就是找後臺了,廢話不多說,我們開始吧 漏洞版本

CVE-2018-20129:DedeCMS V5.7 SP2前臺檔案上傳漏洞

一、漏洞摘要 漏洞名稱: DedeCMS V5.7 SP2前臺檔案上傳漏洞上報日期: 2018-12-11漏洞發現者: 陳燦華產品首頁: http://www.dedecms.com/軟體連結: http://updatenew.dedecms.com/base-v57/packa

CVE-2018-20129:DedeCMS V5.7 SP2前臺文件上傳漏洞

oba sid img name multi def close -a 代碼 一、漏洞摘要 漏洞名稱: DedeCMS V5.7 SP2前臺文件上傳漏洞上報日期: 2018-12-11漏洞發現者: 陳燦華產品首頁: http://www.dedecms.com/軟件鏈接:

CVE-2018-20129-——DedeCMS V5.7 SP2前臺檔案上傳漏洞

0x01 漏洞概述 Desdev DedeCMS(織夢內容管理系統)是中國卓卓網路(Desdev)科技有限公司的一套開源的集內容釋出、編輯、管理檢索等於一體的PHP網站內容管理系統(CMS)。 Desdev DedeCMS 5.7 SP2版本中的uploads/include/dial

DedeCMS V5.7 SP2前臺檔案上傳漏洞(CVE-2018-20129)

DedeCMS V5.7 SP2前臺檔案上傳漏洞(CVE-2018-20129) 一、漏洞描述 織夢內容管理系統(Dedecms)是一款PHP開源網站管理系統。Dedecms V5.7 SP2版本中的uploads/include/dialog/select_images_post.php檔案存在檔案上傳漏洞

Dedecms v5.7 CKEditor編輯器回車將<br>和<div>改了<p>的解決方法

dedecms 編輯器Dedecms v5.7 SP1的Ckeditor編輯器有些改動,默認為回車鍵換行、Shift+Enter換段落,但各位站長朋友都習慣了直接敲回車換段落,查看後發現它的配置文件裏是可以修改解決的,其實你可以把下面的代碼註釋掉就可以采用另外一種模式了(enter換段落):1、找到:安裝目

DedeCMS---V5.7_UTF8_SP1、SP2---任意前臺用戶登錄(cookie偽造)

!= 為我 BE OS tex AD gpo cut body 漏洞觸發點在include/memberlogin.class.php中的MemberLogin類中的登錄校驗函數 //php5構造函數 function __construct($kptime =

DeDeCMS v5.7 密碼修改漏洞(附PoC)

原文:https://paper.seebug.org/507/ 參考: https://xz.aliyun.com/t/1959 https://xz.aliyun.com/t/1961 安裝 注意安裝之後,註冊會員預設是需要後臺admin稽核的,這裡需要admin在後臺修改一

程式碼審計—Discuz!7.2/X1 第三方外掛儲存型

0x00 前言 內容: 這裡是烏雲漏洞的分析和說明,雖然很無奈,但是隻能通過這種方法來學習。 0x01 start $uid=$_POST[uid]; $username=$_POST[user

程式碼審計—Discuz!7.2/X1 第三方外掛SQL注入

0x00 前言 內容說明: 烏雲編號:146 這個漏洞沒有辦法復現,我找不到這麼早之前的樣本了。所以只好借用烏雲來簡單分析和記錄一下了。還是有一點無奈的。要是有一個專門的練習審計的地方就好了。 0x0

DeDeCMS v5.7 密碼修改漏洞

先拿到admin的前臺許可權 1.註冊0000001使用者名稱的賬號 稽核通過(或者設定為不需稽核) 2. 訪問/member/index.php?uid=0000001。 注意只有訪問了/membe

Dedecms V5.7後臺的兩處getshell

在這個帖子裡我把兩個洞一起寫出來。 第一個是常見的思路,把語句寫入inc檔案,然後在其他的include語句中,包含了惡意程式碼進而getshell。漏洞程式碼在:/dede/sys_verifies.php 程式碼如下: else if ($action == 'getfiles') {

Dedecms V5.7 關於session

使用 fff 關於 test 啟動 class () blog .html 在dedecmsv5.7裏面使用session的話要註意開啟方式!和PHP源碼裏的使用方式不一樣!!! 開啟session,前面必須要@ @session_start(); 啟動session,前面

最新版 ueditor 1.2.4.0 PHP 版 與 dedecms v5.7 整合

最新版 ueditor 1.2.4.0 PHP 版 與 dedecms v5.7 整合。整合功能說明: 1. 圖片上傳目錄自己進行了調整。路徑格式是 “/upfiles/allimg/2013/01/17/r44101358393882.jpg”。 2. 以後升級方便,調整

程式碼審計】Cscms_v4.1 任意檔案刪除漏洞例項

  環境搭建: CSCMS :http://www.chshcms.com/ 網站原始碼版本:Cscms_v4.1正式版(釋出日期:2017-06-05) 程式原始碼下載:https://github.com/chshcms/cscms   漏洞例項一: 漏洞檔案位

程式碼審計】XYHCMS V3.5URL重定向漏洞分析

  0x00 環境準備 XYHCMS官網:http://www.xyhcms.com/ 網站原始碼版本:XYHCMS V3.5(2017-12-04 更新) 程式原始碼下載:http://www.xyhcms.com/Show/download/id/2/at/0.html 測試網站首頁:

程式碼審計】YzmCMS_PHP_v3.6 任意檔案刪除漏洞分析

  0x00 環境準備 YzmCMS官網:http://www.yzmcms.com/ 程式原始碼下載:http://pan.baidu.com/s/1pKA4u99 測試網站首頁:   0x01 程式碼分析 1、檔案位置: /application/member/contr