標籤:

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:信息安全 |