余弦(@evilcos)
本文书写时间早于:2012-02-10
0x01. XSS获取明文密码的多种方式
我已经感受到Web潮流带来的巨大革新,尤其是最近HTML5越来越火。浏览器们在客户端瓜分着这个Web OS,只要是对用户体验好的功能,浏览器之间就会互相学习,然后去实现,但是实现总是存在一些差异,有些差异是用户体验上的,有些则可能带来安全问题。
这篇文章是想深入描述下浏览器记住用户密码这种机制带来的安全问题与实现上的一些差异性。黑客们如何通过技巧获取到浏览器保存的密码,明文。
先回到XSS本身上,XSS获取明文密码的方式有哪些?
1.通过DHTML钓鱼方式
比如document.write出一个登陆页面,或一个登录框。也就是目标网站的登录方式是怎样的,就通过DOM模拟出怎样的。用户很难区分同域内的钓鱼,如果再次输入密码登录时就悲剧了。
2.通过JavaScript hook住密码框
满足某个事件(如onsubmit/onblur/onchange等)就记录之。
3.通过JavaScript实现键盘记录器的功能
监听用户在表单里的击键事件,记录击键的值,有时候这个效果会非常不错。
上面这三个方法都是大家在用的,效果各有千秋,这次我要提一种新的方式:通过利用浏览器保存密码这个机制来达到获取明文密码的目的,效果显得更加直接。
0x02. 浏览器记住密码的机制
现在回到浏览器的这个机制上,最早是哪个浏览器实现的,我懒得去考证了,可能是IE。在用户登录的时候,浏览器会提示保存密码,可以在下面这个地址在线查看我测试的8个浏览器截图:
http://evilcos.me/lab/xss_pwd/(备用:下载该页面“xss_pwd.rar”,以便离线或原网址时效时浏览。)
注:这也是本文的demo地址,测试的浏览器有:
Chrome(v 16.0.912.75 m)
IE9
IE8
Firefox(v 9)
Opera(v 11.60)
Safari(v 5.1.2)
Maxthon(v 3.2.2.1000)
Sogou(v 3.0.0.3000)
保存密码是为了提高用户体验,省去了每次登录需要输密码的麻烦,在这个机制之前经常是通过身份认证的本地Cookie来实现的,也许是因为并不是所有网站都采用持久化Cookie,浏览器才开始选择了这样的方式。而且现代浏览器大多有一个机制:云同步,除了书签、个人偏好外,还可以同步浏览器记住的密码,使得用户在任意地方都可以同步自己的“习惯”。有的身份认证Cookie是绑定IP的,这样的话同步Cookie就不好使了。简而言之吧,密码这东西就是方便,可也太滥用了,滥用有风险,而且还来了个云同步,黑客兴奋了。
在浏览器记住密码机制之前大家应该都知道还有一个很火热的机制:表单自动填充!曾经出现的安全风险是:由于这个自动填充的值是跨域共享的,攻击者可以在自己的域放一个页面,用户的浏览器访问后,会自动填充这个页面的表单(比如Email、家庭地址、手机号等等,如果用户的浏览器记住过这些值的话),然后这个页面的JavaScript就可以获取到这些值了。这些值还好,攻击者并不一定很喜欢,可是明文密码就不一样了。
记住密码机制需要遵循同源策略,但是如果有XSS就可以忽略这个同源策略,注入JavaScript去得到这个明文密码:P
下面我以Chrome为例深入说明说明,攻击者通过这个机制是如何得到你的明文密码的。Opera与IE的机制相对来说是最安全的,而搜狗浏览器在这方面的安全性最差。
0x03. 获得Chrome记住的密码
先来看Chrome,demo地址:http://evilcos.me/lab/xss_pwd/。可以输入admin/1234567,然后LOGIN试试。浏览器弹出保存密码提示时,选择保存。重新载入这个demo地址,可以看到浏览器已经自动填充了密码。点击按钮“see ur pwd”会弹出你输入的密码明文。
实际上你查看页面源代码是看不到密码的,这个密码是浏览器判断页面加载后,发现表单中有密码项,就自动填充最近一次记录的用户名与密码,就像(或者说就是)一次DOM操作,动态填充。既然是DOM操作,那么在这之后我们控制JavaScript也来一次DOM操作,这次是读,将密码项里的value值读出来,是不是就得到了明文密码?对……是这样!
知道这个过程后,邪恶的想法诞生了……
这个机制遵循同源策略,那么如果在一个域内,任意页面存在XSS,就应该可以通过DOM动态创建一个包含一模一样的用户名与密码表单项的表单出来,然后等待浏览器自动填充密码后,再通过DOM操纵得到密码项里的值。
开始实验!
这个页面http://evilcos.me/lab/xss_pwd/的表单是这样:
浏览器是如何记住这个表单的,以确保唯一性?有几个关键值(不同浏览器有差异,不过影响不大):
1.为了遵循同源策略,需要域名:evilcos.me
2.需要一个
文章来源于lcx.cc:XSS Hack:获取浏览器记住的明文密码
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论