使用Azure CDN进行子域名接管

文化   2024-12-08 12:03   新加坡  

扫码领资料

获网安教程


Track安全社区投稿~  

赢千元稿费!还有保底奖励~(https://bbs.zkaq.cn)

本文的重点描述我发现的一起利用 Microsoft Azure 的 CDN (azureedge.net) 实现的子域名接管案例。我使用自己的域名重现了该问题,并会介绍我发现它的过程以及如何创建一个简单的漏洞利用 PoC(概念验证)

寻找子域名

接管子域名的第一步是找到一份候选名单。市面上有许多工具可以做到这一点(有些比其他工具更好)。我其实并不喜欢做侦察或枚举工作,因此尽管我想快速找到大量子域名,但我并不在意是否找到了每一个可能的子域名。如果你非常在意全面性,那么你可能需要使用多种工具并结合字典暴力破解。我通常没有这种需求或欲望,所以我找到了一款效果非常好的工具,并一直使用它:tomnomnom 的 assetfinder (https://github.com/tomnomnom/assetfinder)。

以 att.com为例(接管的目标并不是 ATT),assetfinder 在大约 30 秒内找到了 19384 个子域名。如果我想进一步分析它们的内容,这无疑是一个重要的起点。

img

寻找潜在的子域名接管

与最初寻找子域名类似,如果你计划定期寻找可被接管的子域名,可能需要尝试不同的工具以找到最适合的工具。我选择了 subjack (https://github.com/haccer/subjack),并一直使用它。尽管有一些误报,但它的速度非常快,而且就我的使用情况来看,效果非常出色。

img

与我最近报告的接管案例类似,subjack 报告的一个易受攻击的域名看起来如下图所示:它的 CNAME 记录指向了一个 *.azureedge.net 的位置。

img
在查看域名 onetrick-takeover-test.azureedge.net 的输出时,我注意到它返回了 NXDOMAIN 状态。这意味着该域名无法解析为 IP 地址,且实际上并不存在。对我们来说,这是个好消息,因为我们可能可以在 Azure 中创建一个同名的 CDN 端点,从而有效接管子域名 takeovertest.andyrush.io。

img

创建 PoC(概念验证)

在创建 CDN 端点之前,你需要准备一些内容供子域名指向。虽然有些人喜欢创建一个页面,放上炫酷的表情包、闪烁的灯光 GIF 以及巨大的红色 <h1> 标签写着“YOU’VE BEEN HACKED”…我更倾向于采取更低调的方式。例如,一个包含你名字的 HTML 注释的自定义错误页面。这种方式可以确保,如果有合法用户访问该子域名,他们不太可能看到你的搞笑表情包,避免给公司带来损失或负面舆论,也减少你错过赏金的风险。
我选择创建一个基本的 Azure 存储账户,将其转换为静态网站,并托管一个简单的 HTML 文件,如下图所示:
img
创建一个基本的存储账户,并上传一个 HTML 文件。要将存储转换为静态网站,请在左侧菜单中找到“静态网站”(Static website)选项并启用该功能。接着,复制“主终结点”(Primary endpoint)框中的 URL 以备后用,同时可以选择配置索引文件或错误页面。
接下来,创建一个新的 CDN 配置文件和端点。创建配置文件相对简单,不需要过多说明。配置文件只是一个包含端点的容器,其中提供了一些选项,并指定了定价层级。你可以在创建配置文件的过程中直接创建端点,也可以之后再创建端点。
img
创建配置文件后,你需要创建实际的 CDN 端点。端点的名称应与易受攻击域名的初始 CNAME 记录值一致。在这个案例中,takeovertest.andyrush.io 的 CNAME 记录指向 onetrick-takeover-test.azureedge.net。端点名称输入框还可以用来检查该值是否可用。当你在此字段中输入值后,要么会看到一个绿色的勾号(代表成功),要么会看到一个红色的感叹号(代表不可用)。
Origin type 和 Origin hostname 是关键选项。尽管我将内容托管在存储账户中,但在将其转换为静态网页后,似乎无法正常工作。这并不是说选择该选项后一定不能正常运行,但更简单的做法是选择 Custom Origin(自定义源),并将其指向我静态网页的主机名。这个值的作用是让 CDN 知道应该将流量路由到哪里。
img
一旦端点建立完成,你应该在概览中看到一个 Endpoint hostname 值。点击该链接,如果一切正常,你应该能看到你的默认 HTML 页面。如果没有看到内容,点击 Origin hostname 链接,确保它正在正确地提供你的内容。根据问题所在,进行相应的故障排除。请记住,内容在 CDN 上复制可能需要一点时间。你还会注意到,dig 命令的输出发生了变化,现在有多个记录指向有效的 Azure 位置:
img
最后,你可以访问最初易受攻击的子域名。此时,你会注意到该域名上显示了内容,但可能并不是你预期的内容。它可能看起来像下面的错误信息:
img

这很可能是因为你需要将自定义域名与端点关联。这个过程会在易受攻击的子域名和 CDN 端点之间创建映射。需要注意的是,展示 Bug Bounty 计划中的错误截图,以及原始页面上托管的错误和 CDN 端点上托管的内容,可能就足够作为证据。这是我做的,因为该计划的规则中有些措辞让我对是否将内容提供给他们的客户感到犹豫。不过,如果这不足以作为证据,并且你希望你的内容能通过原始子域名提供,只需像下面这样添加自定义域名:
img
现在,当你在浏览器中访问原始易受攻击的子域名时,我们的内容已经显示出来。
img
这是我第一次尝试子域名接管,尽管我从未登录过 Azure,但我认为我花了不到一个小时就弄清楚了如何找到问题并创建 PoC。希望这篇文章能引起更多人对这个简单漏洞的关注,它通常会支付相当可观的赏金,而且对于新手黑客来说,门槛很低。

声明:⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤,任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的,否则后果⾃⾏承担。所有渗透都需获取授权

如果你是一个网络安全爱好者,欢迎加入我的知识星球:zk安全知识星球,我们一起进步一起学习。星球不定期会分享一些前沿漏洞,每周安全面试经验、SRC实战纪实等文章分享,微信识别二维码,即可加入。



白帽子左一
零基础也能学渗透!关注我,跟我一启开启渗透测试工程师成长计划.专注分享网络安全知识技能.
 最新文章