windbg 命令_CVE20178464:震网三代漏洞windbg动态调试

7d4f95dcb268be4801c082c50384981f.png

漏洞历史 2010年,攻击伊朗核工厂的漏洞利用工具就是“震网一代”,它因此被公认为世界上首个网络“超级破坏性武器”。 2011年,“震网二代”蠕虫病毒出现,因为他会在临时目录下生成名为~DQ的随机文件,也被称作Duqu。 2017年6月14日,微软在补丁中修补了一个快捷方式漏洞,也就是CVE-2017-8464漏洞,公告称此漏洞被国家背景的网络攻击所使用。该漏洞的原理同2010年美国和以色列入侵并破坏伊朗核设施的震网行动中所使用的穿透核设施隔离网络的漏洞(CVE-2010-2568)非常类似,对能源、交通、金融等基础设施隔离网极具杀伤力,所以CVE-2017-8464漏洞也被称为震网三代。 它可以很容易的被黑客利用来攻击基础设施、存放关键资料的核心隔离系统等。当存在漏洞的电脑被插上保存有漏洞文件的U盘时,不需要格外操作,漏洞攻击程序就可以执行并完全控制用户的电脑系统。  分析环境

采取双机调试的方法,被调试机使用Windows 7版本虚拟机,在硬件选项中添加串行端口,并命名为\.\pipe\com_1,在I/O模式中勾选轮询时主动放弃。调试机使用Windows 10版本物理机,在桌面创建windbg(x86)版本快捷方式,并在属性的目标后添加-b -k com:pipe,port=\.\pipe\com_1,resets=0。

poc采用网上已经有的test.lnk和a.dll文件,将a.dll文件放到C盘目录下,进行漏洞利用。(建议桌面只剩一个test.lnk,避免加载其它快捷方式干扰调试)。 617b79457cf673dfdfe9394b8188c342.png  总体调试 首先使用!process 0 0找到explorer.exe的PROCESS e68b31905b5047c446ff5f7e940a101c.png 断到指定进程环境下.process -i -r -p 883802e8` 再下断点bp kernel32!LoadLibraryW 键入g命令继续运行,在被调试机中刷新桌面,windbg断下,显示如下内容:
kernel32!LoadLibraryW:001b:765cf142 8bff      mov   edi,edi
接下来键入k查看栈回溯。 31b74993ca3d97ab389d09d835122be1.png 看到SHELL32!CShellLink::_LoadFromFile,猜测是从这个函数开始解析lnk文件的。使用lm v m shell32命令查看得到shell32.dll的在漏洞机中的路径: d09d84d88c33b4bf40e6d6560875ee74.png 然后就可以拿出来有漏洞的文件啦,我们接下来一边动态调试一边静态分析。  分步调试 首先在关键函数处下断点
bp SHELL32!CShellLink::_LoadFromStreambp shell32!CShellLink::_LoadIDListbp shell32!CShellLink::_DecodeSpecialFolderbp shell32!TranslateAliasWithEventbp shell32!ReparseRelativeIDListbp shell32!DisplayNameOfAsStringbp shell32!ReparseRelativeIDList+0xd5bp shell32!CControlPanelFolder::_GetTemporaryAppIdForAppletbp shell32!CControlPanelFolder::ParseDisplayNamebp shell32!CControlPanelFolder::_GetPidlFromAppletIdbp CControlPanelFolder::_GetAppletPathForTemporaryAppIdbp shell32!CPL_LoadCPLModule
首先是断到CShellLink::_LoadFromStream处,根据ida分析,我们可以知道它对lnk文件进行了一些必要的格式检查。 91007b5199950cbb5b23326541b6a3b2.png 接下来断到CShellLink::_LoadIDList,是把ItemID[0]+ItemID[1]+ItemID[2]加载到this->0n188,我们执行到该函数结束(gu)查看this->0n188处可以看到加载的东西(db poi(ebx+0n188))。 602925342a01a30fe6e03918df9ae838.png 接下来单步步过直到!CShellLink::_LoadFromStream+0x28读取extra_data数据,我们执行到此处查看this->0n228,可以看到将我们构造的extra_data数据加载进来(db poi(ebx+0n228))。 9b064bca4b247d6d209645d324aacccb.png CShellLink::_DecodeSpecialFolder 解析SpecialFolderDataBlock,在过程中会使用A000000B和A0000005判断是否是specialfolder,我们可以查看一下 使用db poi(esi+0E4h)查看specialfolder d7f87a5ad929b910b8fc11f048c3300f.png 然后会用 Specialfolder ID 和 the offset 0x28在IDList找Item ID。 在SHCloneSpecialIDList中使用Specialfolder ID 0x03  d esp+8 l1 0dd3dc660ad301e26904b14eece97512.png 函数返回的是一个指向Control Panel的ITEMIDList结构的指针。 TranslateAliasWithEvent(根据0x28找id) 第一个参数是this->0n188处就是刚才加载的IDList,第二个参数是指向一块存放 ItemID[0]和ItemID[1]的内存。 a51822e8ca82fdc11f4a99f194f0810e.png 161f1182bf9098c74eeb831d532e818b.png 在TranslateAliasWithEvent+0x86,然后调用ILFibChirld找到item[2]。 8422b919e13e7924390e01e4df2ac5b6.png  bp shell32!ReparseRelativeIDList  db ecx 381b01f16f67d8cbc5bfa57030c14362.png 使用偏移量找到C:\a.dll  bp shell32!DisplayNameOfAsString  db poi(esp+8),查看第二个参数 c9e9a12753e0ae3e49a1423c7758f52a.png 该函数使用SHBindToFolderIDListParent 给定以文件夹形式指定的Shell命名空间项目,以及相对于该文件夹的项目标识符列表,此函数绑定到命名空间项目的父项,并有选择地返回指向项目标识符列表的最终组件的指针。  bp shell32!CControlPanelFolder::_GetTemporaryAppIdForApplet 该函数把路径写进s_dsaTemporaryAppId。 一直返回到shell32!ReparseRelativeIDList+0xd5。完成对内存中前两项与恶意dll文件的绑定。  db poi(ebp-18) 3a55ee69a7487ab69ddc537b5bfbf49a.png  bp shell32!CControlPanelFolder::ParseDisplayName 该函数是调用动态对象的虚表函数来实现的,可以看出a.dll此时已经成为一个临时对象。 c0cb492deca3d92693ccff42464a14f4.png  bp CControlPanelFolder::_GetAppletPathForTemporaryAppId获取dll str 使用临时对象获取dll str 20b2b3122954076a18d23924e423d96e.png 执行完毕后  db esp-98c 4ed4e9c364e609b060e898e0c90c9dda.png 接着以此为参数调用shell32!CPL_LoadCPLModule函数 f1c014097180ec6a9afebf375cae5ed0.png 完成恶意dll文件的加载 a157cebf9fda1bb5754abf25f1363e5a.png参考资料 https://bbs.pediy.com/thread-248701.htm 20f84af8706eb5aa1eaacd43ff02ff0d.gif 戳“阅读原文”查看更多内容
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值