SSRF
slug
series-status
status
summary
date
series
type
password
icon
tags
category
SSRF
简介
Server-Side Request Forgery (SSRF) 是一种常见的 Web 应用安全漏洞,影响到服务器端的请求。它允许攻击者通过构造恶意请求,诱导服务器执行非法请求。
通常,SSRF 漏洞发生在当 Web 应用程序允许用户提交 URL 作为请求参数,而应用程序本身并未对这些请求进行正确的验证和过滤。因此,攻击者可以构造恶意请求,以诱导服务器访问内部网络上的敏感资源,或者诱导服务器执行其他类型的非法请求,如端口扫描、DNS 解析攻击等。
为了预防 SSRF 漏洞,开发人员需要对所有请求参数进行严格的验证和过滤,以确保它们不会被恶意攻击者误导执行非法请求。此外,开发人员还应该考虑在 Web 应用程序中使用安全机制,如访问控制和身份验证,来限制对敏感资源的访问。
Pikachu靶场复现
环境
- pikachu靶场
复现
直接打开pikachu靶场的ssrf模块

可以看到这里的url参数部分是一个外部地址,我们可以任意输入内容,我们尝试输入一个我们的npm端口

可以看到这里可以通过这个ssrf漏洞访问到我们内网的其他服务。
当然,和我们的xxe漏洞一样,我们也可以在这个部分通过file协议访问本地文件

还可以通过dict协议查看不同服务的版本信息

SSRF+Redis -> getshell
环境
- vulhub/weblogic ssrf漏洞
- vulfocus/redis-cnvd_2015_07557:latest


将两个镜像全部导入vulfocus

Weblogic-SSRF
我们先启动weblogic容器

漏洞URI
- 尝试探测本机7001端口

说明本机7001端口是开放的,只是返回404而已。
- 尝试探测7002端口

说明7002端口未开放,无法连接。
ssrf + redis
启动redis容器

借助portainer查看容器ip

利用ssrf探测redis

发现redis服务存在。
利用ssrf发送三条redis命令,将反弹shell的脚本写入
/etc/crontab
进行URL编码(注意换行要手动修改为%0D%0A)
在另一台服务器开启监听

攻击URI
其中,
operator=http://172.17.0.4:6379/
这个是redis的IP和端口最后一个ip:192.168.0.100%2F2333 这个是要反弹shell的主机ip和端口
按说这里应该是没问题的,但是最后的反弹shell无论是虚拟机环境还是服务器都没弹成功,如果有大佬看到了这篇文章希望可以帮我答疑解惑一下~
所以这里就先将我的参考文章贴在这里,大家也可以自己尝试一下
**参考文章1:**http://t.csdn.cn/aZrbq
修复
为了防止SSRF漏洞,请遵循以下建议:
- 输入验证:对所有用户输入进行严格验证,避免用户提交恶意数据。可以使用白名单或正则表达式进行URL验证,确保只允许访问合法的URL。
- 最小权限原则:确保服务器只具有执行其必要功能所需的权限。避免提供过多权限,以减小攻击者在成功攻击后对系统造成的影响。
- 限制网络访问:限制服务器向外部发起请求的功能,尽量禁止访问内部网络资源。可以通过配置防火墙、使用代理等手段实现。
- 使用安全库和组件:使用经过安全审查的库和组件,确保它们不会产生SSRF漏洞。定期更新这些库和组件,以确保已经修复了已知的安全漏洞。
- 审查代码:定期审查代码,以检测可能导致SSRF漏洞的不安全编码实践。可以使用静态代码分析工具或手动代码审查方法进行检查。
- 安全编程实践:遵循安全编程实践,例如正确处理用户输入、限制请求的范围等,以降低发生SSRF漏洞的风险。
- 监控和日志记录:监控服务器活动,收集和分析日志,以便在发生攻击时可以迅速检测并采取相应的应对措施。
- 定期进行安全培训:对开发人员进行定期的安全培训,提高他们对SSRF漏洞的认识,使他们能够遵循安全编程实践,有效减少漏洞的产生。
- 定期进行安全测试:定期对应用程序进行渗透测试和安全审计,以发现并修复潜在的SSRF漏洞。
除了前面提到的常见防御措施之外,还有一些不太常见但同样有效的方法可以用于防御SSRF漏洞:
- 使用DNS解析钩子:在服务器中实现DNS解析钩子(DNS resolution hook),拦截并审查所有域名解析请求。这可以帮助您识别和阻止对内部资源和其他敏感资源的访问尝试。
- 内容安全策略报告(CSPR):实施内容安全策略报告(Content Security Policy Reporting),以收集和报告潜在的SSRF攻击尝试。这可以帮助您更好地了解应用程序的安全性状况,并采取针对性的防御措施。
- 使用外部解析器:为了避免服务器直接处理用户输入的URL,您可以使用外部解析器(如代理服务器)来处理这些请求。这可以增加攻击者攻击内部资源的难度。
- 隔离关键服务:将关键服务与其他服务隔离,如数据库、缓存等。这可以防止攻击者在利用SSRF漏洞成功攻击某个服务后,轻易地访问或控制其他关键服务。
- 使用零信任网络模型:零信任网络模型是一种安全框架,要求在访问网络资源时进行身份验证和授权,即使是在内部网络中。采用这种模型可以限制潜在的SSRF攻击对内部资源的访问。
- 使用安全的开发框架:选择已经内置了对SSRF攻击防御的安全开发框架。这些框架可能提供了安全的API和组件,用于处理用户输入、URL解析等,从而降低了编码过程中引入SSRF漏洞的风险。
- 使用时间延迟:为请求引入短暂的延迟,以降低暴力攻击的成功率。但请注意,这种方法可能对正常用户的体验产生负面影响,因此需要权衡使用。
- 使用专用实例:在实际部署中,尽量将涉及到访问外部资源的功能部署在专用实例上,以实现对内部资源访问的限制。
- 请求频率限制:限制每个IP地址或用户在特定时间段内发起请求的频率,以降低攻击成功率。
请注意,不同的应用程序和环境可能需要不同的防御措施。建议您根据具体情况来选择适当的方法。在实施这些防御措施时,请确保它们不会对正常用户的体验产生负面影响。
绕过
@绕过
http://www.baidu.com@10.10.10.10
与http://10.10.10.10
请求是相同的该请求得到的内容都是10.10.10.10的内容,此绕过同样在URL跳转绕过中适用。
360会阻止这种访问方式,访问显示空白页,firefox、chrome可以这样访问
ip地址转换绕过
有些ssrf防护措施,会对输入的URL做正则匹配,限制内网地址,比如192、168这些地址,但如果转换成其他格式的ip地址,可能会绕过
对于这种过滤我们可以采用改编IP的写法的方式进行绕过,例如192.168.0.1这个IP地址我们可以改写成:
还有一种特殊的省略模式,例如10.0.0.1这个IP可以写成10.1
Example: 115.239.210.26 = 16373751032
短网址绕过
网上有很多将网址转换未短网址的网站 比如
www.baidu.com
与https://dwz.lc/2fGYWaE
一样利用302跳转
需要一个vps,把302转换的代码部署到vps上,然后去访问,就可跳转到内网中
利用其他协议绕过
如果服务器端程序对访问URL所采用的协议进行验证的话,可以通过非HTTP协议来进行利用。
(1)、GOPHER协议:通过GOPHER我们在一个URL参数中构造Post或者Get请求,从而达到攻击内网应用的目的。例如我们可以使用GOPHER协议对与内网的Redis服务进行攻击.
(2)、File协议:File协议主要用于访问本地计算机中的文件,我们可以通过类似file:///文件路径这种格式来访问计算机本地文件。使用file协议可以避免服务端程序对于所访问的IP进行的过滤。例如我们可以通过
file:///d:/1.txt
来访问D盘中1.txt的内容DNS重绑定

