最近我发现了一些Windows设备受MS17-010漏洞的影响,其中一个设备引起了我的注意,因为我从没遇到过这种——一个Windows嵌入式操作系统。
由于它受到MS17-010的影响,我立即尝试了相关的Metasploit模块。但是没有成功,我只得到一个错误,说目标操作系统不支持。
甚至最新的MS17-010模块(exploit/windows/smb/ms17_010_psexec)也无效。
这很奇怪。也许MSF的辅助模块给了我一个假象,或者开发模块的作者忘记了包含对Windows嵌入式系统的支持。
为了验证目标是否真的易受攻击,我决定使用MS17-010的原始漏洞攻击。于是我启动了FuzzBunch,然后使用SMBTouch。结果表明,目标实际上是易受EternalBlue攻击的。
然后我使用了EternalBlue模块,结果是成功的,后门成功地安装在目标上。因此,我猜MSF利用模块的作者只是忘记添加对Windows嵌入式版本的支持。
由于后门已经安装,要完成利用并获得shell,最后需要做的事情就是使用DoublePulsar。首先,我生成了一个DLL格式的shell。
然后,我使用DoublePulsar将生成的DLL注入目标主机。但是,失败了,错误消息为[-] ERROR unrecognized OS string。我猜MSF模块是没问题的,但Windows嵌入式版本是不受支持的。
我决定更深入地挖掘并研究DoublePulsar。首先,我搜索了在尝试使用DoublePulsar时得到的错误消息。这个字符串是在0x0040376C的.text部分找到的。
为了更好地理解DoublePulsar的错误消息是如何产生的,我决定使用IDA的图形视图跟踪程序的流程。
从图形视图中可以看出,如果目标计算机正在运行Windows 7,它将走左边的路径,然后继续检测其结构是x86还是x64。如果目标不是Windows 7,它将采取正确的路径并执行其他OS检查。由于没有检查Windows Embedded,程序最终输出错误消息[-] ERROR unrecognized OS string。
通过进一步分析“Windows 7 OS Check”,我观察到我可以通过将指令jz short loc_403641修改为jnz short loc_403641来强制程序走左边的路径。
为此,我转到 Edit > Patch program > Change byte。
然后,我将值74(JZ的操作码)更改为75(JNZ的操作码)。
这是修改跳转指令后的样子。
然后我通过“File > Produce file > Create DIF file…”创建了一个dif文件。。
然后使用@stalkr_的脚本(https:/stalkr.net/file/ida/idadif.py)来修补修改过的exe文件。
然后将修改后的DoublePulsar-1.3.1.exe移回原来的位置。
使用修改后的DoublePulsar,我能够将生成的DLL注入目标主机。
并得到了一个SYSTEM shell。
审核人:yiwang 编辑:边边