xss绕过

1. 利用html标签的属性值

利用场景:标签支持JavaScript:code伪协议
对应防御:过滤JavaScript关键字

<iframe src=javascript:alert(1)>
<a href=javascript:alert(1)> 文本</a>
" ><svg x="" Onclick=alert(1)>

注释:
#
<!-- -->
//

Ps(
这个特殊的协议类型声明了url的主体时任意的JavaScript代码,有JavaScript解释器运行

2. 利用空字符

常用字符:空格 回车 tab键
应用场景:对JavaScript关键字进行了过滤

3. 利用事件

事件:用户或浏览器自身执行的某种动作
利用方法 <onlick=“alert(1)”>

onclick触发
onclick是鼠标点击事件。我们可以像如下这样在元素中定义 JavaScript 事件:


这个 JavaScript 代码当有人点击它后就会被执行,同时还有其他事件如页面加载或移动鼠标都可以触发这些事件。绝大部分的时间都被过滤器所移除了,但是依旧还有少量事件没有被过滤,例如,onmouseenter 事件:
当用户鼠标移动到 div 上时就会触发我们的代码。
另一个绕过的办法就是在属性和= 之间插入一个空格:

4. 大小写混合 

5. 引号的使用

6. 利用伪协议

7. 编码:

html进制编码
JavaScript编码
url编码
base64编码

编码绕过
有的时候,服务器往往会对代码中的关键字(如alert)进行过滤,这个时候我们可以尝试将关键字进行编码后再插入,不过直接显示编码是不能被浏览器执行的,我们可以用另一个语句eval()来实现,eval()会将编码过的语句解码后再执行。
JavaScript是很灵活的语言,可以使用十六进制、Unicode、HTML等进行编码,以下属性可以被编码。(支持HTML, Octal, Decimal,Hexadecimal, and Unicode)
href=
action=
formaction=
location=
on*=
name=
background=
poster=
src=
code=
data= //只支持base64

8. 黑名单绕过

在真实环境中,’ 、" 、( 、) 都是属于黑名单中的成员,如果遇到以上四个字符被过滤的情况,那么我们就需要使用其他字符去代替,或者编码的方式去绕过。如:
1.不使用 " <input onfocus=alert(‘1’) autofocus/>
2.不使用 ’
3.不使用 ( )
4.不使用 ’ " ( ) <input onfocus=alert1 autofocus/>
5.使用html实体编码绕过
6.使用html实体编码绕过变形

过滤了JavaScript
Java_Script
用编码,tab,空格,双写,不用它用事件

语句:

<script>alert(1)</script>
' onclick='alert(1)

猜你喜欢

转载自blog.csdn.net/weixin_43271438/article/details/82902785