64位系統下的Office後門利用
0x00 前言
在之前的文章《Office後門的實現思路》介紹了在Office軟體中植入後門的常用方法,但並不全面,缺少64位系統的測試。而對於64位操作系統,支持32位和64位兩個版本的office軟體,不同office版本的利用方法是否不同呢?本文將要給出答案。
0x01 簡介
本文將要介紹如下內容:
· 64位系統安裝64位Office軟體的利用方法
· 64位系統安裝32位Office軟體的利用方法
· 根據測試結果優化POC
0x02 64位系統安裝64位Office軟體的利用方法
測試系統: Win8 x64
開發工具:vs2012
註:
32位系統下安裝vs2012支持生成64位的dll
默認主要文件安裝目錄:C:Program FilesMicrosoft Office
1、Word WLL
32位dll,無法載入
64位dll,成功載入
2、Excel XLL
32位dll,無法載入
64位dll,成功載入
註:
添加導出函數xlAutoOpen的方法:
1、使用傳統的模塊定義文件 (.def)
新建dll工程,不選擇導出符號
如下圖
添加同名文件.def,內容如下:
EXPORTSxlAutoOpenn
如下圖
編譯成dll,使用IDA查看導出函數
顯示正常
如下圖
2、使用vs2012提供的便捷方法
新建dll工程,選擇導出符號
如下圖
設置導出函數為xlAutoOpen
如下圖
編譯成dll,使用IDA查看導出函數
如下圖
導出函數名發生變化,改變為?xlAutoOpen@@YAXXZ
Excel無法載入該dll,原因是無法識別該導出函數(函數名發生變化)
解決方法:
使用預處理指示符#pragma指定鏈接選項,修正導出函數名稱
添加一行代碼:
#pragma comment(linker, "/EXPORT:xlAutoOpen=?xlAutoOpen@@YAXXZ")
如下圖
再次使用IDA查看導出函數,顯示正常
如下圖
Excel成功載入該dll,修改成功
註:
已將兩種方法的vs工程上傳至github,地址如下:
3gstudent/Add-Dll-Exports
方法1對應DllExport(Def)
方法2對應DllExport(declspec)
3、Excel VBA add-ins
使用32位的模板即可
4、PowerPoint VBA add-ins
使用32位的模板即可
結論:
如果在64位系統安裝了64位的Office軟體,那麼Word WLL需要使用64位的calc.wll,Excel XLL需要使用64位的calc.xll
0x03 64位系統安裝32位Office軟體的利用方法
默認主要文件安裝目錄:C:Program Files (x86)Microsoft Office,存在重定向
註:
在目錄C:Program Files也會創建Office目錄,包含軟體版本
也就是說,原POC中判斷Microsoft Office版本的代碼不需要更改
註冊表位置HKEY_CURRENT_USERSoftwareMicrosoftOffice
並未被重定向至HKEY_CURRENT_USERSoftwareWow6432NodeMicrosoftOffice
更多關於32位程序在64位系統下的重定向細節可參考之前的文章《關於32位程序在64位系統下運行中需要注意的重定向問題》
1、Word WLL
32位dll,成功載入
64位dll,無法載入
同64位office的結果相反
2、Excel XLL
32位dll,成功載入
64位dll,無法載入
同64位office的結果相反
3、Excel VBA add-ins
使用32位的模板即可
4、PowerPoint VBA add-ins
使用32位的模板即可
結論:
在64位系統安裝32位Office軟體,同32位系統測試結果相同,POC無需修改
0x04 優化POC
綜合以上測試結論,為了使得POC支持64位系統,需要作如下修改:
判斷操作系統位數,如果是64位,並且安裝64位office軟體,方法Word WLL和Excel XLL需要使用64位的dll
代碼開發注意的細節(powershell代碼):
1、判斷操作系統位數
if ([Environment]::Is64BitOperatingSystem){ 64-bit}else{ 32-bit}n
2、判斷安裝office軟體版本
通過查看默認主要安裝路徑:
32位office: C:Program Files (x86)Microsoft Office
64位office: C:Program FilesMicrosoft Office
判斷路徑C:Program FilesMicrosoft Office是否包含文件夾MEDIA
如果包含,那麼為64位office
powershell代碼如下:
Try { dir C:Program FilesMicrosoft OfficeMEDIA Write-Host "Microsoft Office: 64-bit"}Catch { Write-Host "Microsoft Office: 32-bit"}n
結合POC腳本,變數$OfficePath表示設置的office安裝路徑,默認路徑為"C:Program FilesMicrosoft Office"+"Office*"
為獲取路徑C:Program FilesMicrosoft OfficeMEDIA,需要對變數$OfficePath進行字元串截取和拼接,具體代碼為:
$OfficeMainPath=$OfficePath.Substring(0,$OfficePath.LastIndexOf("")+1)+"MEDIA"n
此時,變數$OfficeMainPath代表路徑C:Program FilesMicrosoft OfficeMEDIA
3、判斷64位系統+64位office,釋放對應的64位dll(wll和xll)
依舊是通過變數保存作base64編碼後的64位wll和xll
將dll文件作base64編碼:
$fileContent = [System.IO.File]::ReadAllBytes(calcx64.wll)$fileContentEncoded = [System.Convert]::ToBase64String($fileContent)| set-content ("calc_x64wllbase64.txt") $fileContent = [System.IO.File]::ReadAllBytes(calcx64.xll)$fileContentEncoded = [System.Convert]::ToBase64String($fileContent)| set-content ("calc_x64xllbase64.txt")n
釋放時先做base64解密
$fileContentBytes = [System.Convert]::FromBase64String($fileContent)n
最終POC已在github更新,該POC能夠區分操作系統和office版本,當遇到64位系統安裝64位office的情況時,自動釋放64位的dll
POC地址如下:
3gstudent/Office-Persistence
0x05 小結
本文介紹了64位系統安裝不同版本office所對應的不同利用方法,分享了在優化POC時注意的細節,至此完成對該POC的開發,便於測試。
本文為 3gstudent 原創稿件,授權嘶吼獨家發布,未經許可禁止轉載,如若轉載,請聯繫嘶吼編輯 64位系統下的Office後門利用 更多內容請關注「嘶吼專業版」——Pro4hou
推薦閱讀:
TAG:信息安全 |