本文講的是<b>msdtc後門的實作思路</b>,Shadow Force曾經在域環境中使用過的一個後門,利用MSDTC服務加載dll,實作自啟動,并繞過Autoruns對啟動項的檢測。本文将要對其進行測試,介紹更多利用技巧,分析防禦方法。
0x01 簡介
本文将要介紹以下内容:
· MSDTC簡介
· 後門思路
· 後門驗證
· 更多測試和利用方法
· 檢測防禦
0x02 MSDTC簡介
MSDTC:
· 對應服務MSDTC,全稱Distributed Transaction Coordinator,Windows系統預設啟動該服務
· 對應程序msdtc.exe,位于%windir%system32
· msdtc.exe是微軟分布式傳輸協調程式,該程序調用系統Microsoft Personal Web Server和Microsoft SQL Server
0x03 後門思路
文中介紹的思路如下:
當計算機加入域中,MSDTC服務啟動時,會搜尋系統資料庫HKEY_LOCAL_MACHINESOFTWAREMicrosoftMSDTCMTxOCI
如下圖

分别加載3個dll:oci.dll,SQLLib80.dll,xa80.dll
然而特别的是,Windows系統預設不包含oci.dll
也就是說,将payload.dll重名為oci.dll并儲存在%windir%system32下
域中的計算機啟動服務MSDTC時就會加載該dll,實作代碼執行
0x04 後門驗證
測試系統: Win7 x64
搭建域環境,如下圖
使用Procmon監控msdtc的啟動過程,篩選程序msdtc.exe,檢視檔案操作,如下圖
msdtc.exe确實會嘗試加載oci.dll,并且由于系統預設不存在oci.dll,導緻加載失敗
使用64位的測試dll,下載下傳位址如下:
https://github.com/3gstudent/test/blob/master/calc_x64.dll
将其儲存在%windir%system32下
結束程序msdtc.exe,指令行參數如下:
等待msdtc.exe重新啟動
等待一段時間,mstdc.exe重新啟動,成功加載oci.dll,如下圖
calc.exe以system權限啟動
經實際測試,該方法偶爾會出現bug,通過taskkill結束程序後,msdtc.exe并不會重新啟動
解決方法:
重新啟動服務MSDTC就好,指令行參數如下:
0x05 更多測試
1、測試32位系統
32位系統換用32位dll就好,下載下傳位址如下:
https://github.com/3gstudent/test/blob/master/calc.dll
2、測試64位系統
64位系統,雖然SysWOW64檔案夾下也包含32位的msdtc.exe,但是MSDTC服務隻啟動64位的msdtc.exe
是以,不支援32位oci.dll的加載
3、通用測試
經實際測試,MSDTC服務不是域環境特有,工作組環境下預設也會啟動MSDTC服務
也就是說,該利用方法不僅适用于域環境,工作組環境也同樣适用
4、以管理者權限加載oci.dll(降級啟動)
上述方法會以system權限加載oci.dll,提供一個以管理者權限加載oci.dll(降級啟動)的方法:
管理者權限cmd執行:
啟動的calc.exe為high權限,如下圖
注:
關于為什麼要降級及降級的更多實作方式可參照文章
《滲透技巧——程式的降級啟動》
0x06 檢測防禦
檢測:
檢測%windir%system32是否包含可疑oci.dll
防禦:
對于普通使用者主機,建議禁用服務MSDTC
0x07 小結
本文介紹了MSDTC的相關利用技巧,不僅能用作後門,同樣可用于程式的降級啟動。
原文釋出時間為:2017年8月18日
本文作者:3gstudent
本文來自雲栖社群合作夥伴嘶吼,了解相關資訊可以關注嘶吼網站。
<a href="http://www.4hou.com/system/6890.html" target="_blank">原文連結</a>