SMBv3长途拒绝处事(BSOD)缝隙分析 8090安适门户
前言
我是菜鸟,大牛轻喷。
这个SMBv3缝隙是由lgandx爆出的一个未被微软修复的缝隙(暂未颁布补丁),缝隙出来后我进行了必然的分析,花了很多时间,这个缝隙有一些意思,但是对付SMB的整个协议通信过程非常复杂,所以没有进行非常细致的跟踪,包孕一些不透明的布局体让我感想晕头转向,但到最后还是有了一些功效。
这个SMB缝隙可以看作是被动的,需要用户主动去访谒445端口才可以触发,而不像ms08067一样主动打击别人,所以需要运行缝隙脚本在系统上。
终于赶在元宵节此日完成了这个任务,也在这里,祝大家元宵节快乐!
这个缝隙在twitter爆出来之后,很多老外也在微博下面问是否可以RCE,包孕国内的预警中也有人问到。
那么很多人看到PoC中的关键部分,就会想:有填充数据,会不会是缓冲区溢出!
## Tree Connect
if data[16:18] == "\x03\x00":
head = SMBv2Header(Cmd="\x03\x00", MessageId=GrabMessageID(data), PID="\xff\xfe\x00\x00", TID="\x01\x00\x00\x00", CreditCharge=GrabCreditCharged(data), Credits=GrabCreditRequested(data), NTStatus="\x00\x00\x00\x00", SessionID=GrabSessionID(data))
t = SMB2TreeData(Data="C"*1500)#//BUG
packet1 = str(head)+str(t)
buffer1 = longueur(packet1)+packet1
print "[*]Triggering Bug; Tree Connect SMBv2 packet sent."
self.request.send(buffer1)
data = self.request.recv(1024)
答案是否定的,至少在我看来,大量的数据目的并非是为了填充缓冲区,而是为了绕过tcpip.sys的某处判断,从而进入缝隙出发的函数挪用逻辑。
问题呈此刻smbv2后的一个特性Tree Connect,用来措置惩罚惩罚共享处事的特性,opcode:0x03,而整个问题,确是多个处所导致的。下面我们就一起来进入今天的旅程吧!
Github地点:https://github.com/lgandx/PoC/tree/master/SMBv3%20Tree%20Connect
缝隙复现
首先,网上关于这个缝隙的触发要领有很多,对照通用的是twitter中某老外提到的Powershell的要领,最为简单,首先我们调试的环境是:Windows 10 x64 build 1607
接下来我们在kali2.0里运行缝隙脚本。
随后执行"dir \ip\PATH",缝隙触发,通过windbg双机联调,此时捕捉到了BSOD。
可以看到提示此时问题呈此刻mrxsmb20.sys中,问题函数是Smb2ValidateNegotiateInfo,来看一下触发位置的代码。
kd> p
mrxsmb20!Smb2ValidateNegotiateInfo+0x17:
fffff803`1869c7d7 66394114 cmp word ptr [rcx+14h],ax
kd> r rcx
rcx=0x00000000`00000000
此时rcx的值为0x0,是一处无效地点,因此这是由于空指针引用导致的BSOD,接下来继续执行可以看到Windows 10引发蓝屏。
回溯及数据包分析(important!)
我们来看一下mrxsmb20.sys关于Tree Connect特性的一些内容,代码逻辑相对简单。
可以看到执行到Smb2ValidateNegotiateInfo函数有两条逻辑挪用,一个是Smb2TreeConnect_CopyData,一个是Smb2TreeConnect_Receive,这里我就把我回溯的功效和大家分享一下,首先,通过Smb2TreeConnect_Receive来接收smb的Tree Connect数据,这个是通过opcode来决定的。
正常情况下不会进入Smb2TreeConnect_CopyData,但一旦由不正常(后面会提到)数据包执行,则会在Receive之后进入CopyData函数的措置惩罚惩罚逻辑,从而引发缝隙。
这里数据包分析很关键,因为在缝隙触发过程中,就是由于数据包的问题导致的。
来看一下Smb最关键的这个数据包。
来看一下Smb头部的协议格局。
在协议格局中Opcode指示smb类型
注意数据包中对应位置,opcode值是0x03,就是tree connect的措置惩罚惩罚。同时这里在后面分析中我们要用到,注意Data数据之前的长度。此中包罗了NetBIOS Session Service 4字节,和 SMB2 Header + Tree Connect Body 80字节,以及 Data n字节。这个非常重要,后续分析我们会用到。
温馨提示: 本文由杰米博客推荐,转载请保留链接: https://www.jmwww.net/file/pc/12781.html