HTML5离线缓存攻击测试(二)

经过昨天的测试,发现使用离线缓存的网站会被攻击。但是,不使用离线缓存的网站就真的不会受到这样的攻击么?

据我理解,按照标准当浏览器请求manifest文件时,若没有请求到,或者文件发生改变,应当不使用缓存,进行缓存更新的,然而实验的结果并不总是这样。

(很郁闷相同的操作为啥有时候结果不一样,不过大部分还是造成了离线缓存攻击的效果。)

首先,拿百度主页做实验,用修改HOST文件的方式将百度主页离线缓存为其他内容(这里就可以加入恶意代码),再改回正常,表示回到正常的网络环境,主要要关闭浏览器,不然刷新百度其实还是发请求到被劫持的IP,可能是浏览器缓存了DNS吧。再次请求时抓包如下图,发现请求appcache文件后,尽管百度返回了302的错误页,但是浏览器没有跳转,仍然保持了离线缓存的页面,实现了缓存中毒的效果。但是,百度也有https的版本,若访问https攻击实验就不会成功。

既然百度可以,那么支付宝的页面呢?由于支付宝是HTTPS,而小白我还不会搭建HTTPS……所以只用HTTP做了离线缓存攻击,当出现下面这页面时我惊呆了…安全软件在逗我么…

当回到正常环境时,用http访问支付宝页面会自动被302重定向到https的页面,浏览器不会使用缓存的页面。不知道使用https进行离线缓存攻击会不会成功。

除了百度和支付宝,还用网易的126.com做了实验。由于在请求appcache时会返回404 not found,浏览器更新了页面,没有使用缓存(貌似会使用缓存一段时间,没懂什么情况)。

个人认为,对于类似百度网站这样的服务器设置,会导致缓存攻击成功,感觉是浏览器实现时的一个bug。如果支付宝https能被离线缓存攻击,那么危害性还是很大的。

另外,当访问过https的一个域名时,浏览器firefox会默认访问https,而不能访问http,这可以在浏览器的站点设置那里删除记录。实验时特别注意dns缓存和浏览器本身缓存的影响。

posted @ 2015-05-13 17:26  ASCII0x03  阅读(330)  评论(0编辑  收藏  举报