CVE-2020-0729 poc构造记录

CVE-2020-0729 poc构造记录


前言

提由于想找个样本 研究一下,网上搜索了一番并没有现成的样本,于是打算自己尝试构造一个试试


环境

windows 10

构造过程

先用这个方法构造一个正常的样本
在这里插入图片描述
根据已知的漏洞函数我们对其进行分析触发流程
在这里插入图片描述
函数首先读取2字节类型,并检查是否已设置VT_ARRAY(0x2000)
在这里插入图片描述
然后
在这里插入图片描述
该函数检查类型是否为VT_UI4(0x0013),如果不是,则输入switch语句以处理所有其他类型。
漏洞本身在于如何处理类型为VT_VARIANT(0x000C)的PropertyVariant。VT_VARIANT类型通常与VT_VECTOR结合使用,这有效地导致了一系列PropertyVariant结构。换句话说,这就像具有一个数组,其中数组的成员可以是任何数据类型。
当PropertyVariant的类型设置为VT_VARIANT(0x000C)时,将检查完整类型字段以查看是否设置了VT_VECTOR

在这里插入图片描述
进入switch
在这里插入图片描述
在这里插入图片描述
然后
在这里插入图片描述
如果未设置VT_VECTOR,则会为24字节的缓冲区分配一个调用,CoTaskMemAlloc()并将该缓冲区传递给对的递归调用ReadPROPVARIANT(),以使该缓冲区将被紧随VT_VARIANT字段的属性填充。但是,缓冲区在传递给之前没有初始化(例如,用NULL字节填充)ReadPROPVARIANT()。
在这里插入图片描述
再次进入ReadPROPVARIANT()
在这里插入图片描述
然后重复之前ReadPROPVARIANT()的流程,再次进入switch
如果嵌套属性的类型为VT_CF(0x0047),则该属性旨在包含指向剪贴板数据的指针,ReadPROPVARIANT()对VT_VECTOR执行相同的检查,如果未设置,则尝试将流的后4个字节写入在先前分配的24字节缓冲区中由8字节值指向的位置
在这里插入图片描述
在这里插入图片描述
崩溃现场
在这里插入图片描述
这是POC的流程

如何将一个正常的search LNK做成poc
关键提到的两个关键位置
在这里插入图片描述
由于010Editord 的脚步对这种lnk的文件结构解析不正确,需要手动修正010Editord 的解析脚本
这里我用了另一个项目来解析

https://github.com/EricZimmerman/Lnk

之前我测试用了一种比较烦琐的方法,就是分析ReadPROPVARIANT()的实现
在这里插入图片描述
第一处关键跳转的流程使用__imp_IStream_Read读取出来的值是0x001f
可以搜索一下这个值
在这里插入图片描述
11处并不多,于是我逐个修改,下断点分析读取的值是否有变化
得出如下结果
在这里插入图片描述
第二处再次进入ReadPROPVARIANT()关键跳转的流程使用__imp_IStream_Read读取出来的值是0x0009

都是和下面switch要跳转到哪一步关键流程有关的,再结合之前文章的分析,所以大概能确定了结构的位置就在

在这里插入图片描述
我这里测试修改的是第四处的位置

后续

如果能构造处利用再过来补充吧

参考

CVE-2020-0729: REMOTE CODE EXECUTION THROUGH .LNK FILES
https://www.thezdi.com/blog/2020/3/25/cve-2020-0729-remote-code-execution-through-lnk-files

CVE-2020-0729:Windows LNK远程代码执行漏洞分析(一)
https://bbs.pediy.com/thread-262082.htm

CVE-2020-0729:Windows LNK远程代码执行漏洞分析(二)
https://bbs.pediy.com/thread-262332.htm#msg_header_h3_0

HAVOC Day1: The Legend of Shortcuts: A LNK to the Past (Searches)
https://www.youtube.com/watch?v=fmZNEVyyOx0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值