thinkphp5遠(yuǎn)程代碼執(zhí)行
影響范圍:5.x < 5.1.31, <= 5.0.23 危害:遠(yuǎn)程代碼執(zhí)行 漏洞分析 分析補(bǔ)。 802f284bec821a608e7543d91126abc5901b2815。 路由信息中controller的部分進(jìn)行了過濾,可知問題出現(xiàn)在路由調(diào)度時(shí)。
t01.png (159.64 KB, 下載次數(shù): 76)
下載附件
保存到相冊
2019-5-20 15:46 上傳
以5.1.23版本進(jìn)行分析,執(zhí)行路由調(diào)度的代碼如下:
t02.png (488.31 KB, 下載次數(shù): 79)
下載附件
保存到相冊
2019-5-20 15:46 上傳
其中使用了$this->app->controller方法來實(shí)例化控制器,然后調(diào)用實(shí)例中的方法。跟進(jìn)controller方法:
t03.png (337.81 KB, 下載次數(shù): 66)
下載附件
保存到相冊
2019-5-20 15:47 上傳
其中通過parseModuleAndClass方法解析出$module和$class,然后實(shí)例化$class。 而parseModuleAndClass方法中,當(dāng)$name以反斜線\開始時(shí)直接將其作為類名。利用命名空間的特點(diǎn),如果可以控制此處的$name(即路由中的controller部分),那么就可以實(shí)例化任何一個(gè)類。 接著,我們再往回看路由解析的代碼。其中route/dispatch/Url.php:: parseUrl方法調(diào)用了route/Rule.php:: parseUrlPath來解析pathinfo中的路由信息
t04.png (191.72 KB, 下載次數(shù): 79)
下載附件
保存到相冊
2019-5-20 15:47 上傳
代碼比較簡單,就是使用/對$url進(jìn)行分割,未進(jìn)行任何過濾。 其中的路由url從Request::path()中獲取
t05.png (457.56 KB, 下載次數(shù): 75)
下載附件
保存到相冊
2019-5-20 15:48 上傳
由于var_pathinfo的默認(rèn)配置為s,我們可利用$_GET[‘s’]來傳遞路由信息,也可利用pathinfo來傳遞,但測試時(shí)windows環(huán)境下會(huì)將$_SERVER[‘pathinfo’]中的\替換為/。 結(jié)合前面分析可得初步利用代碼如下:index.php?s=index/\namespace\class/method ,這將會(huì)實(shí)例化\namespace\class類并執(zhí)行method方法。 然而利用過程中會(huì)存在一些限制,部分類在實(shí)例化時(shí)由于缺少參數(shù)而報(bào)錯(cuò)。 經(jīng)過一番尋找,在\think\Request類中找到可以利用的方法input。以下為執(zhí)行phpinfo
t06.png (182.62 KB, 下載次數(shù): 74)
下載附件
保存到相冊
2019-5-20 15:48 上傳
|