Xss抓浏览器保存的明文密码
优采云 发布时间: 2022-05-12 11:38Xss抓浏览器保存的明文密码
0x00 前言众所周知,挖src时xss是鄙视链最底端的漏洞,通常就是一个中危+50积分打发了事。这一点我很不理解,xss漏洞在我心里地位很高,因为这是常见web漏洞中唯一能打到个人机的漏洞(xss水坑,成功率很高)。
在我平时的工作中,可以说项目的最终目标就是找一个xss。比如发现一个sql注入,首先看能不能堆叠注入update插一个script标签进去。哪怕getshell了,第一件事也是定位前端源码插script。
不仅如此,在其他方面xss的表现也很全能:可以进后台拖数据、抓端口、抓明文密码便于后续渗透、打客户端所在的内网资产等等。
有xss就意味着项目基本结束,而其他漏洞都做不到这一点(即使getshell了也可能没有权限改前端源码,不如有一个xss)。仅凭一个漏洞就能做到这么多事情,我认为xss在web领域是当之无愧的漏洞之王。
好了,关于xss就先吹到这里,今天我要分享一个用xss抓明文密码的方案——获取浏览器保存的明文密码。
0x01原理本文参考自余弦大牛几年前的文章《XSS攻击:获取浏览器记住的明文密码》。时过境迁,其中方案实现的部分细节已经有所改动,但核心原理是一样的。
原理就是利用浏览器记住密码和表单自动填充的机制,只要密码被填充到表单里了,xss就有办法能获取表单的值,也就是明文密码。
而浏览器自动填充的机制并没有那么安全,只要浏览器认为你用xss创建的表单是一个登录框,那它就会把之前保存的账密填进去,并不会进一步确认是不是同一个框,十分弱智。
虽然距离余弦大牛公开文章也有几年了,各浏览器也做了一些防护措施,但仍没能从根本上解决问题,这套方案很大程度上还是有用武之地的。
小黑之前也写过一篇文章是用js代码获取明文密码的——《》,新方案和旧方案没有高低之分,只是适用场景不同。两个方案的区别点如下:
旧方案:js代码必须插在和登录框同一个页面。
新方案:js代码不需要插在登录框,只要是和登录框同域的页面都可以抓到(部分浏览器甚至可以跨域)。但是用户必须已经用浏览器记住密码。且大部分浏览器要求https的网站才会自动填充。
0x02 xss平台代码xss的利用方式很多都依靠xss平台,因为种种原因考虑,这套方案在xss平台上的代码我就不放出来了,只在文章里说一下代码的流程原理。
本代码根据经典xss平台默认模块《获取浏览器记住的明文密码》 改编。流程如下:
(1)生成一个body标签对,避免页面没有body标签的尴尬情况。(表单必须在body里才会被自动填充)
(2)创建表单,设置样式为隐藏。
(避免被人眼发现)(3)给表单加两个输入框,分别设置type属性为text和password。(经过实测,只要这样设置好了type,浏览器就会认为这个表单是一个登录框了)(4)*敏*感*词*html的点击事件,事件触发后发送表单数据到xss平台。(部分浏览器做的防御措施,只有页面被点一下之后才是真正的自动填充,且必须是真点,js代码主动调用的点击事件不算数)
没了,就这么简单。总体代码量不大,如果大家不会写js代码,可以去给前端妹子买杯奶茶求帮写。
0x03 各浏览器的差异这套方案本质上是利用了浏览器的逻辑漏洞,所以在不同浏览器上使用会有所差异,我这里测试了四款浏览器的最新版本,在这里分享一下:
【谷歌浏览器】(1)只有https或127的站点会自动填充(2)需要点一下才能传输数据(3)无视autocomplete(4)不能跨域(5)不安全的https不会提示保存密码,但之前若保存过能否自动填充没有找到环境测试(6)记住密码提示明显;访问过https以后就不能用http访问了,会自动跳https,需要清除缓存的图片和文件才可以;
【搜狗浏览器】(1)http和https都会自动填充(2)需要点一下才能传输数据(3)无视autocomplete(4)可以跨域(5)不安全的https会提示保存密码,可以自动填充(6)记住密码提示不明显;访问过https以后就不能用http访问了,会自动跳https,需要清除缓存的图片和文件才可以;
【火狐浏览器】(1)只有https或127的站点会自动填充(2)不需要点击就能传输数据(3)无视autocomplete(4)不能跨域(5)不安全的https会提示保存密码,可以自动填充(6)记住密码提示明显;似乎没有https强制跳http的智障问题
【edge浏览器】(1)只有https或127的站点会自动填充(2)需要点一下才能传输数据(3)无视autocomplete(4)不能跨域(5)不安全的https不会提示保存密码,但之前若保存过能否自动填充没有找到环境测试(6)记住密码提示明显;似乎没有https强制跳http的智障问题
大家在项目中遇到没有测试过的浏览器也可以自行测试一下,测试要点如下:
【测试指南】(1)自动填充有没有什么条件(如https)(2)需不需要点一下才能获取(一般跳转到页面时点的一下也算)(3)autocomplete(4)测试能不能跨域抓(5)不安全的https能否自动填充(6)其他
当然也可以委托我帮忙测试,不过要收费哈哈哈。
0x04 后记
VX公众号:《小黑的安全笔记》没什么啦,最近好多公众号都在发新年总结,小黑的就留到农历新年再写吧。
打游戏去啦,拜拜。
END.
喵,点个赞再走吧~