PHP代碼審計(jì)之RCE漏洞
RCE漏洞全稱為遠(yuǎn)程命令/代碼執(zhí)行漏洞(英文為remote command/code execute),可以讓攻擊者直接向后臺服務(wù)器遠(yuǎn)程注入操作系統(tǒng)命令或者代碼,從而控制后臺系統(tǒng)。
本文中將對Thinkphp5.0.X代碼執(zhí)行漏洞進(jìn)行簡單的分析。
漏洞影響版本:
ThinkPHP5.0.X 代碼執(zhí)行漏洞
漏洞成因:控制器過率不嚴(yán),結(jié)合直接返回類名的代碼操作,導(dǎo)致可以用命名空間的方式來調(diào)用任意類的任意方法
影響范圍:ThinkPHP5.0.X-5.0.23
EXP:
/index.php?s=/index/\think\APP/invokefunction&function=phpinfo&vars[0]=100
/public/index.php?s=/index/\think\APP/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami
一般入口文件是在站點(diǎn)根目錄下的public目錄下的index.php文件:

在框架引導(dǎo)文件中調(diào)用APP類的run函數(shù),后發(fā)現(xiàn)進(jìn)入autoload自動(dòng)加載類

發(fā)現(xiàn)代碼在尋找think\APP的類

查找think\APP類所對應(yīng)的類文件的物理路徑

途中在think\APP類文件中86行,發(fā)現(xiàn)filter過率函數(shù)(換空)

在APP類文件的103行放出可調(diào)度的信息dispatch,這個(gè)代表提交路由的狀態(tài)模式,而這個(gè)變量是由routeCheck函數(shù)返回,我們進(jìn)入routeCheck函數(shù)查看

發(fā)現(xiàn)routeCheck函數(shù)為路由檢查函數(shù),跟進(jìn)后發(fā)現(xiàn)我們提交的路由為合理路由,并沒有過濾 (path里的路徑為index/think\APP/invokefunction)

繼續(xù)往下,發(fā)現(xiàn)使用Route:parseUrl函數(shù)對路由進(jìn)行解析,將模塊/控制器/函數(shù)/參數(shù)從我們提交的路由中分離出來,分別加載

在route:parseUrl中使用ParseUrlPath對路徑由/進(jìn)行分割,發(fā)現(xiàn)我們提交的\think\APP并沒有被分割開來

繼續(xù)往下發(fā)現(xiàn)解析控制器的內(nèi)容,沒有任何過濾,這樣使得我們可以調(diào)用框架中任何控制器的類文件

往下發(fā)現(xiàn)可以任意執(zhí)行類的任意函數(shù),傳入任意參數(shù)

到現(xiàn)在位置,可以調(diào)用任意類文件中的任意函數(shù)


APP類文件的invokefunction函數(shù)中,function為我們傳入的phpinfo,這里使用到了反射類,將傳入的函數(shù)對象反射,最后通過invokeArgs執(zhí)行。

關(guān)于反射類執(zhí)行類的函數(shù):

以上內(nèi)容選自安全牛課堂《PHP代碼審計(jì)之RCE漏洞》課程
本課程您還將學(xué)習(xí)到UsualTool后臺getshell入門審計(jì)、pluck漏洞代碼、zzzphp遠(yuǎn)程代碼執(zhí)行漏洞審計(jì)、PbootCMS遠(yuǎn)程代碼執(zhí)行漏洞審計(jì)、ecshop日志文件代碼執(zhí)行漏洞審計(jì)、Empire后臺代碼執(zhí)行g(shù)etshell、Thinkphp5.0.X代碼執(zhí)行漏洞等相關(guān)漏洞代碼分析以及漏洞復(fù)現(xiàn)。
掃描下方二維碼直接跳轉(zhuǎn)至課程頁面

課程視頻地址:https://www.aqniukt.com/my/course/13995