长亭百川云 - 文章详情

钓鱼网站可利用浏览器“自动填充”功能获取用户信息

Web安全与前端

60

2024-07-13

01/浏览器自动填充功能

昨天看到了一篇关于Chrome自动填充安全相关的文章。

文中提到:“自动填充是个非常方便的浏览器特性,不过该特性在 Chrome 上会存在一定的信息泄露的风险。Chrome 最近才修复了某个久负盛名漏洞。简单而言,黑客能够利用自动填充窃取你并不想提交给该网站的信息”。

效果如下图:

并提供了一段js来演示漏洞:

仅测试这段js,发现并不能复现此漏洞,但是这个思路引起了我的思考。

02/ 浏览器新特性--autocomplete

再次研究发现,html中要实现浏览器中的表单自动填充主要依靠于autocomplete属性。

起初autocomplete属性只支持on或off。比如下面代码:

上面代码开启了整个表单的autocomplete却对email关闭了autocomplete,我们在点击非email的其他字段即可打开自动填充功能:

但在email中不能展开自动填充功能:

后来HTML5标准加入了对autocomplete的支持,并且给autocomplete加入了更多的标示符,以保证让浏览器准确的知道哪些信息对应着表单里的哪些字段。

比如如下代码:

在autocomplete属性中写入了语义化的字符,比如name、street-address等。

通过这些标识,浏览器即可准确的把相应的信息填入到相应的表单中。

03/钓鱼网站可能会这么用

通过如上demo我们可以发现,当我们选择自动填充以后,chrome不仅会把当前表单字段填充到input中,也会把其他表单字段填充到input中。

那么如果写一些type为hidden的input标签,并且加上autocomplete属性,chrome是否会自动补上带有hidden属性的input标签的信息呢。

我们使用如下代码:

将第一个姓名字段设置为hidden,然后使用自动填充,并且提交表单,查看请求包:

发现type属性为hidden的表单并没有获取到,但其他非hidden的信息都拿到了。

既然type设置成hidden浏览器不会发送数据,隐藏浏览器元素还有很多方法,比如:

在表单外层放一个div,让整个div,display:none。

然而也是不行的:

看来chrome已经在这里做了足够防护。

其实在文章最初提供的js代码也是使用这样的方式来进行攻击的。

现在已经被修复了。那么还有别的办法吗?

04/可利用的方式

让浏览器认识且没有做防护,并且让用户看不见这个表单的方法有很多,比如如下方法:

效果如下:

bingo!!

这种方式浏览器并没有防护,其实让用户看不到表单的方式还有很多,还比如设置成透明等等……

由此想到,如果钓鱼网站利用了这个功能,在用户不知情的情况下,拿到用户浏览器存储的其他信息,会造成很可怕的后果。

在线测试地址:http://www.hackersb.cn/poc/autofill/

05/如何防护

既然这个功能是浏览器的功能,在浏览器还未完全将不可见的表单字段设置为不可填充之前,我们只好通过设置,来避免使用这个功能。

通过打开chrome浏览器的设置--高级设置,然后点掉下图中的复选框,关闭自动填充功能。

06/参考资料

  1. HTML标准 - 表单自动填充

  2. SegmentFault

注:本文原创,转载请通过本公众号联系作者。

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2