修補DoublePulsar打Win嵌入式機器
在我的一次工作中,我發現一些Windows設備受到MS17-010漏洞的影響。
其中一個設備引起了我的注意,因為它是我從未遇到過的東西 - Windows Embedded操作系統。

由于它容易受到MS17-010的影響,我立即嘗試了相關的Metasploit模塊。然而,它們都不起作用,我得到的只是一個錯誤,指出不支持目標操作系統。

即使是新的MS17-010模塊ms17_010_psexec也無法正常工作。

這很奇怪,也許MSF的輔助模塊給了我一個誤報,或者漏洞利用模塊的作者可能忘記包含對Windows Embedded的支持。

為了驗證目標是否確實容易受到攻擊,我決定使用MS17-010的原始漏洞。因此,我啟動了Fuzzbunch,然后使用了SMBTouch,結果表明,目標實際上是通過永恒之藍受到攻擊的。

然后我很快使用了EternalBlue模塊,結果成功了——后門成功安裝在目標上。所以我猜測MSF漏洞利用模塊的作者只是忘記添加對Windows Embedded版本的支持。

由于后門已經安裝,因此完成利用并獲得shell所需要做的最后一件事就是使用DoublePulsar。首先,我生成了DLL格式的shell。

然后我使用DoublePulsar將生成的DLL注入到目標主機。但是,它失敗并顯示錯誤消息[-] ERROR unrecognized OS string。
畢竟不支持Windows Embedded版本,我猜MSF模塊是正確的。

距離交戰結束還剩幾個小時,我決定深入挖掘并檢查DoublePulsar。
首先,我搜索了嘗試使用DoublePulsar時收到的錯誤消息,該字符串是在.text部分找到的0x0040376C。

為了更好地理解DoublePulsar如何最終出現該錯誤消息,我決定使用IDA的圖形視圖來跟蹤程序的流程。

從圖中可以看出,如果目標機器運行的是Windows 7,它將走左邊的路徑,然后繼續檢測其架構是x86還是x64。如果目標不是Windows 7,它將采用正確的路徑并執行其他操作系統檢查。由于沒有檢查Windows Embedded,程序最終輸出了錯誤消息[-] ERROR unrecognized OS string。

通過進一步分析“Windows 7 OS Check” ,我發現我可以通過修改指令來“強制”程序走左邊的路徑。jz short loc_403641jnz short loc_403641

為此,我轉到 Edit > Patch program > Change byte.

然后我將值74 ( JZ的操作碼)更改為75 ( JNZ的操作碼)。

這是修改跳轉指令后的樣子。

然后,我通過轉到 File > Produce file > Create DIF file… 創建了一個DIF文件。

然后使用@stalkr的腳本來修補修改后的exe文件。
https://stalkr.net/files/ida/idadif.py

然后將修改后的Doublepulsar-1.3.1.exe移回原來的位置。

使用修改后的DoublePulsar,我能夠將生成的DLL負載注入到目標主機。

并獲得了SYSTEM shell。
