日本电影一区二区_日本va欧美va精品发布_日本黄h兄妹h动漫一区二区三区_日本欧美黄色

「漏洞分析」ThinkPHP5任意代碼執(zhí)行分析全記錄(thinkphp5源碼分析)

「漏洞分析」ThinkPHP5任意代碼執(zhí)行分析全記錄(thinkphp5源碼分析)

一 、前言

ThinkPHP是為了簡(jiǎn)化企業(yè)級(jí)應(yīng)用開(kāi)發(fā)敏捷WEB應(yīng)用開(kāi)發(fā)而誕生的輕量級(jí)PHP開(kāi)發(fā)框架,具有免費(fèi)開(kāi)源、快速、簡(jiǎn)單且面向?qū)ο蟮忍攸c(diǎn)。
在ThinkPHP的5.*版本中存在安全隱患,由于ThinkPHP5框架對(duì)控制器名沒(méi)有進(jìn)行足夠的安全檢測(cè),導(dǎo)致在沒(méi)有開(kāi)啟強(qiáng)制路由的情況下,可能出現(xiàn)getshell漏洞。受影響的版本包括5.0和5.1。

本期安仔課堂,ISEC實(shí)驗(yàn)室的黃老師將為大家介紹ThinkPHP5的相關(guān)知識(shí)點(diǎn),歡迎感興趣的朋友一起交流學(xué)習(xí)。

二、漏洞分析

該漏洞源于ThinkPHP5框架底層對(duì)控制器名過(guò)濾不嚴(yán),允許黑客通過(guò)url調(diào)用Thinkphp框架內(nèi)部的敏感函數(shù),出現(xiàn)getshell漏洞。具體代碼實(shí)現(xiàn)如下:

「漏洞分析」ThinkPHP5任意代碼執(zhí)行分析全記錄(thinkphp5源碼分析)

圖1

2.1

thinkphp/library/think/App.php

首先看到Routecheck代碼,由于沒(méi)有在配置文件上定義任何路由,所以默認(rèn)按照?qǐng)D一的方式進(jìn)行解析調(diào)度。如果開(kāi)啟強(qiáng)制路由模式,會(huì)直接拋出錯(cuò)誤,這時(shí)通過(guò)Route::import命令加載路由,繼續(xù)跟進(jìn)路由。

「漏洞分析」ThinkPHP5任意代碼執(zhí)行分析全記錄(thinkphp5源碼分析)

圖2

2.2

thinkphp/library/think/Route.php

可以看到tp5在解析URL的時(shí)候只是將URL按分割符分割,并沒(méi)有進(jìn)行安全檢測(cè)。繼續(xù)分析:

「漏洞分析」ThinkPHP5任意代碼執(zhí)行分析全記錄(thinkphp5源碼分析)

圖3

其中,滲透測(cè)試人員最為關(guān)心的是Exchange對(duì)外提供的訪問(wèn)接口,以及使用的加密驗(yàn)證類型。

2.3

thinkphp/library/think/App.php

可以看到:由于程序并未對(duì)控制器進(jìn)行有效的安全過(guò)濾和檢查,因此測(cè)試人員可以通過(guò)引用“”來(lái)調(diào)用任意方法。

「漏洞分析」ThinkPHP5任意代碼執(zhí)行分析全記錄(thinkphp5源碼分析)

圖4

2.4

跟進(jìn)到module方法

「漏洞分析」ThinkPHP5任意代碼執(zhí)行分析全記錄(thinkphp5源碼分析)

圖5

在測(cè)試時(shí)注意使用一個(gè)已存在的module,否則會(huì)拋出異常,無(wú)法繼續(xù)運(yùn)行。此處直接從之前的解析結(jié)果中獲取控制器名稱以及操作名,無(wú)任何安全檢查。

「漏洞分析」ThinkPHP5任意代碼執(zhí)行分析全記錄(thinkphp5源碼分析)

圖6

2.5

跟進(jìn)到實(shí)例化Loader 控制器方法

「漏洞分析」ThinkPHP5任意代碼執(zhí)行分析全記錄(thinkphp5源碼分析)

圖7

可以看到如果控制器名中有“”,就直接返回。回到“thinkphp/library/think/App.php”的module方法,正常情況下應(yīng)該獲取到對(duì)應(yīng)控制器類的實(shí)例化對(duì)象,而我們現(xiàn)在得到了一個(gè)“thinkApp”的實(shí)例化對(duì)象,通過(guò)url調(diào)用其任意的public方法,同時(shí)解析url中的額外參數(shù),當(dāng)作方法的參數(shù)傳入。我們可以調(diào)用invokeFunction這個(gè)方法,構(gòu)造payload為:

「漏洞分析」ThinkPHP5任意代碼執(zhí)行分析全記錄(thinkphp5源碼分析)

圖8

三、漏洞利用

所有基于tp5.0框架建設(shè)的網(wǎng)站都受此漏洞的影響。

3.1

測(cè)試該漏洞點(diǎn)是否被修復(fù)

「漏洞分析」ThinkPHP5任意代碼執(zhí)行分析全記錄(thinkphp5源碼分析)

圖9

網(wǎng)址后面直接拼接以上代碼,執(zhí)行之后發(fā)現(xiàn)出現(xiàn)phpinfo頁(yè)面,說(shuō)明漏洞存在。

「漏洞分析」ThinkPHP5任意代碼執(zhí)行分析全記錄(thinkphp5源碼分析)

圖10

3.2

在public目錄下創(chuàng)建insfo.php

「漏洞分析」ThinkPHP5任意代碼執(zhí)行分析全記錄(thinkphp5源碼分析)

圖11

修改漏洞利用代碼,直接在public目錄下創(chuàng)建一個(gè)名為insfo.php的一句話木馬。

「漏洞分析」ThinkPHP5任意代碼執(zhí)行分析全記錄(thinkphp5源碼分析)

圖12

3.3

刪除insfo.php文件

「漏洞分析」ThinkPHP5任意代碼執(zhí)行分析全記錄(thinkphp5源碼分析)

圖13

四、解決方案

直接添加補(bǔ)丁,升級(jí)ThinkPHP版本,開(kāi)啟強(qiáng)制路由,在ThinkPHP5.0版本的thinkphp/library/think/App.php , Module類的獲取控制名處添加如下代碼,正則過(guò)濾:

「漏洞分析」ThinkPHP5任意代碼執(zhí)行分析全記錄(thinkphp5源碼分析)

圖14

相關(guān)新聞

聯(lián)系我們
聯(lián)系我們
公眾號(hào)
公眾號(hào)
在線咨詢
分享本頁(yè)
返回頂部
宿松县| 乡城县| 牟定县| 克什克腾旗| 太谷县| 五大连池市| 锦州市| 兴义市| 依安县| 乃东县| 峨边| 嘉鱼县| 玛纳斯县| 建阳市| 蕲春县| 土默特右旗| 滕州市| 博客| 甘孜| 镇远县| 孟州市| 类乌齐县| 阳新县| 巨鹿县| 梧州市| 墨玉县| 大埔区| 宿州市| 德令哈市| 东源县| 道孚县| 永济市| 新乡县| 元阳县| 任丘市| 安远县| 来宾市| 无为县| SHOW| 乐平市| 西贡区|