jspxcms历史漏洞分析与复现-JAVA
字数 1493 2025-08-29 08:31:35

JSPXCMS历史漏洞分析与复现教学文档

一、环境准备

1. 系统要求

  • 操作系统:Windows 10
  • 中间件:Apache Tomcat 9.0.58
  • 数据库:MySQL 5.7.26(可使用phpstudy集成环境)

2. 部署步骤

JSPXCMS安装包部署到Tomcat

  1. 下载并解压jspxcms安装包
  2. 将Tomcat的ROOT目录替换为jspxcms的ROOT目录
  3. 修改application.properties中的数据库配置信息
  4. 启动Tomcat服务

JSPXCMS源码部署到IDEA

  1. 使用IDEA打开解压好的源码目录
  2. 由于使用了SpringBoot框架,直接运行主程序Application即可

二、漏洞分析与复现

1. XSS漏洞

漏洞位置

  • 评论功能中的文本输入未充分过滤
  • 前端模板sys_member_space_comment.html未使用escape标签进行HTML实体编码

复现步骤

  1. 访问首页任意新闻
  2. 注册用户并提交评论(使用XSS payload)
  3. 访问/space/{id}路径触发XSS

代码分析路径

  1. 搜索comment_submit定位到控制器方法
  2. 跟踪text变量传递过程:
    • 控制器接收参数 → service层处理 → dao层存储
  3. 前端渲染分析:
    • /comment_list使用了HTML实体编码
    • /space/{id}未使用编码

2. SSRF漏洞

第一处SSRF

敏感函数

HttpClient.execute()

漏洞位置

  • fetchHtml()方法直接使用用户可控URL发起请求

复现步骤

  1. 构造请求调用fetchUrl()方法
  2. 传入外部可控URL参数

第二处SSRF

敏感函数

URL.openConnection()

漏洞位置

  • ueditorCatchImage()方法中source[]参数可控

复现步骤

  1. 访问/ueditor路径
  2. 设置action=catchimage
  3. 传入恶意URL参数

3. RCE漏洞

第一处:反序列化RCE

依赖条件

  • 使用了CommonsBeanutils1依赖
  • 使用了Apache Shiro且版本<1.4.2(可利用Shiro-721)

复现步骤

  1. 生成恶意序列化payload:
// 使用TemplatesImpl和BeanComparator构造payload
byte[] code = Base64.getDecoder().decode("恶意字节码");
TemplatesImpl obj = new TemplatesImpl();
setFieldValue(obj, "_bytecodes", new byte[][]{code});
// ... 构造PriorityQueue...
  1. 使用Shiro-721利用工具爆破rememberMe Cookie
  2. 发送包含恶意payload的请求

第二处:文件上传RCE

漏洞位置

  • 文件管理中的压缩包上传功能
  • AntZipUtils.unzip()未对文件名进行安全处理

复现步骤

  1. 准备包含war包的压缩文件(如冰蝎webshell)
  2. 通过文件上传功能上传压缩包
  3. 系统自动解压并将war包移动到tomcat的webapps目录
  4. 访问webshell路径

技术细节

  • 直接上传jsp文件会被JspDispatcherFilter拦截
  • war包解压后形成独立应用,不受原过滤器限制

三、防御建议

  1. XSS防御

    • 所有用户输入输出点进行HTML实体编码
    • 统一使用escape标签处理前端模板
  2. SSRF防御

    • 校验URL参数的白名单
    • 禁用非常规协议(如file://)
    • 设置网络访问权限
  3. 反序列化防御

    • 升级Shiro至最新版本
    • 使用安全的序列化库
    • 校验反序列化数据
  4. 文件上传防御

    • 校验文件类型和内容
    • 限制解压路径
    • 对文件名进行规范化处理

四、参考资料

  1. 《JAVA代码审计(入门篇)》
  2. Shiro-721漏洞利用工具:https://github.com/inspiringz/Shiro-721
  3. Apache Commons Beanutils安全公告
JSPXCMS历史漏洞分析与复现教学文档 一、环境准备 1. 系统要求 操作系统:Windows 10 中间件:Apache Tomcat 9.0.58 数据库:MySQL 5.7.26(可使用phpstudy集成环境) 2. 部署步骤 JSPXCMS安装包部署到Tomcat 下载并解压jspxcms安装包 将Tomcat的ROOT目录替换为jspxcms的ROOT目录 修改 application.properties 中的数据库配置信息 启动Tomcat服务 JSPXCMS源码部署到IDEA 使用IDEA打开解压好的源码目录 由于使用了SpringBoot框架,直接运行主程序 Application 即可 二、漏洞分析与复现 1. XSS漏洞 漏洞位置 评论功能中的文本输入未充分过滤 前端模板 sys_member_space_comment.html 未使用escape标签进行HTML实体编码 复现步骤 访问首页任意新闻 注册用户并提交评论(使用XSS payload) 访问 /space/{id} 路径触发XSS 代码分析路径 搜索 comment_submit 定位到控制器方法 跟踪 text 变量传递过程: 控制器接收参数 → service层处理 → dao层存储 前端渲染分析: /comment_list 使用了HTML实体编码 /space/{id} 未使用编码 2. SSRF漏洞 第一处SSRF 敏感函数 : 漏洞位置 : fetchHtml() 方法直接使用用户可控URL发起请求 复现步骤 : 构造请求调用 fetchUrl() 方法 传入外部可控URL参数 第二处SSRF 敏感函数 : 漏洞位置 : ueditorCatchImage() 方法中 source[] 参数可控 复现步骤 : 访问 /ueditor 路径 设置 action=catchimage 传入恶意URL参数 3. RCE漏洞 第一处:反序列化RCE 依赖条件 : 使用了CommonsBeanutils1依赖 使用了Apache Shiro且版本 <1.4.2(可利用Shiro-721) 复现步骤 : 生成恶意序列化payload: 使用Shiro-721利用工具爆破rememberMe Cookie 发送包含恶意payload的请求 第二处:文件上传RCE 漏洞位置 : 文件管理中的压缩包上传功能 AntZipUtils.unzip() 未对文件名进行安全处理 复现步骤 : 准备包含war包的压缩文件(如冰蝎webshell) 通过文件上传功能上传压缩包 系统自动解压并将war包移动到tomcat的webapps目录 访问webshell路径 技术细节 : 直接上传jsp文件会被 JspDispatcherFilter 拦截 war包解压后形成独立应用,不受原过滤器限制 三、防御建议 XSS防御 : 所有用户输入输出点进行HTML实体编码 统一使用escape标签处理前端模板 SSRF防御 : 校验URL参数的白名单 禁用非常规协议(如file://) 设置网络访问权限 反序列化防御 : 升级Shiro至最新版本 使用安全的序列化库 校验反序列化数据 文件上传防御 : 校验文件类型和内容 限制解压路径 对文件名进行规范化处理 四、参考资料 《JAVA代码审计(入门篇)》 Shiro-721漏洞利用工具:https://github.com/inspiringz/Shiro-721 Apache Commons Beanutils安全公告