Spring Security OAuth 远程代码执行漏洞 CVE-2016-4977
影响范围 Spring Security OAuth 1.0.0 - 1.0.5 Spring Security OAuth 2.0.0 - 2.0.9 Spring Security OAuth 2.0 - 2.0.14 Spring Security OAuth 2.1 - 2.1.1 Spring Security OAuth 2.2 - 2.2.1 Spring Security OAuth 2.3 - 2.3.2 漏洞类型SpEL 表达式注入 操作系统限制无 配置要求默认配置 漏洞利用命令执行,进行反弹 shell,写入木马 利用原理当授权请求中的 scope 参数不合法,Spring 会调用默认的 WhitelabelApprovalEndpoint 生成错误页面,Spring 视图解析器解析错误模板,将 ${errorSummary} 占位符替换成含用户输入的错误描述字符串,攻击者可以构造恶意 payload 带入到页面内容,Spring 渲染引擎未能识别用户输入数据,会将 ${} 包裹的内容再次交给 SpEL 解析器处理,敏感命令得以执行 漏洞复现用现成的 vu...
Struts2 远程代码执行漏洞 CVE-2017-5638
影响范围 Struts 2.3.5 – 2.3.31 Struts 2.5 – 2.5.10 漏洞类型OGNL 表达式注入 操作系统限制无 配置要求默认配置 漏洞利用执行命令,可以执行各种敏感操作,例如任意文件读取,植入木马,内网探测 利用原理漏洞产生主要原因是 Struts2 有一个复杂功能,给错误信息赋动态变量,构造的 payload 通过错误信息进入到动态变量,后续通过动态变量抛出报错信息同时执行敏感命令。Struts2 默认使用 Jakarta 库来解析上传文件,通过构造异常的 Content-Type,Jakarta 解析器无法识别并抛出该字符串错误,Struts2 将错误转化为可读错误提示,findText () 函数解析时候,错误信息内有 %(# 符号,识别为需要计算的表达式,OGNL 引擎解析并执行括号里面的 Java 代码,即敏感命令 漏洞复现用现成的 vulhub 来拉取镜像 123456#下载vulhub源代码git clone https://github.com/vulhub/vulhub.git#进入漏洞目录cd vulhub/struts2/s2-...
Struts2 远程代码执行漏洞 CVE-2018-11776
影响范围 Struts 2.3 – 2.3.34 Struts 2.5 – 2.5.16 漏洞类型OGNL 表达式注入 操作系统限制无 配置要求 alwaysSelectFullNamespace 设置为 true package 标签未定义 namespace 或使用了通配符 漏洞利用执行命令,可以执行各种敏感操作,例如任意文件读取,植入木马,内网探测 利用原理Struts2 将 URL 路径中的 namespace 当作 OGNL 表达式,在重定向跳转时对其进行二次解析,执行敏感命令。Struts2 中的 URL 结构通常为 http://域名/命名空间/Action 名.action,如果攻击者访问不存在的命名空间,且配置了 alwaysSelectFullNamespace = true,那么会将攻击者注入的 payload 提取出来,将动态变量赋值为攻击 payload,OGNL 引擎解析命名空间时候执行了恶意 payload 漏洞复现用现成的 vulhub 来拉取镜像 123456#下载vulhub源代码git clone https://github.com...
Struts2 远程代码执行漏洞 CVE-2017-9805
影响范围 Struts 2.1.2 - 2.3.33 Struts 2.5 - 2.5.12 漏洞类型XML 反序列化 操作系统限制无 配置要求默认配置 漏洞利用写入敏感文件,反弹 shell 获取服务器权限 利用原理Struts2 框架对外部组件 XStream 插件默认使用 XStream 处理 XML 格式数据,可以将几乎任何 XML 标签映射为 Java 对象,攻击者在 Java 运行库寻找可以执行系统命令的类,由于 XStream 没有限制,攻击者可以构造特殊的 XML,包含触发点、执行链、敏感命令 漏洞复现用现成的 vulhub 来拉取镜像 123456#下载vulhub源代码git clone https://github.com/vulhub/vulhub.git#进入漏洞目录cd vulhub/struts2/s2-052#拉取镜像docker-compose up -d 访问 http://公网: 8080/orders 用 burpsuite 抓取 http://公网: 8080/orders/3/edit 数据包 发送到 Repeater 模...
Spring Cloud Gateway 远程代码执行漏洞 CVE-2022-22947
影响范围 Spring Cloud Gateway 3.1.x - 3.1.1 Spring Cloud Gateway 3.0.x - 3.0.7 旧版本 / 停止维护版本 漏洞类型SpEL 表达式注入 操作系统限制无 配置要求默认配置 漏洞利用命令执行,进行反弹 shell,写入内存马(删除路由后还能驻留在内存中) 利用原理Spring Cloud Gateway 提供了一个管理端点(/actuator/gateway/routes),允许管理员通过 HTTP 请求动态地添加、删除或修改路由配置,该端点暴露且未受保护,攻击者可以发送 POST 请求来定义新的路由,并在 filters 参数注入恶意代码,网关价值配置时候,会调用 ShortcutConfigurable 接口,该接口会将 filters 参数的值传给 SpEL 解析引擎。利用链分两个阶段,第一阶段为存储阶段,攻击者通过 T () 操作符调用 Java 环境敏感类来构造恶意代码,此时恶意代码仅仅作为字符串存在网关内存配置;第二阶段为触发阶段,加载过程网关会解析恶意表达式,解析成功后 Runtime.exec()...
Spring Cloud Function 远程代码执行漏洞 CVE-2022-22963
影响范围 Spring Cloud Function 3.0.0 - 3.1.6 Spring Cloud Function 3.2.0 - 3.2.2 漏洞类型 SpEL 表达式注入 操作系统限制无 配置要求默认配置 漏洞利用命令执行,进行反弹 shell,写入木马 利用原理Spring Cloud Function 引入 RoutingFunction 功能,允许开发者根据特定条件动态将请求分发给不同函数执行,框架允许通过 HTTP Header 来指定路由逻辑。当请求到达时,RoutingFunction 会检查是否存在特定 HTTP 请求头:spring.cloud.function.routing-expression,如果存在该 Header,框架会将其值作为 SpEL 表达式处理,攻击者可以构造恶意 payload 注入到 spring.cloud.function.routing-expression 属性值,服务器处理 POST 请求时候,识别到恶意 payload 就会触发解析,执行恶意命令。POST 请求主体不能为空,若为空,Spring 的 Messag...
Spring Security 认证绕过漏洞 CVE-2022-22978
影响范围 Spring Security 5.5.0 - 5.5.6 Spring Security 5.6.0 - 5.6.3 以及更早的停止维护版本。 漏洞类型权限绕过 操作系统限制无 配置要求 Spring Security 默认使用 AntPathRequestMatcher 正则表达式使用了点号(.)通配符 未显式设置 caseInsensitive 或 DOTALL 参数 漏洞利用越权获取敏感信息 利用原理RegexRequestMatcher(正则匹配器)初始化未开启 DOTALL 模式(开启后点号匹配范围扩大,可以匹配包括换行符在内的所以字符),安全框架用正则匹配路径,由于. 无法识别 %0a,导致正则引擎判定匹配失败,即认为加入 %0a 不属于受保护的范围,绕过了权限检验,从而能够访问敏感业务信息 漏洞复现用现成的 vulhub 来拉取镜像 123456#下载vulhub源代码git clone https://github.com/vulhub/vulhub.git#进入漏洞目录cd vulhub/spring/CVE-2022-22978#拉取镜像doc...
Struts2 远程命令执行漏洞 CVE-2021-31805
影响范围 Struts 2.0.0 - 2.5.29 漏洞类型OGNL 表达式注入 操作系统限制无 配置要求默认配置 漏洞利用执行命令,可以执行各种敏感操作,例如任意文件读取,植入木马,内网探测 利用原理Struts 内部对象虽然被锁死了,但是 Struts2 运行在 Tomcat 容器,攻击者可以利用 Tomcat 的 InstanceManager 绕过沙箱(相当于 CVE-2021-31805 是对 CVE-2020-17530 修复的绕过),InstanceManager 新建的 org.apache.commons.collections.BeanMap 对象能绕过普通权限检查,直接操作 memberAccess 的私有属性,利用 BeanMap 的 put 方法把 excludedClasses(Struts2 内部的黑名单)改为空,再通过攻击链执行敏感命令。 漏洞复现用现成的 vulhub 来拉取镜像 123456#下载vulhub源代码git clone https://github.com/vulhub/vulhub.git#进入漏洞目录cd vulhub/s...
Apache Struts 2 远程代码执行漏洞 CVE-2013-2251
影响范围 Struts 2.0.0 - 2.3.15 漏洞类型OGNL 表达式注入 操作系统限制无 配置要求默认配置 漏洞利用执行命令,可以执行各种敏感操作,例如任意文件读取,植入木马,内网探测 利用原理在 Struts2 中,DefaultActionMapper 类支持以” action:”、” redirect:”、” redirectAction” 作为导航或重定向过滤,在这些前缀后面可以加入 OGNL 表达式,Struts2 没有对这些前缀做过滤,可以利用 OGNL 表达式调用 Java 静态方法执行任意系统命令 漏洞复现用现成的 vulhub 来拉取镜像 123456#下载vulhub源代码git clone https://github.com/vulhub/vulhub.git#进入漏洞目录cd vulhub/struts2/s2-016#拉取镜像docker-compose up -d 访问 http://公网: 8080,出现 Hello world 即搭建成功 用 burpsuite 抓取 http://公网: 8080/index.action 数...
Struts2 远程命令执行漏洞 CVE-2016-3081
影响范围 Struts 2.3.18 - 2.3.28(不包括 2.3.20.2 和 2.3.24.2) 漏洞类型OGNL 表达式注入 操作系统限制无 配置要求默认配置 漏洞利用执行命令,可以执行各种敏感操作,例如任意文件读取,植入木马,内网探测 利用原理在配置文件 struts.xml 开启了 devMode(开发者模式),其中允许通过 method 前缀来动态执行 Action 方法。Struts2 内部存在一个安全沙盒,默认禁止执行危险的 Java 方法,为允许调用执行系统命令所需 Java 类,将上下文访问权限重置为默认,payload 片段为 #_memberAccess=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS。权限限制接触后,攻击者通过调用 Java 环境的 Runtime 环境执行系统级别的命令,payload 片段为 @java.lang.Runtime@getRuntime ().exec(‘id’),其中 id 可替换成其他敏感命令 漏洞复现用现成的 vulhub 来拉取镜像 123456#下载vulhub源代码g...