看我如何在短时间内对Shopify五万多个子域名进行劫持

今天我要分享的是5万多个Shopify平台子域名劫持漏洞的发现过程。首先,我要说明的是,该漏洞不仅只存在于Shopify平台系统,还存在其它几个云服务平台系统中。在过去几周时间里,我们陆续联系了存在漏洞的各家厂商,Shopify平台的快速反应、认识透彻和持续跟进的处置能力给我们留下了深刻印象。

Shopify 是一个面向中小型企业的多渠道电商服务平台,它集建站、销售和宣传服务,帮助用户通过线上网店或社交媒体随时随地销售产品,Shopify 为全球 60 多万商家提供了线上服务,在高峰期每秒处理 8 万个请求。

Shopify的子域名劫持漏洞

在Shopify的域名测试中,如果遇到以下两种网页响应,那么目标网站就可能存在子域名劫持漏洞:

那接下来,如何来确定是否真的存在漏洞呢?

首先,需要来看两种DNS记录信息:

一种是网页应用名称映射,也就是myshopname.myshopify.com的域名别名记录; 另外就是看DNS映射,也就是shops.myshopify.com的域名别名记录。

当然,还有其它方法,我们在此不作详解。我们就来认真看看以上两种DNS记录信息。

网页应用名称映射

该例子中,我们可以为指向buckhacker.shopify.com的shop.buckhacker.com映射设置一条别名记录(CNAME)。以下是对shop.buckhacker.com的nslookup信息:

如果在Shopify记录中,商店名称(像这里的buckhacker)未被注册认领(claim),那么,我们可以注册认领它,然后进行子域名劫持测试。那如何知道某个商店名称是否被注册认领(claim)了呢?

在Shopify账号注册阶段,需要强制填写你的商店名称(Store Name),填写之后,那么Shopify将会把这个Store Name分配为其免费的二级域名地址,如你填写的Store Name是bag,其二级域名就是http://bag.myshopify.com。在这里,如果你填写的商店名称是被别人注册过的,那么,系统会有提示。就像以下两种不可用和可用的商店名称注册状态:

在该过程中,如果我们开启了Burp抓包的话,可以看到一个发往 REST API的请求,以下两种操作分别对应了两种响应信息:

1 Unavailable ({“status”:”unavailable”,”message”:null,”host”:”buckhacker.myshopify.com”}) 2 Available ({“status”:”available”,”message”:null,”host”:”buckhacker2.myshopify.com”})

这种方式,能简单测试某个商店名称是否可注册。为此,可以写个小脚本来跑跑,我们的脚本可点此下载。

该场景中,我们以之前我们注册的商店名buckhacker来做演示。如果这个过程中,我们发现某个商店名称是可继续注册的,那么,我们只需在Shopify管理面板中去连接它即可。也就是在如下管理后台中的 “Online Store” 下点击 “Domains”:

然后点击 “Connect existing domain”:

再在其中填写出可能存在漏洞的对应域名:

点击“Next” 和 “Verify Connection”:

这之后,会成功跳转到以下页面:

到了这步,就完成了Shopify的一个子域名劫持测试了。这种情况下,存在漏洞的原因就是,这条别名记录是存在的,而且商店名称是可注册的,这样子域名劫持漏洞很少见,因为你面对的目标是Shopify账号注册时要填写的商店名称,所以,其前提是,需要原来用户对之前的账户完全删除或执行域名变更,才有可能存在子域名劫持漏洞。经过调查,我们发现大约有2%的Shopify网站存在这样的错误配置问题。

DNS映射

在这个例子中,存在子域名指向shops.myshopify.com的一条CNAME记录,如:

这算是Shopify上常见的子域名劫持情况了,这种配置下,我们可以创建一个可注册的商店名,再按照像前述的测试方式,在Shopify管理后台中去连接管理其对应的域名。以下是其操作方式,如在我的后台中去连接sales.buckhacker.com:

成功连接后的确认:

大规模测试发现

在之前的文章中,我们介绍过使用Rapid7的Sonar和FDNS数据集工具可以很方便地进行一些漏洞测试利用。

Rapid7的FDNS数据集中包含了大量的CNAMES记录,所以,其实我们要做的就是在这个数据集中寻找CNAME指向shop.myshopify.com或者myshopname.shopify.com的子域名,围绕这两个域名的相关记录,再深入检查是否存在子域名劫持漏洞。

