2012年(272)
分类: 网络与安全
2012-06-15 15:57:54
这两天hi群里在讨论关于csrf实现条件的问题,茄子指出了在IE环境下,csrf只是针对session cookie有效,而本地保存的stored cookie在变成当前IE的session
cookie前,跨域提交是会被IE阻断的。
通俗来讲就是如果浏览器进程中没有缓存过第三方站点,没访问过,那么使用img/ iframe 标签等跨域访问第三方站点是会被阻断发送cookie的。 这时候的CSRF就会仅仅只是get或者post请求,而不会发送cookie,那么很多需要 验证的提交都会失败。
实际上这里是浏览器的一个cookie安全机制,不光是img 、 iframe等标签,直接 跨域 post或者 get都可能出现这种问题 (使用session cookie和 stored cookie的区别)。
我以前做的一个xss测试, xss成功了3000多次,但 csrf 的一个跨子域的请求却只成功了 100多次, 当时总找不到原因,以为是payload稳定性的问题,现在想来应该就是这个跨域提交被阻断cookie的原因了。
那么根据设想,为了提高csrf的成功率,我们可以在xss后使用一次 window.open(),让用户开个小窗先访问下需要csrf的域,刷出来 一个session cookie,然后就可以csrf了。 不过这个想法还需要测试,而且也不够隐蔽。
PS: Firefox不存在这种阻断cookie的机制
茄子的tips:
http://xss.betaslife.com/blog/?p=24