?

Dec 11 2018

ThinkPHP5遠程命令執行漏洞POC

首頁 » 代碼審計 » ThinkPHP5遠程命令執行漏洞POC   

前言


近日thinkphp團隊發布了版本更新https://blog.thinkphp.cn/869075,其中修復了一處getshell漏洞


影響范圍:5.x < 5.1.31, <= 5.0.23

危害:遠程代碼執行





漏洞分析

分析補丁:

802f284bec821a608e7543d91126abc5901b2815。

路由信息中controller的部分進行了過濾,可知問題出現在路由調度時。


1.jpg

以5.1.23版本進行分析,執行路由調度的代碼如下:


2.jpg

其中使用了$this->app->controller方法來實例化控制器,然后調用實例中的方法。跟進controller方法:

3.jpg


其中通過parseModuleAndClass方法解析出$module和$class,然后實例化$class。


而parseModuleAndClass方法中,當$name以反斜線\開始時直接將其作為類名。利用命名空間的特點,如果可以控制此處的$name(即路由中的controller部分),那么就可以實例化任何一個類。


接著,我們再往回看路由解析的代碼。其中route/dispatch/Url.php:: parseUrl方法調用了route/Rule.php:: parseUrlPath來解析pathinfo中的路由信息

4.jpg

代碼比較簡單,就是使用/對$url進行分割,未進行任何過濾。


其中的路由url從Request::path()中獲取

5.jpg

由于var_pathinfo的默認配置為s,我們可利用$_GET['s']來傳遞路由信息,也可利用pathinfo來傳遞,但測試時windows環境下會將$_SERVER['pathinfo']中的\替換為/。



結合前面分析可得初步利用代碼如下:index.php?s=index/\namespace\class/method ,這將會實例化\namespace\class類并執行method方法。



然而利用過程中會存在一些限制,部分類在實例化時由于缺少參數而報錯。



經過一番尋找,在\think\Request類中找到可以利用的方法input。以下為執行phpinfo

6.jpg



如果您喜歡本博客,歡迎點擊圖片定訂閱到郵箱填寫您的郵件地址,訂閱我們的精彩內容:

正文部分到此結束

文章標簽: thinkphp漏洞

版權聲明:若無特殊注明,本文皆為( mOon )原創,轉載請保留文章出處。

也許喜歡: «thinkphp v5.x 遠程代碼執行漏洞poc(附腳本) | 兩個關于sql注入的小trick»

你腫么看?

你還可以輸入 250/250 個字

? 微笑 大笑 拽 大哭 親親 流汗 噴血 奸笑 囧 不爽 暈 示愛 害羞 吃驚 驚嘆 愛你 嚇死了 呵呵

評論信息框

這篇文章還沒有收到評論,趕緊來搶沙發吧~

?
?
河北11选5开奖