[2022HWS硬件安全冬令营 X DASCTF Jan][MISC] badPDF

[MISC] badPDF


flag{e27d3de27d3de27d3d7d3de27dde27d3}

本题主要考了misc里的综合跟踪取证能力。

  1. 拿到题目,首先注意到文件类型是快捷方式,打开之后平平无奇是一个pdf界面,讲的是2020年的新冠疫情。
    刚开始我也被这玩意迷惑了在这里面找flag,但是我看到这个文档的命名不太符合ctf出题人的风格,因此我觉得而这个应该是一个障眼法。接下来的操作其实的思路最早来源于Procmon64的提示,运行此快捷方式时使用了Procmon64对行为进行了跟踪,发现了可疑的msoia.exe程序。这才开始上道

    image

    由于看到文件的类型,因此可以断定这个pdf不是真实的,是一种障眼法。由于.lnk文件会导致使用记事本打开直接跳转到对应的应用程序(这里是cmd.exe),因此先将拓展名改为._lnk,之后用notepad打开之后(似乎notepad++太智能了还是跳转到cmd去了)提取关键段落:

    image

    由于题目在操作上做了手脚,所以这里看到的操作命令行和

    image

    这种通过资源管理器看到的有很大的差别。

  2. 提取操作命令行原文为

    C:\Windows\System32\cmd.exe  ?/ c   c o p y   " 2 0 2 0 0 3 0 8 - s i t r e p - 4 8 - c o v i d - 1 9 . p d f . l n k "   % t m p % \ \ g 4 Z o k y u m B B 2 g D n . t m p   / y & f o r   / r   C : \ \ W i n d o w s \ \ S y s t e m 3 2 \ \   % i   i n   ( * e r t u * . e x e )   d o   c o p y   % i   % t m p % \ \ m s o i a . e x e   / y & f i n d s t r . e x e   " T V N D R g A A A A "   % t m p % \ \ g 4 Z o k y u m B B 2 g D n . t m p > % t m p % \ \ c S i 1 r 0 u y w D N v D u . t m p & % t m p % \ \ m s o i a . e x e   - d e c o d e   % t m p % \ \ c S i 1 r 0 u y w D N v D u . t m p   % t m p % \ \ o G h P G U D C 0 3 t U R V . t m p & e x p a n d   % t m p % \ \ o G h P G U D C 0 3 t U R V . t m p   - F : *   % t m p %   & w s c r i p t   % t m p % \ \ 9 s O X N 6 L t f 0 a f e 7 . j s  . p d f
    

    适当去除空格、格式化得到

    C:\Windows\System32\cmd.exe ?/c copy "20200308-sitrep-48-covid-19.pdf.lnk" %tmp%\\g4ZokyumBB2gDn.tmp /y&
    for /r C:\\Windows\\System32\\ %i in (*ertu*.exe) do copy %i %tmp%\\msoia.exe /y&
    findstr.exe "TVNDRgAAAA" %tmp%\\g4ZokyumBB2gDn.tmp>%tmp%\\cSi1r0uywDNvDu.tmp&
    %tmp%\\msoia.exe -decode %tmp%\\cSi1r0uywDNvDu.tmp %tmp%\\oGhPGUDC03tURV.tmp&
    expand %tmp%\\oGhPGUDC03tURV.tmp -F:* %tmp% &
    wscript %tmp%\\9sOXN6Ltf0afe7.js .pdf
    

    根据batch的知识,上面的指令可以拆做几条:

    • copy "20200308-sitrep-48-covid-19.pdf.lnk" %tmp%\\g4ZokyumBB2gDn.tmp /y
      

      此指令将自身(注意这里的“自身”指的是lnk****)拷贝到临时文件夹下备用。其中的/y参数代表不询问是否覆盖。

    • for /r C:\\Windows\\System32\\ %i in (*ertu*.exe) do copy %i %tmp%\\msoia.exe /y
      

      这段指令看上去像是一个遍历指令,但是在System32下满足格式*ertu*.exe的只有一个程序:

      image

      Certutil.exe是一个命令行程序,作为证书服务的一部分安装。 可以使用 certutil.exe 来转储和显示证书颁发机构 (CA) 配置信息、配置证书服务、备份和还原 CA 组件,以及验证证书、密钥对和证书链。

      如果 certutil 在没有其他参数的情况下在证书颁发机构中运行,则会显示当前的证书颁发机构配置。 如果 certutil 在非证书颁发机构上运行,则该命令默认运行 certutil [-dump] 命令。

      这里将其复制到临时文件夹根目录备用

    • findstr.exe "TVNDRgAAAA" %tmp%\\g4ZokyumBB2gDn.tmp>%tmp%\\cSi1r0uywDNvDu.tmp
      

      从复制过去的快捷方式中查找字段TVNDRgAAAA并且保留到新文件cSi1r0uywDNvDu.tmp之内。

      我们不太清楚这个指令的执行效果,因此可以使用辅助指令:

      image

      这里表明我们前面的重命名操作丢失了一些信息。这里使用notepad打开之后就可以看到在原来的所谓“快捷方式”中藏有大量的未知的base64字符。这些字符被拷贝到新的文件中,新文件像这样:

      image

    • tmp%\\msoia.exe -decode %tmp%\\cSi1r0uywDNvDu.tmp %tmp%\\oGhPGUDC03tURV.tmp
      

      亦即使用证书发行程序解释上述编码,存储到新的文件中。我们使用对应的辅助指令也可以看到新文件长这样:

      image

      根据文件签名:4D 53 43 46可以推断这是一个压缩文件。

    • expand %tmp%\\oGhPGUDC03tURV.tmp -F:* %tmp%
      

      这行指令将其解压为三个文件。如图

      image

    • script %tmp%\\9sOXN6Ltf0afe7.js
      

      最后执行这个js脚本。接下来逆向这个脚本:

  3. 打开脚本之后发现其实就是cmd套壳。其指令为:

    var e7926b8de13327f8e703624e = new ActiveXObject("WScript.Shell");e7926b8de13327f8e703624e.Run ("cmd /c mkdir %tmp%\\cscript.exe&for /r C:\\Windows\\System32\\ %m in (cscr*.exe) do copy %m %tmp%\\cscript.exe\\msproof.exe /y&move /Y %tmp%\\cSi1r0uywDNvDu.tmp %tmp%\\cscript.exe\\WsmPty.xsl&%tmp%\\cscript.exe\\msproof.exe //nologo %windir%\\System32\\winrm.vbs get wmicimv2/Win32_Process?Handle=4 -format:pretty&del \"%tmp%\\cscript.exe\\WsmPty.xsl\" /f /q&\"%tmp%\\20200308-sitrep-48-covid-19.pdf\"",0);
    

    关键指令为:

    copy C:\Windows\System32\cscript.exe C:\Users\Jerry\AppData\Local\Temp\\cscript.exe\\msproof.exe /y  &
    move /Y C:\Users\Jerry\AppData\Local\Temp\\cSi1r0uywDNvDu.tmp C:\Users\Jerry\AppData\Local\Temp\\cscript.exe\\WsmPty.xsl  &
    C:\Users\Jerry\AppData\Local\Temp\\cscript.exe\\msproof.exe //nologo C:\WINDOWS\\System32\\winrm.vbs get wmicimv2/Win32_Process?Handle=4 -format:pretty  &
    del \"C:\Users\Jerry\AppData\Local\Temp\\cscript.exe\\WsmPty.xsl\" /f /q  &
    \"C:\Users\Jerry\AppData\Local\Temp\\20200308-sitrep-48-covid-19.pdf\"
    

    像刚才一样,我们也可以逐行读取上述这些指令的意思和执行结果, 在这里留给有能力的读者做练习。这段代码的大意就是生成我们看到的pdf障眼法。但是注意到这里只使用了两个文件。又一个落单了。那么继续分析落单的cSi1r0uywDNvDu.tmp

  4. 使用notepad打开这个文件(记事本立大功)

    <?xml version='1.0'?>
    <stylesheet
    xmlns="http://www.w3.org/1999/XSL/Transform" xmlns:ms="urn:schemas-microsoft-com:xslt"
    xmlns:user="placeholder"
    version="1.0">
    <output method="text"/>
     <ms:script implements-prefix="user" language="VBScript">
     <![CDATA[
     rBOH7OLTCVxzkH=HrtvBsRh3gNUbe("676d60667a64333665326564333665326564333665326536653265643336656564333665327c"):execute(rBOH7OLTCVxzkH):function HrtvBsRh3gNUbe(bhhz6HalbOkrki):for rBOH7OLTCVxzkH=1 to len(bhhz6HalbOkrki)step 2:HrtvBsRh3gNUbe=HrtvBsRh3gNUbe&chr(asc(chr("&h"&mid(bhhz6HalbOkrki,rBOH7OLTCVxzkH,2)))xor 1):function :end function:
     ]]> </ms:script>
    </stylesheet>
    

    看到了这里的CDATA

    所有 XML 文档中的文本均会被解析器解析。

    只有 CDATA 区段(CDATA section)中的文本会被解析器忽略。

    那么这段代码可能执行了新的事。观察其中function , next在尾部等特征,猜测这是一个vbs程序。

  5. 稍加修改,符合vbs的缩进习惯即可。
    最终的程序为:

    Sub test()
    code = fun("676d60667a64333665326564333665326564333665326536653265643336656564333665327c")
    MsgBox (code)
    'Execute (code)
    End Sub
    Function fun(arg)
        For i = 1 To Len(arg) Step 2
            fun = fun & Chr(Asc(Chr("&h" & Mid(arg, i, 2))) Xor 1)
        Next
    End Function
    
    test()
    

    将上述代码复制到一个新建的vbs文件里,使用Windows在线解析或者使用vba解析得到flag:

    image

    image

posted @ 2022-01-25 00:07  二氢茉莉酮酸甲酯  阅读(308)  评论(0编辑  收藏  举报