CVE-2020-0796 SMB漏洞本地提权分析

2020-04-15 约 50 字 预计阅读 1 分钟

声明:本文 【CVE-2020-0796 SMB漏洞本地提权分析】 由作者 剑残雪飘 于 2020-04-15 09:03:35 首发 先知社区 曾经 浏览数 110 次

感谢 剑残雪飘 的辛苦付出!

Author:剑残雪飘@深蓝攻防实验室

微软安全中心在北京时间3月12日23时发布了影响Windows 10 等系统用户的SMBv3远程代码执行漏洞补丁,本文分析一下本地提权的exp执行流程

漏洞原因

漏洞发生在srv2.sys中,由于SMB没有正确处理压缩的数据包,在解压数据包的时候使用客户端传过来的长度进行解压时,并没有检查长度是否合法.最终导致整数溢出。

漏洞分析

看一下调用过程:
Srv2ReceiveHandler调用Srv2DecompressMessageAsync

Srv2DecompressMessageAsync 调用Srv2DecompressData

漏洞在Srv2DecompressData函数中

攻击者可以控制OriginalCompressedSegmentSizeOffsetOrLength这两个参数。OriginalCompressedSegmentSize用来描述压缩前的数据大小,1OffsetOrLength1用来描述压缩数据的长度或者片偏移,这两个都是32位的长度,相加产生整数溢出

调试分析

这里通过本地提权调试一下该漏洞的原因,项目地址:

https://github.com/danigargu/CVE-2020-0796

Srv2!Srv2DecompressDataadd之前rcx0x10

add之后为0xf,整数溢出

然后调用rvnet!SrvNetAllocateBuffer 申请内存,调用nt!RtlDecompressBufferXpressLz进行内存拷贝,

buf+1108+10指向了buf的地址

在压缩传输时发送1108a然后就可以覆盖buf指针的地址,作者利用下面代码,修改buf的指针为SEP_TOKEN_PRIVILEGES的地址:

修改后buf的地址为:

我们查看一下token

权限:

SEP_TOKEN_PRIVILEGEStoken+0x40的地址,这个地址就是前面buffer指针覆盖的地址

通过任意写修改这个指针为system的权限,查看一下systemTOKEN_PRIVILEGES

所以作者在代码里修改了SEP_TOKEN_PRIVILEGES的值为0x0000001ff2ffffbc

此时程序的权限变成了system进程的权限,后面就是常规的进程注入,弹cmd了

关键词:[‘安全技术’, ‘漏洞分析’]


author

旭达网络

旭达网络技术博客,曾记录各种技术问题,一贴搞定.
本文采用知识共享署名 4.0 国际许可协议进行许可。

We notice you're using an adblocker. If you like our webite please keep us running by whitelisting this site in your ad blocker. We’re serving quality, related ads only. Thank you!

I've whitelisted your website.

Not now