0x00 漏洞描述
3 月 10 日:微软发布安全通告 ADV200005,称 SMBv3 协议在处理某些请求的方式中存在代码执行漏洞,并提供了缓解措施。
3 月 12 日:微软正式发布 CVE-2020-0796 安全通告和漏洞修复补丁。
CVE-2020-0796是Windows 10 1903/1909的新SMB3压缩功能中的错误。
SMB协议版本3.1.1引入了一种功能,即客户端或服务器可以发布压缩功能,并有选择地压缩SMB3消息。
使用此功能协商会话后,客户端或服务器可以选择压缩某些SMB消息。为此,整个SMB包会被压缩,并且生成的文件头会被前置。此标头是一个小的(16字节)结构:魔术值,未压缩的数据大小,使用的压缩算法和偏移值。
CVE-2020-0796是由该偏移量大小中缺少边界检查导致的,该偏移量大小会被直接传递给多个子例程。传入较大的值将导致缓冲区溢出,并使内核崩溃。通过进一步的工作,可以将其开发为远程代码执行类型等的漏洞利用程序。
漏洞影响版本:
Windows 10 Version 1903 for 32-bit Systems
Windows 10 Version 1903 for x64-based Systems
Windows 10 Version 1903 for ARM64-based Systems
Windows Server, Version 1903 (Server Core installation)
Windows 10 Version 1909 for 32-bit Systems
Windows 10 Version 1909 for x64-based Systems
Windows 10 Version 1909 for ARM64-based Systems
Windows Server, Version 1909 (Server Core installation)
0x01 漏洞分析
1.分析环境搭建及配置
配置目标机(虚拟机): Windows版本:1909,未安装安全更新补丁(KB4551762)
查看其ip:
![](https://i-blog.csdnimg.cn/blog_migrate/30335168379dc637d25b912a537abf54.png)
配置内核调试,管理员权限启动cmd,输入以下命令
![](https://i-blog.csdnimg.cn/blog_migrate/c66d2e25dbbb4834c37447e5d079b134.png)
配置内核调试主机(宿主机):
配置符号表:
![](https://i-blog.csdnimg.cn/blog_migrate/8490367a9bbc458c7d1ef80fe814e223.png)
![](https://i-blog.csdnimg.cn/blog_migrate/43397426f0f63f6ad875b7bdcac4411f.png)
配置完成后,重启虚拟机即可开始调试内核
![](https://i-blog.csdnimg.cn/blog_migrate/c287971d1226d418633184084389db8a.png)
2.打开Wireshark,进行抓包
3.触发蓝屏,进行调试。
(将目标机关闭防火墙)
![](https://i-blog.csdnimg.cn/blog_migrate/f4a2f73230fb2a2374f75c814528b069.png)
采用蓝屏poc:
触发蓝屏:虚拟机成功挂掉
![](https://i-blog.csdnimg.cn/blog_migrate/5cec1873cbd23928e06f8031472e5fdd.png)
Wireshark抓包如下:
![](https://i-blog.csdnimg.cn/blog_migrate/17853cc07c894effa4a885c674082645.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ef78666c287545229f195cf972bae518.png)
使用!analyze -v
KEY_VALUES_STRING: 1
Key : Analysis.CPU.Sec
Value: 5
Key : Analysis.DebugAnalysisProvider.CPP
Value: Create: 8007007e on DESKTOP-JT38GVK
Key : Analysis.DebugData
Value: CreateObject
Key : Analysis.DebugModel
Value: CreateObject
Key : Analysis.Elapsed.Sec
Value: 61
Key : Analysis.Memory.CommitPeak.Mb
Value: 61
Key : Analysis.System
Value: CreateObject
ADDITIONAL_XML: 1
BUGCHECK_CODE: 50
BUGCHECK_P1: ffffc80d40cf0c1f
BUGCHECK_P2: 0
BUGCHECK_P3: fffff80414c3cee7
BUGCHECK_P4: 2
READ_ADDRESS: ffffc80d40cf0c1f Nonpaged pool
MM_INTERNAL_CODE: 2
PROCESS_NAME: System
TRAP_FRAME: ffffc68f9c9b2b90 -- (.trap 0xffffc68f9c9b2b90)
NOTE: The trap frame does not contain all registers.
Some register values may be zeroed or incorrect.
rax=ffffc68f9c9b2d58 rbx=0000000000000000 rcx=ffffc68f9c9b2d50
rdx=0000000000000001 rsi=0000000000000000 rdi=0000000000000000
rip=fffff80414c3cee7 rsp=ffffc68f9c9b2d20 rbp=ffffc68f9c9b2d70
r8=0000000000000000 r9=0000000000000033 r10=fffff80414c3ce90
r11=0000000000000000 r12=0000000000000000 r13=0000000000000000
r14=0000000000000000 r15=0000000000000000
iopl=0 nv up ei pl zr na po nc
nt!RtlDecompressBufferLZNT1+0x57:
fffff804`14c3cee7 0fb71e movzx ebx,word ptr [rsi] ds:00000000`00000000=????
Resetting default scope
STACK_TEXT:
ffffc68f`9c9b2148 fffff804`148ad492 : ffffc80d`40cf0c1f 00000000`00000003 ffffc68f`9c9b22b0 fffff804`1472bf20 : nt!DbgBreakPointWithStatus
ffffc68f`9c9b2150 fffff804`148acb82 : fffff804`00000003 ffffc68f`9c9b22b0 fffff804`147d7ce0 00000000`00000050 : nt!KiBugCheckDebugBreak+0x12
ffffc68f`9c9b21b0 fffff804`147c3917 : fffff804`14a681b8 fffff804`148d6fe5 ffffc80d`40cf0c1f ffffc80d`40cf0c1f : nt!KeBugCheck2+0x952
ffffc68f`9c9b28b0 fffff804`14807b0a : 00000000`00000050 ffffc80d`40cf0c1f 00000000`00000000 ffffc68f`9c9b2b90 : nt!KeBugCheckEx+0x107
ffffc68f`9c9b28f0 fffff804`146d01df : ffffc80c`43764000 00000000`00000000 00000000`00000000 ffffc80d`40cf0c1f : nt!MiSystemFault+0x18fafa
ffffc68f`9c9b29f0 fffff804`147d169a : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000054 : nt!MmAccessFault+0x34f
ffffc68f`9c9b2b90 fffff804`14c3cee7 : 00000000`00000000 00000000`00001100 ffffc80c`3feff8c0 00000000`00001000 : nt!KiPageFault+0x35a
ffffc68f`9c9b2d20 fffff804`1466e666 : ffffc80d`417bc04f ffffc80c`3feff8c0 ffffc80d`417bc04f fffff804`1466e5da : nt!RtlDecompressBufferLZNT1+0x57
ffffc68f`9c9b2db0 fffff804`1944e0bd : 00000000`00000002 00000000`00000033 00000000`ffffffff fffff804`00000000 : nt!RtlDecompressBufferEx2+0x66
ffffc68f`9c9b2e00 fffff804`194f7f41 : ffffc80c`00010020 ffffc80c`417bd150 00000000`00000001 00000000`ffffffff : srvnet!SmbCompressionDecompress+0xdd
ffffc68f`9c9b2e70 fffff804`194f699e : 00000000`00000000 ffffc80c`40cf06a0 00000000