【基于黑名单输入过滤器的SSRF攻击】

admin 2026-07-24 04:58:54 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文档详细介绍了如何利用IP地址简写(如127.1)和双重URL编码(如%2561dmin)绕过基于黑名单的SSRF防御,访问内部管理界面并删除用户carlos。核心原理是黑名单仅匹配固定字符串,无法覆盖合法变形,攻击者可通过逐个击破脆弱的规则实现绕过。文档提供了完整的攻击链步骤、原理分析和排障清单,是SSRF绕过学习的入门实践指南。 综合评分: 88 文章分类: 渗透测试,红队,漏洞分析,WEB安全


cover_image

【基于黑名单输入过滤器的SSRF攻击】

原创

卡布奇诺的派对 卡布奇诺的派对

卡布奇诺的派对

2026年7月14日 07:31 河南

在小说阅读器读本章

去阅读

Payload: http://127.1/%2561dmin/delete?username=carlos

基于黑名单输入过滤器的SSRF攻击

—— PortSwigger“SSRF with blacklist-based input filter”完整通关指南

🎯 靶场速览

目标:该实验室的库存检查功能会从内部系统获取数据。需要利用 SSRF 漏洞访问位于 http://localhost/admin 的管理员界面,并删除用户 carlos

难点:开发者部署了两层脆弱的黑名单防御:

  1. 内网 IP 黑名单

    :拦截 localhost127.0.0.1 等指向本地的地址

  2. 路径关键词过滤

    :拦截包含 admin 的 URL 路径

核心思路:通过 IP 地址简写 绕过第一层黑名单,再通过 双重 URL 编码 绕过第二层路径过滤。

🚀 分步攻击链

第1步:拦截请求并确认过滤

访问任意产品页面,点击 “Check stock”,用 Burp Suite 拦截 POST 请求。

在 Burp Repeater 中尝试将 stockApi 修改为:

http://localhost/admin

http://127.0.0.1/admin

发送后会被服务器拦截——这证实了黑名单的存在。

第2步:绕过 IP 黑名单

本地回环地址 127.0.0.1 存在多种合法的简写形式。IPv4 允许省略前导零和部分为 0 的字段。

将 stockApi 修改为:

http://127.1/

发送请求,此时服务器不再拦截。

💡 127.1 等价于 127.0.0.1,因为 IP 地址的点分十进制表示法允许省略末尾为 0 的字段。

第3步:绕过 “admin” 路径过滤

尝试直接访问管理路径,将 stockApi 修改为:

http://127.1/admin

发送后会被拦截——路径中的 admin 关键词触发了黑名单。

双重 URL 编码绕过

服务器可能只对 URL 进行一次解码。若只编码一次(如 %61dmin),服务器解码后会还原为 admin,仍然会被黑名单检测到并拦截。

因此需要对 admin 中的关键字符进行双重编码

  • 第一次编码:a → %61
  • 第二次编码:%61 → %2561

将 stockApi 修改为:

http://127.1/%2561dmin

发送请求,服务器解码一次后得到 %61dmin,再解码为 admin,成功访问管理界面。

💡 也可以对整个 admin 进行双重编码,如 http://127.1/%25%36%31%25%36%34%25%36%64%25%36%39%25%36%65

第4步:删除目标用户

在管理界面路径后添加删除用户的参数,构造最终 payload:

http://127.1/%2561dmin/delete?username=carlos

发送请求,服务器执行删除操作,实验完成。

💡 核心原理

后端代码逻辑(黑名单的脆弱性)

以下是一段存在漏洞的后端代码示例:

