UUID 不安全性
Reading time: 6 minutes
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
基本信息
通用唯一标识符 (UUID) 是 用于唯一标识计算机系统中信息的 128 位数字。在需要唯一标识符而无需中央协调的应用程序中,UUID 是必不可少的。它们通常用作数据库键,并可以引用各种元素,如文档和会话。
UUID 旨在唯一且 难以猜测。它们以特定格式结构化,分为五组,表示为 32 个十六进制数字。UUID 有不同的版本,每个版本服务于不同的目的:
- UUID v1 是基于时间的,包含时间戳、时钟序列和节点 ID(MAC 地址),但可能会暴露系统信息。
- UUID v2 类似于 v1,但包含针对本地域的修改(使用不广泛)。
- UUID v3 和 v5 使用来自命名空间和名称的哈希值生成 UUID,v3 使用 MD5,v5 使用 SHA-1。
- UUID v4 几乎完全随机生成,提供高水平的匿名性,但存在轻微的重复风险。
tip
请注意,UUID 的版本和子版本通常出现在 UUID 内的相同位置。例如在:
12345678 - abcd - 1a56 - a539 - 103755193864
xxxxxxxx - xxxx - Mxxx - Nxxx - xxxxxxxxxxxx
- M 的位置 表示 UUID 的 版本。在上面的示例中,它是 UUID v1。
- N 的位置 表示 UUID 变体。
三明治攻击
“三明治攻击”是一种特定类型的攻击,利用了 web 应用程序中 UUID v1 生成的可预测性,特别是在密码重置等功能中。UUID v1 是基于时间、时钟序列和节点的 MAC 地址生成的,如果攻击者能够获取一些在时间上接近生成的 UUID,这可能使其在某种程度上可预测。
示例
想象一个使用 UUID v1 生成密码重置链接的 web 应用程序。攻击者可能如何利用这一点来获得未授权访问:
- 初始设置:
- 攻击者控制两个电子邮件帐户:`attacker1@acme.com` 和 `attacker2@acme.com`。
- 目标的电子邮件帐户是 `victim@acme.com`。
- 执行:
- 攻击者为第一个帐户(`attacker1@acme.com`)触发密码重置,并收到一个带有 UUID 的密码重置链接,例如 `99874128-7592-11e9-8201-bb2f15014a14`。
- 紧接着,攻击者为受害者的帐户(`victim@acme.com`)触发密码重置,然后迅速为第二个攻击者控制的帐户(`attacker2@acme.com`)触发。
- 攻击者收到第二个帐户的重置链接,UUID 为 `998796b4-7592-11e9-8201-bb2f15014a14`。
- 分析:
- 攻击者现在有两个在时间上接近生成的 UUID(`99874128` 和 `998796b4`)。考虑到基于时间的 UUID 的顺序特性,受害者帐户的 UUID 很可能落在这两个值之间。
- 暴力攻击:
- 攻击者使用工具生成这两个值之间的 UUID,并通过尝试访问密码重置链接(例如 `https://www.acme.com/reset/<generated-UUID>`)来测试每个生成的 UUID。
- 如果 web 应用程序没有充分限制速率或阻止此类尝试,攻击者可以快速测试范围内的所有可能 UUID。
- 获得访问权限:
- 一旦发现受害者密码重置链接的正确 UUID,攻击者就可以重置受害者的密码并获得未授权访问其帐户的权限。
工具
- 您可以使用工具自动执行三明治攻击:https://github.com/Lupin-Holmes/sandwich
- 您可以使用扩展 UUID Detector 在 Burp Suite 中检测这些类型的 UUID。
参考文献
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。