ZrLog3.1.4代码审计CSRF+XSS组合利用
字数 1267 2025-08-22 12:23:19
ZrLog 3.1.4 代码审计:CSRF+XSS 组合利用分析
1. 漏洞概述
本文档详细分析了 ZrLog 3.1.4 版本中存在的 CSRF 和 XSS 组合漏洞,包括漏洞原理、代码审计过程和复现方法。
2. 环境背景
- ZrLog:基于 Java 语言开发的开源博客系统
- 框架特点:未使用大型框架,仅包含 FreeMarker 模板引擎
- 前端技术:使用 React 和 Ant Design 库构建前端界面
3. 漏洞分析
3.1 XSS 漏洞
漏洞位置
- 文件:
OtherForm.tsx - 接口:
/api/admin/website/other - 控制器:
WebSiteController - 服务类:
WebSiteService
代码审计过程
-
前端分析:
OtherForm.tsx是 TypeScript 文件,包含 JSX 语法- 使用 Ant Design 的
TextArea组件收集用户输入 - 前端没有直接的 XSS 过滤逻辑
- React 默认会对插入到 DOM 的内容进行转义
-
后端跟踪:
- 表单提交到
/api/admin/website/other接口 - 由
AdminRouters类路由到WebSiteController WebSiteController的other()方法处理请求- 调用
webSiteService.other()获取网站信息 - 整个流程没有 XSS 过滤机制
- 表单提交到
漏洞原理
系统在网站统计信息处未对用户输入进行过滤,导致存储型 XSS 漏洞。
3.2 CSRF 漏洞
漏洞特点
- 与 XSS 漏洞位于同一功能点
- 提交数据为 JSON 格式
- 存在特殊字符处理问题(JSON 格式后会自动添加
=)
绕过方法
通过构造特殊的 JSON 格式参数嵌套来绕过格式限制。
4. 漏洞复现
4.1 XSS 复现步骤
- 访问后台:
设置->其他设置 - 在"网站统计"处输入 XSS payload:
<script>alert(1)</script> - 提交后查看源代码确认插入成功
- 刷新网站前台页面,触发弹窗
4.2 CSRF 复现步骤
- 构造 CSRF POC(使用 Burp Suite 生成):
<html> <body> <script>history.pushState('','','/')</script> <form action="https://demo.zrlog.com/api/admin/website/other" method="POST" enctype="text/plain"> <input type="hidden" name="{"icp":"","webCm":"<script>alert(/CSRF/)</script>","robotRuleContent":"'value'" value=""}" /> <input type="submit" value="Submit request" /> </form> </body> </html> - 诱使管理员访问该页面
- 查看设置处确认修改成功
- 访问前台页面触发 XSS 弹窗
4.3 文章管理处 XSS(附加)
- 编辑任意文章
- 插入 XSS payload
- 点击发布
- 前台浏览文章触发弹窗
注:此处存在时间校验参数,CSRF 利用较困难
5. 修复建议
-
XSS 防护:
- 对所有用户输入进行 HTML 实体编码
- 实现内容安全策略(CSP)
- 使用 React 的 dangerouslySetInnerHTML 时要特别小心
-
CSRF 防护:
- 添加 CSRF Token 验证
- 检查 Referer 头
- 对敏感操作使用 POST 请求
-
输入验证:
- 对 JSON 数据进行严格验证
- 实现白名单过滤机制
6. 参考资源
- JSON CSRF 绕过技术
- React 官方安全文档
- OWASP XSS 防护指南