
为什么 Gopher 协议是 SSRF 的终极武器看完终于明白利用链原理大家好最近在学习SSRF服务器端请求伪造。上一篇文章学习了SSRF常见绕过技巧包括IP绕过DNS重绑定URL解析绕过协议绕过学习过程中发现一个协议经常被提到gopher://很多 SSRF 利用链都会出现它。例如SSRF↓Gopher↓Redis↓写入计划任务↓RCE那么问题来了为什么偏偏是 Gopher它到底能做什么今天从学习笔记角度整理一下。一、什么是 Gopher 协议Gopher 是一种非常古老的网络协议,出现时间甚至早于 HTTP。简单理解HTTP负责网页访问Gopher负责数据传输如今几乎没人使用。但许多服务器库仍然保留支持。因此在 SSRF 场景下重新焕发了价值。二、为什么 HTTP 不够用假设存在 SSRFhttp://target/fetch?url攻击者输入http://127.0.0.1服务器会代替用户访问。流程攻击者↓目标网站↓127.0.0.1但是这里有一个问题HTTP 请求内容固定。攻击者很难完全控制底层数据。例如RedisFastCGIMemcachedMySQL这些服务使用的并不是 HTTP 协议,因此无法直接利用。三、Gopher 最大的特点Gopher 可以发送任意 TCP 数据。这意味着HTTP只能发 HTTPGopher可以发任意协议数据例如Redis命令FastCGI请求SMTP邮件数据Memcached命令都可以构造,这也是它成为SSRF 利用核心的原因。四、理解 Gopher 利用思路假设服务器内网存在 Redis127.0.0.1:6379正常情况下外网↓无法访问而目标网站存在 SSRF攻击者↓SSRF↓Redis于是攻击者可以借助服务器作为跳板。流程攻击者↓目标服务器↓Redis从而访问原本无法接触的内网服务。五、为什么能造成危害很多内网服务默认信任本机访问。例如RedisFastCGIDocker APIJenkinsMemcached管理员认为只有本机能连,所以没有额外认证。一旦 SSRF 成功访问127.0.0.1这种信任关系就被打破。六、SSRF 利用链长什么样最经典的攻击路径这也是很多真实案例中的利用思路。七、为什么程序员重视 Gopher因为它解决了一个关键问题如何让SSRF发送任意数据没有 GopherSSRF↓只能探测有了 GopherSSRF↓交互↓利用↓可能获得权限利用价值瞬间提高。Gopher的数据格式可以看一下八、刚学习时容易误区很多人看到gopher://就开始寻找攻击代码。其实学习顺序应该是先理解协议↓理解TCP通信↓理解Redis协议↓理解FastCGI协议↓理解利用链如果基础没有掌握。即使复制现成 Payload。也很难知道原理。九、实战SSRF 到 Redis写入计划任务获取RCE流程十、总结今天学习了 Gopher 协议在 SSRF 中的作用。记住一句话SSRF 决定你能访问哪里Gopher 决定你能发送什么。很多 SSRF 漏洞最终能够升级为高危漏洞并不是因为 SSRF 本身而是因为 Gopher 赋予了它与内网服务交互的能力。因此学习 SSRF 时Gopher 协议几乎是绕不开的重要知识点。争取把整个利用链彻底搞明白。