所有的漏洞测试步骤都可用一条命令来实现:

这里,我们要解释一下,虽然存在其它子域名劫持漏洞的发现工具,但我们还是自行开发了这个工具来做测试,原因在于,其它工具都是基于Shopify的错误响应页面来检测的,这样会导致大量误报,在这些大量误报中仅有小部分是存在子域劫持漏洞的。我们的脚本和方式虽然简单,但执行了三种检查,即错误响应页面检查、CNAME记录检查和 REST API请求检查 ,最终运行结果相对于更加准确。

如果按照2017年版本的FDNSv2数据集来跑,最终的检测结果非常之多:大约有超过55,000个Shopify子域名存在子域名劫持漏洞。然后,从这些结果中,我们就可以对照数据来判断其它厂商的相关域名是否中招了。当然了,这种类似的漏洞检测方式,也可以适用于对其它域名注册提供商的检查。

总结

这种方式的检测手段,可以大概了解某个目标厂商存在的子域名劫持漏洞情况。在云服务时代,除了传统的进程和堆栈的系统漏洞研究之外,还需要一些新的漏洞研究方法,提高思维高度宽度。抽象点说,整个云服务平台就是一个广泛的操作系统。

漏洞上报进程

2018.8.21 通过HackerOne将漏洞上报给Shopify 2018.8.21 Shopify初步响应 2018.8.23 Shopify后续反馈 2018.9.10 公开漏洞

*参考来源:medium,clouds编译,转载请注明来自FreeBuf.COM。

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2018-10-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏极客猴

安装pip版本排雷经验分享

相信大家经常用到pip来安装第三方扩展库。但是经常出现这样的情况:明明自己已经在终端通过pip安装了第三方库,而IDE开发工具Pycharm还提示该库没有安装。...

11410
来自专栏木子昭的博客

简单三步, 搭建全平台私有同步网盘

第三步:访问主机ip的8080端口,为网盘设置管理员名称和密码 比如我的vps主机ip为149.28.54.241, 那么我访问的就是14...

55710
来自专栏Youngxj

抓包入门之360壁纸

35530
来自专栏FreeBuf

扒一扒浏览器的安全机制

*本文原创作者:梅孜,本文属FreeBuf原创奖励计划,未经许可禁止转载 随着互联网深入人们的生活,浏览器的发展更加丰富多彩,其种类多样,版本更新速度也日益提...

22890
来自专栏web前端教室

1103《浅淡vueJs的生命周期?》| 本次微课总结

今天,11月3日晚22点的微课,已经结束了,内容主要是讲了vueJs的生命周期。 我在微课中并不是按vue实例,从产生到工作到消失的过程来讲解。而是将它分成了四...

23860
来自专栏前端开发

PHP制作 微信、支付宝、QQ支付多合一收款二维码

52240
来自专栏程序员互动联盟

如何写一个自己的安卓应用?

现在智能手机占据了大部分人的大部分生活。公交车,地铁,路边,处处都能看到低头族。就连大一军训都能看到拿着手机不放的。 为什么出现这种现象?手机应用,现在的移动应...

50090
来自专栏闰土大叔

马蜂窝的前端火了!遇到冲突不怕怼,强制提交就是干

相信大家都在世界杯期间有意无意地看到过马蜂窝的洗脑广告,短短的15秒,品牌名就出现了6次。“旅游之前,为什么要先上马蜂窝”,这些不断重复的广告词让人犹如魔咒般印...

12000
来自专栏FreeBuf

雅虎紧急修复了可导致远程命令执行的SQL注入漏洞

最近,因存在严重的SQL漏洞,雅虎的网站遭到了侵入,受到了很大的的影响(注:该网站并不是yahoo主站,而是隶属于yahoo的一个印度创意征集网站,详情见文末)...

24960
来自专栏FreeBuf

看我如何发现微软Microsoft Translator Hub服务高危漏洞

因为微软公司部署有很多在线网站和服务,对漏洞挖掘者来说具备较广的攻击测试面,发现漏洞入选微软致谢榜的难度相对不大,所以我就把大把时间耗在了微软漏洞发现上。在我分...

11720

扫码关注云+社区

领取腾讯云代金券