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

代码审计过程

  1. 前端分析

    • OtherForm.tsx 是 TypeScript 文件,包含 JSX 语法
    • 使用 Ant Design 的 TextArea 组件收集用户输入
    • 前端没有直接的 XSS 过滤逻辑
    • React 默认会对插入到 DOM 的内容进行转义
  2. 后端跟踪

    • 表单提交到 /api/admin/website/other 接口
    • AdminRouters 类路由到 WebSiteController
    • WebSiteControllerother() 方法处理请求
    • 调用 webSiteService.other() 获取网站信息
    • 整个流程没有 XSS 过滤机制

漏洞原理

系统在网站统计信息处未对用户输入进行过滤,导致存储型 XSS 漏洞。

3.2 CSRF 漏洞

漏洞特点

  • 与 XSS 漏洞位于同一功能点
  • 提交数据为 JSON 格式
  • 存在特殊字符处理问题(JSON 格式后会自动添加 =

绕过方法

通过构造特殊的 JSON 格式参数嵌套来绕过格式限制。

4. 漏洞复现

4.1 XSS 复现步骤

  1. 访问后台:设置->其他设置
  2. 在"网站统计"处输入 XSS payload:
    <script>alert(1)</script>
    
  3. 提交后查看源代码确认插入成功
  4. 刷新网站前台页面,触发弹窗

4.2 CSRF 复现步骤

  1. 构造 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="&#123;&quot;icp&quot;&#58;&quot;&quot;&#44;&quot;webCm&quot;&#58;&quot;&lt;script&gt;alert&#40;&#47;CSRF&#47;&#41;&lt;&#47;script&gt;&quot;&#44;&quot;robotRuleContent&quot;&#58;&quot;&apos;value&apos;" value="&quot;&#125;" />
      <input type="submit" value="Submit request" />
    </form>
    </body>
    </html>
    
  2. 诱使管理员访问该页面
  3. 查看设置处确认修改成功
  4. 访问前台页面触发 XSS 弹窗

4.3 文章管理处 XSS(附加)

  1. 编辑任意文章
  2. 插入 XSS payload
  3. 点击发布
  4. 前台浏览文章触发弹窗

注:此处存在时间校验参数,CSRF 利用较困难

5. 修复建议

  1. XSS 防护

    • 对所有用户输入进行 HTML 实体编码
    • 实现内容安全策略(CSP)
    • 使用 React 的 dangerouslySetInnerHTML 时要特别小心
  2. CSRF 防护

    • 添加 CSRF Token 验证
    • 检查 Referer 头
    • 对敏感操作使用 POST 请求
  3. 输入验证

    • 对 JSON 数据进行严格验证
    • 实现白名单过滤机制

6. 参考资源

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: 提交后查看源代码确认插入成功 刷新网站前台页面,触发弹窗 4.2 CSRF 复现步骤 构造 CSRF POC(使用 Burp Suite 生成): 诱使管理员访问该页面 查看设置处确认修改成功 访问前台页面触发 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 防护指南