使用Azure CDN进行子域名接管

devtools/2025/3/19 8:42:40/

目录:

   寻找子域名

 寻找潜在的子域名接管

 创建 PoC(概念验证)

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

寻找子域名

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

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

图片

寻找潜在的子域名接管

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

图片

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

图片

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

图片

创建 PoC(概念验证)

在创建 CDN 端点之前,你需要准备一些内容供子域名指向。虽然有些人喜欢创建一个页面,放上炫酷的表情包、闪烁的灯光 GIF 以及巨大的红色 <h1> 标签写着“YOU’VE BEEN HACKED”…我更倾向于采取更低调的方式。例如,一个包含你名字的 HTML 注释的自定义错误页面。这种方式可以确保,如果有合法用户访问该子域名,他们不太可能看到你的搞笑表情包,避免给公司带来损失或负面舆论,也减少你错过赏金的风险。

我选择创建一个基本的 Azure 存储账户,将其转换为静态网站,并托管一个简单的 HTML 文件,如下图所示:

图片

创建一个基本的存储账户,并上传一个 HTML 文件。要将存储转换为静态网站,请在左侧菜单中找到“静态网站”(Static website)选项并启用该功能。接着,复制“主终结点”(Primary endpoint)框中的 URL 以备后用,同时可以选择配置索引文件或错误页面。

接下来,创建一个新的 CDN 配置文件和端点。创建配置文件相对简单,不需要过多说明。配置文件只是一个包含端点的容器,其中提供了一些选项,并指定了定价层级。你可以在创建配置文件的过程中直接创建端点,也可以之后再创建端点。

图片

创建配置文件后,你需要创建实际的 CDN 端点。端点的名称应与易受攻击域名的初始 CNAME 记录值一致。在这个案例中,takeovertest.andyrush.io 的 CNAME 记录指向 onetrick-takeover-test.azureedge.net。端点名称输入框还可以用来检查该值是否可用。当你在此字段中输入值后,要么会看到一个绿色的勾号(代表成功),要么会看到一个红色的感叹号(代表不可用)。

Origin type 和 Origin hostname 是关键选项。尽管我将内容托管在存储账户中,但在将其转换为静态网页后,似乎无法正常工作。这并不是说选择该选项后一定不能正常运行,但更简单的做法是选择 Custom Origin(自定义源),并将其指向我静态网页的主机名。这个值的作用是让 CDN 知道应该将流量路由到哪里。

图片

一旦端点建立完成,你应该在概览中看到一个 Endpoint hostname 值。点击该链接,如果一切正常,你应该能看到你的默认 HTML 页面。如果没有看到内容,点击 Origin hostname 链接,确保它正在正确地提供你的内容。根据问题所在,进行相应的故障排除。请记住,内容在 CDN 上复制可能需要一点时间。你还会注意到,dig 命令的输出发生了变化,现在有多个记录指向有效的 Azure 位置:

图片

最后,你可以访问最初易受攻击的子域名。此时,你会注意到该域名上显示了内容,但可能并不是你预期的内容。它可能看起来像下面的错误信息:

图片

这很可能是因为你需要将自定义域名与端点关联。这个过程会在易受攻击的子域名和 CDN 端点之间创建映射。需要注意的是,展示 Bug Bounty 计划中的错误截图,以及原始页面上托管的错误和 CDN 端点上托管的内容,可能就足够作为证据。这是我做的,因为该计划的规则中有些措辞让我对是否将内容提供给他们的客户感到犹豫。不过,如果这不足以作为证据,并且你希望你的内容能通过原始子域名提供,只需像下面这样添加自定义域名:

图片

现在,当你在浏览器中访问原始易受攻击的子域名时,我们的内容已经显示出来。

图片

这是我第一次尝试子域名接管,尽管我从未登录过 Azure,但我认为我花了不到一个小时就弄清楚了如何找到问题并创建 PoC。希望这篇文章能引起更多人对这个简单漏洞的关注,它通常会支付相当可观的赏金,而且对于新手黑客来说,门槛很低。

申明:本账号所分享内容仅用于网络安全技术讨论,切勿用于违法途径,所有渗透都需获取授权,违者后果自行承担,与本号及作者无关    


http://www.ppmy.cn/devtools/168291.html

相关文章

Qwen2.5-VL 开源视觉大模型,模型体验、下载、推理、微调、部署实战

一、Qwen2.5-VL 简介 Qwen2.5-VL&#xff0c;Qwen 模型家族的旗舰视觉语言模型&#xff0c;比 Qwen2-VL 实现了巨大的飞跃。 欢迎访问 Qwen Chat &#xff08;Qwen Chat&#xff09;并选择 Qwen2.5-VL-72B-Instruct 进行体验。 1. 主要增强功能 1&#xff09;直观地理解事物&…

【后端开发面试题】每日 3 题(十三)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;https://blog.csdn.net/newin2020/category_12903849.html &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享后端开发面试中常见的面试题给大家&#xff0c;每天的题目都是独…

深搜专题9:取数游戏

输入描述 第一行有一个正整数 T&#xff0c;表示了有 T 组数据。 对于每一组数据&#xff0c;第一行有两个正整数 N 和 M&#xff0c;表示了数字矩阵为 N 行 M 列。 接下来 N 行&#xff0c;每行 M 个非负整数&#xff0c;描述了这个数字矩阵。 对于20%的数据&#xff0c;1…

核心期刊指的是哪些“核心”?

“核心期刊”是中国学术界对高质量学术期刊的统称&#xff0c;其认定依托于不同评价机构建立的遴选体系。目前国内公认的“核心”主要指以下四类体系&#xff1a; 1. 北大核心&#xff08;中文核心期刊要目总览&#xff09; 由北京大学图书馆联合多所高校研制&#xff0c;…

Redis项目:缓存

黑马点评缓存部分&#xff1a; 缓存的标准操作方式就是查询数据库之前先查询缓存&#xff0c;如果缓存数据存在&#xff0c;则直接从缓存中返回&#xff0c;如果缓存数据不存在&#xff0c;再查询数据库&#xff0c;然后将数据存入redis 最初缓存版本 //最初源代码public Sh…

Java面试八股—Redis篇

一、Redis的使用场景 &#xff08;一&#xff09;缓存 1.Redis使用场景缓存 场景&#xff1a;缓存热点数据&#xff08;如用户信息、商品详情&#xff09;&#xff0c;减少数据库访问压力&#xff0c;提升响应速度。 2.缓存穿透 正常的访问是&#xff1a;根据ID查询文章&…

4.3--入门知识扫盲,IPv4的头部报文解析,数据报分片,地址分类(包你看一遍全部记住)

IPv4协议&#xff1a;网络世界的快递包裹指南&#xff08;附拆箱说明书&#xff09; “IPv4就像一张明信片&#xff0c;既要写清楚地址&#xff0c;又要控制大小别超重” —— 某网络工程师的桌面铭牌 一、IPv4报头&#xff1a;快递面单的终极艺术 1.1 报头结构图&#xff08;…

MyBatis (三)关联查询

目录 一 学习自定义结果集 1 驼峰命名规则 2 自定义映射规则 二 指定一对一的关联封装进行查询 三 指定一对多的关联封装进行查询 一 学习自定义结果集 解决和数据库对不上的数据被封装为空&#xff1a; 1 驼峰命名规则 在xml文件中&#xff1a; # 启用驼峰命名自动转换…