@PostMapping("/product/stock")public&nbsp;ResponseEntity<String>&nbsp;checkStock(@RequestParam&nbsp;String&nbsp;stockApi) {&nbsp; &nbsp;&nbsp;// 脆弱点1:基于字符串的黑名单,仅检查固定字符串&nbsp; &nbsp;&nbsp;if&nbsp;(stockApi.contains("127.0.0.1") || stockApi.contains("localhost")) {&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;return&nbsp;ResponseEntity.status(403).body("External SSRF Attempt Blocked");&nbsp; &nbsp; }&nbsp; &nbsp;&nbsp;// 脆弱点2:大小写敏感的路径黑名单&nbsp; &nbsp;&nbsp;if&nbsp;(stockApi.contains("/admin")) {&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;return&nbsp;ResponseEntity.status(403).body("Access to admin path is forbidden");&nbsp; &nbsp; }&nbsp; &nbsp;&nbsp;// 直接发起请求&nbsp; &nbsp;&nbsp;URL&nbsp;url =&nbsp;new&nbsp;URL(stockApi);&nbsp; &nbsp;&nbsp;HttpURLConnection&nbsp;connection = (HttpURLConnection) url.openConnection();&nbsp; &nbsp;&nbsp;// ...}

为什么 IP 简写能绕过?

黑名单只检查了字符串 127.0.0.1 和 localhost,但 127.1 是 127.0.0.1 的合法简写形式。后端 HTTP 客户端在解析 127.1 时,会自动将其解析为回环地址 127.0.0.1,但黑名单的字符串匹配却检测不到 127.1

为什么双重编码能绕过?

黑名单检查的是原始输入字符串中是否包含 /admin。流程如下:

  1. 攻击者发送 /%2561dmin
  2. 黑名单检查原始字符串 → 不包含 /admin → 放行 ✅
  3. 服务器第一次 URL 解码 → /%61dmin
  4. 服务器第二次 URL 解码 → /admin(实际发起请求时)
  5. 成功访问管理界面

如果只编码一次(如 /%61dmin),黑名单虽然检测不到 admin,但服务器解码一次后就变成了 /admin,直接暴露给后续处理逻辑——但在这个靶场的实现中,黑名单检查发生在解码之前,所以单次编码也能绕过路径过滤。双重编码是为了应对过滤器先解码一次再检查的场景。

🔧 同类技巧拓展

IP 地址黑名单绕过方法

| 技巧 | 示例 | 说明 | | — | — | — | | IP 简写 | 127.1 | 等价于 127.0.0.1 | | 十进制整数 | 2130706433 | 127.0.0.1 的十进制表示 | | 八进制表示 | 0177.0.0.1 | 前导零表示八进制 | | 十六进制表示 | 0x7f000001 | 127.0.0.1 的十六进制 | | IPv6 地址 | [::1] | IPv6 回环地址 | | DNS 解析 | 127.0.0.1.nip.io | 解析到 127.0.0.1 的域名 | | 大小写混淆 | LoCaLhOsT | 绕过大小写敏感的黑名单 |

路径关键词过滤绕过方法

| 技巧 | 示例 | 说明 | | — | — | — | | 双重 URL 编码 | %2561dmin | 对 a 进行双重编码 | | 完整双重编码 | %25%36%31%25%36%34%25%36%64%25%36%39%25%36%65 | 对整个 admin 编码 | | 大小写混淆 | aDMIN | 绕过大小写敏感的黑名单 | | 路径分隔符变体 | admi n (使用 +) | 利用 URL 编码差异 |

✅ 排障自检清单

| 问题 | 原因 | 解决方案 | | — | — | — | | http://127.1/ 被拦截 | 可能输入了带路径的地址 | 先只访问根路径 http://127.1/ 确认绕过成功 | | http://127.1/%2561dmin 返回 404 | 双重编码格式错误 | 确认是 %2561 而非 %25%61 | | 删除用户失败 | 删除路径写错 | 确认路径为 /delete?username=carlos | | 请求被拦截但不确定原因 | 多个黑名单规则叠加 | 先单独测试 IP 绕过,再单独测试路径绕过 | | Burp 自动解码了 payload | Burp 的显示设置问题 | 在 Repeater 中查看 Raw 标签页,确认 %25 未被解码 |

📌 总结

本关的核心在于逐个击破脆弱的黑名单规则

  1. IP 黑名单

    :基于固定字符串匹配(127.0.0.1localhost),无法覆盖 127.1 这类合法简写形式

  2. 路径黑名单

    :基于关键词 admin 的字符串匹配,可通过双重 URL 编码绕过

黑名单防御的本质缺陷在于 “只阻挡已知的恶意模式” ,而攻击者总能找到黑名单之外的变形方式。本关展示的 IP 简写和双重编码是最基础的两种绕过手段,也是 SSRF 绕过学习的入门必修课。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:卡布奇诺的派对 卡布奇诺的派对 卡布奇诺的派对《【基于黑名单输入过滤器的SSRF攻击】》

评论:0   参与:  0