披露狀態(tài):
2014-01-25: 細節(jié)已通知廠商并且等待廠商處理中
2014-01-26: 廠商已經(jīng)確認,細節(jié)僅向廠商公開
2014-01-29: 細節(jié)向第三方安全合作伙伴開放
2014-02-05: 細節(jié)向核心白帽子及相關(guān)領(lǐng)域?qū)<夜_
2014-02-15: 細節(jié)向普通白帽子公開
2014-03-07: 細節(jié)向?qū)嵙暟酌弊庸_
2014-04-25: 細節(jié)向公眾公開
簡要描述:
PHPCMS前臺存在嚴重設計缺陷
利用這個設計缺陷可導致任意代碼/命令執(zhí)行,當然可Getshell.
但PHPCMS代碼執(zhí)行不是這篇文章的主題,今天的主題是:
主題一:給大家介紹一種通用的設計缺陷,希望能引起各個廠商重視,以及由此衍生出來的一種比較新穎的漏洞利用方法,此設計缺陷目前我已在多個CMS上證明.
主題二:我想說的是當我們有任何奇思妙想的時候,哪怕這個想法"不切實際",、"不可能",,只要我們想方設法去實踐,就會有意想不到的效果,這個漏洞就是證明.
PS: 明天放假了,在這里祝大家新年快樂!
詳細說明:
#1 前言
猛獸來了,我們應該將其絕殺在門外,但是有些人非得把它放進屋內(nèi),才殺之,你們難道不知道猛獸的嘴里可能叼了一個炸藥包嗎? 砰!!!結(jié)果全都完完了…
#2 叼著炸藥包的猛獸來了
請先看下面這段代碼
這段代碼實際意義不大,不過,沒關(guān)系我們重在研究嘛,一種典型的”將猛獸放進室內(nèi),才殺之”的案例,,我們來看看
上述代碼即存在本文所講的設計缺陷
可將任意文件copy成惡意文件,如木馬,,后來發(fā)現(xiàn)這個文件不安全,,后面的unlink($_GET['dst']);將之刪除...
但是,,各位廠商們 你們可曾想到這個木馬可能在你們刪除之前,生成了新的木馬文件,結(jié)果可想而知,SO... 還請在設計產(chǎn)品時多考慮考慮....
#3 PHPCMS案例
PHPCMS相應的設計缺陷在上傳頭像的功能處,,我們來看看其代碼
/phpsso_server/phpcms/modules/phpsso/index.php 第572行開始 uploadavatar()函數(shù)
大概意思是解壓ZIP文件,再刪除非jpg文件,,目錄等(看見了吧,產(chǎn)生了#2所述的設計缺陷,典型的引狼入室,再殺之的設計理念),但由于在此處出現(xiàn)過上傳漏洞,增加了這么一行代碼:
只允許jpg格式文件,不允許php后綴的文件,這為我們下面的漏洞利用帶來了不少的麻煩,但別急,后面我會講到突破的方法...
#4 突破限制產(chǎn)生php臨時文件
雖然代碼限制了只能是jpg格式的文件,但我們的文件名可以是1.php.php.jpg 對吧,
想到什么沒有呢?對,!采用文件名截斷...行動吧
(為了方便調(diào)試,我們加入如下代碼,即在解壓zip文件后,,刪除非jpg文件前中斷代碼的執(zhí)行)
結(jié)果,,成功在目錄下生成了1.php文件
#5 漏洞利用poc
只要有php文件生成那就好辦了,poc構(gòu)想如下:
正常情況:
上傳頭像-->生成臨時文件(1.php)-->刪除非jpg文件
我們想要的情況:
上傳頭像-->生成臨時文件(1.php)-->1.php在上層目錄生成shell.php文件-->刪除1.php等非jpg文件,,留下shell.php文件-->成功
1.php.php.jpg文件的內(nèi)容為:
同時用數(shù)字填充,,大小為1 2M左右,同時打包為ZIP包,,如圖:
當然為了能順利的利用,,手工是不行的,程序的執(zhí)行多快啊 是吧...
于是我們利用PHP寫出POC,打開至少15個CMD窗口跑起來,模仿多線程嘛,哈哈...
我相信不一會就會在上層目錄生成我們想要的shell.php文件,,POC如下 這里就不演示了...
漏洞證明:
#6 Exp利用代碼
為了方便利用,,最后我用py寫了最終的EXP,代碼如下
#7 Exp跑起來
效果如下所示
修復方案:
你們懂.