首页
社区
课程
招聘
一个可大规模悄无声息窃取淘宝/支付宝账号与密码的漏洞 -(埋雷式攻击附带视频演示)
发表于: 2015-3-8 07:34 3764

一个可大规模悄无声息窃取淘宝/支付宝账号与密码的漏洞 -(埋雷式攻击附带视频演示)

2015-3-8 07:34
3764
新闻链接:fa3K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4N6G2L8%4W2#2L8W2)9J5k6h3!0J5k6#2)9J5c8X3u0#2k6%4y4Q4x3V1k6%4L8$3!0&6N6h3&6Q4x3X3b7J5x3o6p5H3i4K6u0V1x3o6f1I4y4U0p5#2
新闻时间:2014-04-07 16:22
   新闻正文:简要描述:
有些漏洞,如果只是从技术层面来说明问题,厂商似乎感觉不到它的危害。整个漏洞利用过程也录了个视频,奉献给普通网民,厂商努力修,我们网民自己也得增强安全意识,那些抱着“这么大公司不可能有大漏洞”之幻想的网民们该醒醒了。。
详细说明:
1. 此缺陷存在于淘宝网登录页面及支付宝登陆页面。

两个页面的FLASH文件分别为:

淘宝登录页:

5e4K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6S2j5$3A6K6N6r3u0Q4x3X3g2S2L8r3W2&6N6h3&6Q4x3X3g2U0L8$3#2Q4x3V1k6X3L8r3q4K6K9q4)9J5c8V1A6e0L8$3y4C8k6i4c8Q4x3X3g2K6N6$3j5`.

支付宝登陆页

985K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6S2j5$3A6K6i4K6u0W2j5h3I4A6P5i4g2F1i4K6u0W2j5$3!0E0i4K6u0r3k6X3I4S2M7$3S2Q4x3V1k6v1f1$3!0U0K9$3g2@1i4K6u0W2M7%4N6X3

2. 此漏洞已经被报告两次,并在第2次做出了修复。

WooYun: 一个flash的0day导致的淘宝网存储xss(可形成永久后门) 一个flash的0day导致的淘宝网存储xss(可形成永久后门)

WooYun: 一个flash的0day导致的淘宝网存储xss 【续集】 一个flash的0day导致的淘宝网存储xss 【续集】

但随后的不知哪次更新中,FLASH文件代码被再次改写,而改写后的代码,过滤上再次出现问题。(安全与开发没互动啊!!)

缺陷代码如下:

code 区域
private function getlso():String{

	var _local1:SharedObject = SharedObject.getLocal("kj");

	var _local2:RegExp = new RegExp("[\\({]");

	if (_local1.data.key == undefined){

		return ("");

	};

	if (_local2.test(_local1.data.key)){

		this.setlso("");

		return ("");

	};

	return (_local1.data.key);

}


