CVE-2020-0787本地提权 重现学习

原创
07/15 19:11
阅读数 738

    荐读:“任意文件移动漏洞”是近几年来Windows漏洞中一类非常特殊的存在,相对于内存破坏漏洞而言,这类漏洞不会导致目标主机蓝屏,在执行时有较高的稳定性和隐蔽性。为了对它有一个更加深刻的理解,我们对它进行了学习。

    

    2020年3月,微软公布了一个本地提权漏洞CVE-2020-0787,根据微软的漏洞描述声称,攻击者在使用低权限用户登录系统后,可以利用该漏洞构造恶意程序直接提权到administrator或者system权限。


    Background Intelligent Transfer Service(BITS)是其中的一个后台智能传输服务组件。BITS中存在提权漏洞,该漏洞源于该服务无法正确处理符号链接。攻击者可通过执行特制的应用程序利用该漏洞覆盖目标文件,提升权限。


影响范围:堪称windows全版本;

Microsoft Windows 7 SP1,

Windows 8.1,

Windows RT 8.1,

Windows 10,

Windows 10版本1607,

Windows 10版本1709,

Windows 10版本1803,

Windows 10版本1809,

Windows 10版本1903,

Windows 10版本1909,

Windows Server 2008 SP2,

Windows Server 2008 R2 SP1,

Windows Server 2012,

Windows Server 2012 R2,

Windows Server 2016,

Windows Server 2019,

Windows Server版本1803,

Windows Server版本1903,

Windows Server版本1909。


    此漏洞的危害是非常地大。因此,我在本地机器上进行了重现学习。


    一、漏洞的重现

    测试机器为 win7 sp1;

    1、创建一个一般权限的用户test:

    net user test test123 /add


      2、用test帐户登录;


    3、打开cmd命令行,发现为一般权限;


    4、将漏洞Exp程序放入测试机win7中;


    5、运行该程序;

    最终得到 管理员 cmd:

    至此,成功地将一般权限提升到管理员权限;


二、分析本地提权的过程

    1、主要思想:提供给目标服务一个文件夹路径,该路径最初将作为另一个“物理”目录的junction(连接)点。我们创建了一个新的任务,“下载”一个本地文件,并且在TMP文件上设置Oplock。恢复任务后,服务会模拟RPC客户端身份开始写入TMP文件,触发Oplock。然后,我们需要将挂载点切换至对象目录(Object Directory),创建2个符号链接。TMP文件会指向我们拥有的任意文件,而“本地”文件将指向System32目录中的一个新的DLL文件。在释放Oplock后,服务会继续写入原始的TMP文件,但会通过我们设置的2个符号链接执行最终的移动操作。


2、分析程序执行过程的提示

整个过程,给出了具体的提示,我们来分析下这些提示


分解上图中提示,分析其过程如下:

1)创建新的任务。

.build了一个在本地目录debug下的SysFxUI.dll;

.通过 Source file、Destination file来创建新的任务:将debug目录下的此文件移/复制到system32下;


2)创建挂载点mountpoint,从\mountpoint\bait

并用本地文件test.txt创建了BITS Job

mountpoint目录的作用是将指向bait目录的junction点切换为指向RPC Control对象目录的junction点。


3)查找TMP文件并设置Oplock

    当将文件加入任务队列时,服务会立即创建一个TMP文件。由于文件具有“随机”名称,我们需要列出bait目录的内容来定位该文件。这里我们应当查找文件名类似BIT*.tmp的文件,找到名称后,我们可以在该文件上设置Oplock。


“Oplock”是什么:

    当两个客户同时访问一个文件时,必须采取一定的措施保证客户和服务器数据文件的一致。CIFS协议采用机会锁(oplock, opportunistic locks)的机制来解决分布式缓存的一致性(distributed cache coherency)问题。简单说,就是独享机制。


4)恢复任务并等待Oplock

    当任务恢复时,服务会打开并写入TMP文件,从而触发Oplock


5)切换挂载点,创建如下符号链接。


6)释放Oplock,完成任务。

    释放Oplock后,在原始TMP文件上的CreateFile操作会返回,服务开始写入BITEA3.tmp。随后,由于符号链接的存在,最终的MoveFileEx()调用会被重定向。因此,我们的DLL文件会被移动到System32目录中。


7)以System权限执行代码。

    为了以System权限执行代码,我通过这个任意文件移动漏洞在System32目录中创建了一个SysFxUI.dll文件,然后再利用Update Session Orchestrator服务,以System权限加载该DLL


3、程序下载地址:

https://github.com/cbwang505/CVE-2020-0787-EXP-ALL-WINDOWS-VERSION/releases/


三、说明

    网上有很多关于这个漏洞的分析,但没有站在我这个角度来解读的文章,算是一个补充吧。这个提权漏洞的作用非常地大,不光是作为提权吧,还有其它的用途。如果想仔细地了解,请读其它的分析文章,最好是去读源代码,这样你的收获会是非常大。




本文分享自微信公众号 - MicroPest(gh_696c36c5382b)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部