xss是什么?
cross site script:跨站脚本攻击
XSS的危害
xss payload
用以完成各种具体功能的恶意脚本
cookie劫持
拿到cookie就可以模拟登录
构造get post请求
可以是异步请求,img标签,或者iframe
XSS钓鱼
如模拟一个假的登录框,骗取用户登录。
识别用户的浏览器
用于做更精准的攻击
识别用户安装的软件
如检测ActiveX的classid是否存在
flash中有一个system.capabilites对象,可以得到用户电脑的信息
FF的插件信息,直接存在在dom对象中。可以轻松获得
css history hack
发现用户曾经访问过的网站 。
原理:利用style的visited属性,如果用户曾经访问过某个链接,那么颜色会不一样。
获取用户的真实IP地址
有时得到的是出口IP,或者代理服务器的IP。
可以通过Java Applet的接口获取客户端的IP
XSS worm 蠕虫
两个case: mystorm baidu
都是通过在css里添加XSS实现。
XSS的攻击技巧
利用字符编码
百度收藏的一个case
var redirectUrl = "\";alert(/XSS/);";
由于百度的页面是gbk编码,因些"%c1\"这两个字符组合在一起后,会成为一个unicode字符,在firefox下会认为这是一个字符,然后就把转义符号"\"给吃了。
如发送如下请求
就成功实施了xss攻击
使用base标签
window.name的妙用
window.name是一个神奇的东西,没有行列字符的限制,window对象是浏览器的窗体,而并非document对象。因为,它不受同源策略的限制。
apache head xss
有一个Exprect,服务器会不经过任何处理,直接写入到页面中。这样就被正常解析了。同时也也要要求head需要模拟。变得很鸡肋。
通过flash构造请求就很方便,不过目前flash已经修复,但是还是可以使用applet等第三方插件实现。
flash xss
所以一般是要禁止<embed> <object>等标签。
XSS的防御
HttpOnly
浏览器将禁止页面的Javascript访问带有HttpOnly属性的cookie.
可以只给某个cookie设置。
输入检查
白名单
输出检查
安全的函数
要注意不同场景下
HTML标签
HTML属性下
script标签
事件中
css中
地址中
innerHTML
处理富文本
使用htmlparse可以解析出html的
1. 事件严格禁止
2. 标签使用白名单
3. 尽可能禁止自定义css 与style
一个有意思的ie8的css跨域漏洞
<body> {}body{font-family: aaaa </body>
<style> @import url("http://www.a.com/test.html") <script> document.body.currentStyle.fontFamily // 这里可以读到了。