可以看到,正则表达式 _local2 仅仅过滤了 ( 和 { ,而正确的过滤方法应该是过滤 \ ,这个我用我的小号在 WooYun: 一个flash的0day导致的淘宝网存储xss 【续集】 的修复建议中已经给出该修复建议。

那么为什么这里还是没过滤 \ 呢? 原因猜测可能有两种:

A. 响应漏洞的同学并没看到我的修复建议并转告开发同学。

B. 开发的同学,认为 [\\({] 是 \ , ( 和 } 的集合, 而实际上,RegExp方式创建正则表达式时,需要写成 [\\\\({] ,原因是:\在字符串里是转义符,在正则里也是转义符。

然后, ( 和 { 被过滤后,我们依然可以执行Javascript代码,例如以下代码:

code 区域
location.href="javascript:alert%28129";


3. 相比之前的帖子,neobytes同学以及我的小号,都未太过于强调此漏洞的危害,neobytes同学得到了8rank,而我的小号索要了8rank,漏洞响应的同学只给了我 5 rank 。。。

对于此,我只想重复我在漏洞简要描述中的那一句话:“有些漏洞,如果只是从技术层面来说明问题,厂商似乎感觉不到它的危害。”

4. 这一次,我要证明这个漏洞的危害有多大。 (由于淘宝和支付宝是一样的问题,这里我仅以支付宝做漏洞危害演示!)

5. 由于以上原因导致产生 FLASH XSS Rookit, 而该FLASH所在的页面是在 淘宝/支付宝的登录页面,换句话说,如果我们的XSS代码是可以监控并记录登录页面上的密码的。说的更直接点,就是利用该 Flash XSS Rookit 来劫持用户登录的表单。

这里我写了一个简单粗糙的代码,来劫持登录表单,劫持表单的代码的解读我就不说了,直接看演示页面:cbfK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4S2K6M7%4c8Q4x3X3g2K6K9h3&6S2j5i4m8H3i4K6u0W2j5$3!0E0i4K6u0r3N6r3q4G2j5X3q4G2i4K6g2X3P5s2y4K6i4K6g2X3x3U0l9I4y4q4)9#2k6U0u0Q4y4h3j5J5x3q4)9#2k6X3q4T1j5K6y4X3k6q4)9J5k6h3S2@1L8b7`.`.

我们打开演示页面,界面如下,很白痴的界面:


1.jpg

进度条很快就加载完了,这说明我们已经在电脑上种植好了flash xss rookit的代码。

接着,我们打开支付宝的首页: 738K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2S2L8r3W2H3j5i4W2Q4x3X3g2U0L8$3#2Q4x3V1k6Q4x3V1x3`. 输入帐号和密码

当我们离开密码框时,我们的rookit代码会将用户所输入的密码记录到全局的 ppp 变量中,如下图所示:

2.jpg

接着,应该是点击 【登录】按钮, 而该登录按钮的 点击事件 被我们所劫持,当用户点击登录时,

输入框中的用户名,以及存储在全局变量ppp中的密码将被发送至我们的接收页面。

由于登录页面是https协议,因此我们接受密码的页面也采用 https协议,这里使用的是GAE。

c03K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6B7M7$3k6A6L8r3f1J5x3o6p5J5i4K6u0W2j5i4m8H3M7%4m8G2N6q4)9J5k6h3y4G2L8g2)9J5c8Y4m8S2P5i4m8S2L8s2m8G2j5#2)9K6c8X3c8S2N6r3q4Q4x3@1c8Q4c8e0g2Q4b7U0S2Q4z5e0m8Q4c8e0g2Q4z5p5k6Q4b7U0N6Q4c8e0g2Q4z5e0u0Q4z5p5y4Q4c8e0g2Q4b7f1k6Q4z5o6k6Q4c8e0N6Q4b7e0m8Q4z5o6p5`.

如下图所示是被发送到我们接受也没的帐号与密码:

3.jpg

随后,登录按钮将会被脚本复原,执行它原本的正常登录功能。可以看到我们正常的登录成功,密码也被记录进入数据库中。

4.jpg

6. 以上是整个窃取密码的过程,为什么说这个漏洞危害大呢?它具有以下特点。

【危害的说明】 见漏洞证明部分

7. 上面我只是演示偷取了我自己的小号,接着我们要回到我们标题上的“大规模”。

当然,我不可能真实的去利用该漏洞偷取很多帐号和密码来证明它,这里只给出一些思路,

而这些思路,对于有心人来说,都是很容易实现的:

A. 入侵一些大流量的网站(或者很多个小流量的站),然后iframe隐蔽嵌入上面的漏洞利用页面。大量受害者访问页面后,电脑被种植flash xss rookit。 当受害者下次使用该电脑登录淘宝或支付宝时,帐号密码被发送给黑客。

B. 利用一些社交网站的XSS来嵌入漏洞利用页面,后面流程与A相同。

C. 可以利用一些看似很正常的页面,例如百度搜索结果中的一些第三方百度应用。

D. 如果是在利用代码中,再混杂一些其他网站的XSS来获取受害者信息,危害将会变得更大,简单的例子,QQ的XSS,获取到QQ帐号,而QQ号所使用密码可能与支付宝或淘宝密码相同。

8. 最后我自己变身为一个受害者,在虚拟机中,将整个受害过程录制成了视频:

注:视频中所使用的被插入恶意代码的网站域名 66dK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3S2S2L8K6b7#2y4W2)9J5k6h3y4G2L8b7`.`. 为虚构的假想网站,在本地环境搭建而成。其次,由于录制视频时,网速较慢,部分加载网页的延时部分被后期剪掉了。

在线视频:

清晰版视频下载: 7f8K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4y4@1j5i4c8A6j5#2)9J5k6i4N6G2L8%4W2#2L8W2)9J5k6h3!0J5k6#2)9J5c8X3k6A6L8r3g2K6i4K6u0r3N6r3q4G2j5X3q4G2P5s2y4K6i4K6u0W2N6$3#2$3
漏洞证明:
由于详细说明中已经给出具体的证明过程,这里强调的是该漏洞的一些特点:

A. 可以钓取用户的账户和密码信息,相比传统XSS窃取的个人信息更加重要。

B. 相比传统钓鱼,这种在支付宝和淘宝自己登录页面上的钓鱼,对于用户来说无法用认知来防御。

C. 窃取密码的过程隐蔽,用户难以察觉。

D. 窃取手段不会被目前的家用杀毒软件所察觉。

E. 此类XSS攻击,并不像传统XSS需要用户处于登录态。而是随时都可以进行攻击,从而在受害者电脑上种植rookit代码。因而十分易于用来做定向的攻击或者大规模的攻击。

F. 此类XSS攻击,可以长期存在于用户电脑中,持续时间长。

G. 此类XSS完全是跨协议的,即我们种植rookit使用的是http协议下的flash文件,而登录页面中是https协议下的flash文件。

H. 在chrome浏览器中,普通页面下种植的rookit,在隐身模式下登录支付宝一样会被窃取密码。

I. 支付宝的登录控件,并不能防止通过这种攻击所实施的密码窃取
修复方案:
1. 修复正则过滤 \ 的问题。

2. flash代码中的

code 区域
Security.allowDomain("*");


修改为

code 区域
Security.allowDomain("auth.alipay.com","login.taobao.com");


这样一来,就只有 auth.alipay.com 和 login.taobao.com 两个域可以调用flash中addCallback提供的函数接口了。当然这么写要避免 auth.alipay.com 和 login.taobao.com 的域下出现其它XSS漏洞。

综合1和2,可以彻底修复此漏洞。

支付宝网站中使用的FLASH文件不少,说不定其它位置也存在类似问题。

用户解决这种后门(flash)的办法是:

111.png

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回