Tale博客系统代码审计过程
字数 1393 2025-08-24 16:48:07
Tale博客系统代码审计教学文档
1. 项目概述
Tale博客系统是基于Blade框架开发的Java Web应用程序。本次审计发现了多个安全漏洞,包括任意文件读取、任意代码文件写入和任意文件上传漏洞。
2. 环境准备与项目结构
2.1 开发环境配置
- 使用IDEA作为开发环境
- 通过Maven->reload project加载项目依赖
- 运行Application启动项目
2.2 项目依赖
- 使用Blade框架作为基础开发框架
- 实现了WebHook组件用于请求拦截
2.3 权限控制机制
- 系统定义了
ADMIN_URI常量:public static final String ADMIN_URI = "/admin" - WebHook会检查请求URL是否以
ADMIN_URI开头且不是登录请求 - 未登录用户访问admin路径会被重定向到登录页面
- 安全特性:Blade框架会自动处理路径遍历(如
/test/../admin/index无法匹配/admin/index)
3. 漏洞分析
3.1 任意文件读取漏洞
漏洞位置
路由:admin/template/content
漏洞详情
- 用户可控参数
fileName直接拼接形成文件路径 - 未对
fileName进行任何过滤处理 - 直接使用
Files.readAllLines读取文件内容
验证方法
读取系统敏感文件(如pom.xml):
GET /admin/template/content?fileName=pom.xml
3.2 任意代码文件写入漏洞
漏洞位置
路由:admin/api/template/save
漏洞详情
- 接收
TemplateParam对象,包含两个可控参数:@Data public class TemplateParam { private String fileName; private String content; } - 仅检查
fileName是否为空(StringKit.isBlank(templateParam.getFileName())) - 直接拼接
filepath并写入内容 - 文件不存在时会自动创建
利用方式
- 修改服务器上的任意文件
- 写入恶意路由代码(服务器重启后生效):
- 创建不需要认证的路由
- 植入后门代码获取系统权限
验证方法
- 修改桌面文件
- 写入新的路由代码
3.3 任意文件上传漏洞
漏洞位置
路由:admin/api/attach/upload
漏洞详情
- 获取文件名并赋值给
fname getFileKey方法处理上传路径:- 检查
/upload/当前日期/目录是否存在,不存在则创建 - 使用
StringKit.fileExt生成文件名,但未对文件后缀做任何限制
- 检查
利用限制
- 上传的文件可能不被解析执行
- 可被用于存储型XSS攻击
验证方法
上传包含恶意脚本的文件(如HTML/JS文件)
4. 漏洞修复建议
4.1 任意文件读取修复
- 对
fileName参数进行严格过滤 - 限制可访问的目录范围
- 使用白名单方式限制可读取的文件类型
4.2 任意代码文件写入修复
- 对写入路径进行规范化处理
- 限制可写入的文件扩展名
- 实现代码签名验证机制
- 对管理员操作进行二次认证
4.3 任意文件上传修复
- 实现严格的文件扩展名白名单
- 对上传文件内容进行检查
- 设置独立的非执行上传目录
- 对图片类文件进行重采样处理
5. 总结
本次审计发现的漏洞主要源于:
- 用户输入未经验证直接使用
- 文件操作未进行适当的路径限制
- 缺乏对危险文件类型的过滤机制
这些漏洞组合利用可导致服务器完全沦陷,建议开发者立即修复并加强输入验证机制。