一般我们输入的URL地址,服务器后端接受后,会进行第一次dns解析,可能是本地的DNS服务器,也有可能是其他区域的服务器,然后获取的ip地址在进行逻辑判断,如果是内网地址则不通过,判断通过后,然后在去请求一次url地址对应的内容,这里是第二次dns解析。
那么问题就来了 ,这第一次和第二次之间的时间差,就能做文章,前提TTL为0,即dns解析记录缓存存活的时间为0,相当于每次解析都要去重新请求dns服务器,无法在本地缓存。

比如在把同一个域名绑定两个不同的地址,也就是两条A记录,去碰这个概率,要的情况是第一次为外网地址,然而TTL为0,第二次请求的时候要为内网地址。
上面这种情况的话,每次解析的结果随机,所以要达到上面这样情况有1/4的机率,是这样算的吧。所以去碰这个概率,碰到了就能成功,但这种方法不稳定。
需要一个更好的方法

所以需要 添加一条A记录和一条NS记录
ns记录表示域名test.bendawang.site这个子域名指定由ns.bendawang.site这个域名服务器来解析,然后a记录表示我的这个ns.bendawang.site的位置在ip地址104.160.43.154上。
这样的话第一解析test.bendawang.site时为ns.bendawang.site这个地址,能通过, 然后第二次解析ns.bendawang.site的时候,就为配置的内网地址了 成功绕过。
xip.ip
xip.io这是个特别的 域名,是别人搭好的网站,具体信息可以访问来查看,他会把如下的域名解析到特定的地址,其实和dns解析绕过一个道理
利用Enclosed alphanumerics绕过
利用Enclosed alphanumerics ⓔⓧⓐⓜⓟⓛⓔ.ⓒⓞⓜ >>> **http://example.com List: ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳ ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇ ⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛ ⒜ ⒝ ⒞ ⒟ ⒠ ⒡ ⒢ ⒣ ⒤ ⒥ ⒦ ⒧ ⒨ ⒩ ⒪ ⒫ ⒬ ⒭ ⒮ ⒯ ⒰ ⒱ ⒲ ⒳ ⒴ ⒵ Ⓐ Ⓑ Ⓒ Ⓓ Ⓔ Ⓕ Ⓖ Ⓗ Ⓘ Ⓙ Ⓚ Ⓛ Ⓜ Ⓝ Ⓞ Ⓟ Ⓠ Ⓡ Ⓢ Ⓣ Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩ ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ⓠ ⓡ ⓢ ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ ⓪ ⓫ ⓬ ⓭ ⓮ ⓯ ⓰ ⓱ ⓲ ⓳ ⓴ ⓵ ⓶ ⓷ ⓸ ⓹ ⓺ ⓻ ⓼ ⓽ ⓾ ⓿
利用句号绕过
127。0。0。1 >>> 127.0.0.1
基于快速网址绕过
Loading...