当然,或许你会说这只是设计缺陷。若是直接嵌入 HTTPS 登录页的 iframe 框架,那就会因同源策略而无法被 XSS 控制了。
这样的改进确实能提高一些安全性,但也只是略微的。既然我们能控制主页面,里面显示什么内容完全可以由 XSS 说了算。不论什么登录框、框架页,甚至安全插件,我们都可以将其删除,用看起来完全相同的文本框代替。得到账号后,通过后台反向代理实现登录,然后通知前端脚本伪造一个登录成功的界面。
所以,HTTPS 被用在 HTTP 页面里,意义就大幅下降了。 和『缓存投毒』配合出击
在流量劫持第二篇里提到『HTTP 缓存投毒』这一概念,只要流量暂时性的被劫持,都可导致缓存长期感染。但这种攻击有个前提,必须事先找到站点下较稳定的脚本资源,做投毒的对象。 传统登录
在传统的登录模式里,缓存投毒非常难以利用: HTTPS 资源显然无法被感染。
而使用 HTTPS 向下转型的方案,也会因为离开劫持环境,而无法访问中间人的 HTTP 版登陆页面,导致缓存失效;或者这个真实的 HTTP 版的登录页面根本就不接受你的本地缓存,直接重定向到正常的 HTTPS 页面。
因此只有在主页面上,修改链接地址,让用户跳转到钓鱼网站去登录,才能勉强利用。 浮层登录
制作一个精良的浮层登录框,需要不少的界面代码,所以经常引用 jQuery 这类通用脚本库。而这些脚本往往是长久不会修改的,因此是缓存投毒的绝好原料。 所以,浮层登录框的存在,让『缓存投毒』有了绝佳的用武之地。
在之前的文章 WiFi流量劫持 —— JS脚本缓存投毒,演示了如何利用 www.163.com 下的某个长缓存脚本进行投毒,最终利用网易的浮层登录框获取账号。尽管网易也使用 HTTPS 传输账号数据,但在流量攻击面前不堪一击。
尽管这种登录模式风险重重,但最近百度也升级成浮层登录框,并且还是所有产品。所以,我们再次尝试那套的古老方法,看看在如今是否仍能发起攻击。 我们选几个最常用的产品线,进行一次缓存扫描:
果然,每个产品线里都有长期未修改、并且缓存很久的脚本库。
接着开启我们的钓鱼热点,让前来连接的用户,访问任何一个页面都能中毒。 为了让钓鱼热点更隐蔽,这次我们不再使用路由器,而是利用报废的安卓手机(下一篇文章详细讲解如何实现)。
为了不影响附近办公,本文就不演示同名热点钓鱼了,所以随便取了个名字。 接着让『受害者』来连一下我们的热点:
之前正好开着网页,所以很快收到了 HTTP 请求。我们在任何网页里注入 XSS,进行缓存投毒。
(由于原理和之前讲一样,所以这里就省略步骤了)
然后重启电脑,连上正常的 WiFi(模拟用户回到安全的场合)。 打开 tiebai.http://www.wodefanwen.com/,一切正常。
开始登录了。。。
看看这种浮层登录框,能否躲避我们的从沉睡中唤起的 XSS 脚本: