SSRF总结

news2024/12/23 22:39:14

SSRF

​ SSRF全称:Server-Side Request Forgery,即服务器端请求伪造。

​ 是一个由攻击者构造请求,在目标服务端执行的一个安全漏洞。攻击者可以利用该漏洞使服务器端向攻击者构造的任意域发出请求,目标通常是从外网无法访问的内部系统

​ 简单来说就是利用服务器漏洞以服务器的身份发送一条构造好的请求给服务器所在内网进行攻击。

原理

​ 很多网站提供了从其他的服务器上获取数据的功能。通过指定的URL,网站可以从其他地方获取图片、下载文件、读取文件内容等。

SSRF的实质就是利用存在缺陷的Web站点作为代理攻击远程和本地的服务器。

​ **SSRF漏洞形成的原因大都是由于服务端提供了从其他服务器获取数据的功能但没有对目标地址做过滤与限制。**攻击者可以利用改漏洞获取内部系统的一些信息(因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内网系统)。

image-20230721111342993

  • 实例

漏洞场景:某网站有一个在线加载功能可以把指定的远程文章加载到本地,链接如下:

http://www.xxx.com/article.php?url=https://blog.csdn.net/qq_43531669/article/details/112498646

假如系统没有对url参数进行任何的检查,就可以构造其他的请求,例如:

http://www.xxx.com/article.php?url=http://127.0.0.1:22
http://www.xxx.com/article.php?url=file://etc/passwd
http://www.xxx.com/article.php?url=dict://127.0.0.1:22/data:data2 (dict可以向服务端口请求data data2)
http://www.xxx.com/article.php?url=gopher://127.0.0.1:2233/_test (2233端口发送数据test,同样可以发送POST请求)
...

危害

  1. 对外网、服务器所在内网、本地进行端口扫描
  2. 向内部任意主机的任意端口发送payload来攻击内网服务
  3. DOS攻击(请求大文件,始终保持连接Keep-Alive Always)
  4. 攻击内网的web应用,如直接SQL注入、XSS攻击等
  5. 利用file、gopher、dict协议读取本地文件、执行命令等
  6. 可以无视网站CDN

漏洞发现

1) 分享功能:通过URL地址分享文章等,例如如下地址:

http://share.xxx.com/index.php?url=http://www.xxx.com

通过url参数的获取来实现点击链接的时候跳到指定的分享文章。如果在此功能中没有对目标地址的范围做过滤与限制则就存在着SSRF漏洞。

(2)图片加载/下载:通过URL地址加载或下载图片:

http://image.xxx.com/image.php?image=http://www.xxx.com

图片加载存在于很多的编辑器中,编辑器上传图片处加载设定好的远程服务器上的图片地址,如果没对加载的参数做限制可能造成SSRF。

(3)图片/文章收藏功能:

http://title.xxx.com/title?title=http://title.xxx.com/xxx

例如 title参数是文章的标题地址,代表了一个文章的地址链接,如果收藏功能采用了此种形式保存文章,则在没有限制参数的形式下可能存在SSRF。

(4)转码服务:通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览。

(5)在线翻译:给网址翻译对应网页的内容。

(6)邮件系统:比如接收邮件服务器地址。

(7)利用参数中的关键字查找:

关键字:

share、wap、url、link、src、source、target、u、3g、display、sourceURl、imageURL、domain...

总的来说,需要从远程服务器请求资源的网站都有可能存在SSRF漏洞。

常用探测的协议

http

?url=     get传参

主要用来发送http协议,获取超文本内容,包括文字、图片、视频、音频等常用互联网资源;
file

file:///文件路径

本地文件传输协议,File协议主要用于访问本地计算机中的文件,就如同在Windows资源管理器中打 开文件一样
dict

dict协议不支持换行符,没有办法进行换行,相当于一次只能执行一条命令,所以不能用来攻击那些需要交互的应用(比如需要认证的redis)。

Dict协议,字典服务器器协议,dict是基于查询响应的TCP协议,它的目标是超越Webster protocol,并允许客户端在使用过程中访问更多字典。Dict服务器和客户机使用TCP端口2628;主要用来探测内网端口协议;
ftp
是一种处于应用层的用于文件传输的协议。是基于TCP协议的应用层协议,用于在网络上传输文件。
Gopher

1、gopher协议会吃掉第一个字符,所以要先放一个没有用的字符
2、回车是\r\n,但如果直接对\r\n进行url编码结果是不对的,因为编码的是\ r \ n四个字符的结果,实际回车只是两个不可见的字符,url编码为%0d%0a
3、直接发%可以正常接收,但是发%0d%0a就会出现数据包发不出去的问题,还需要进行一次url编码成%250d%250a才能正常发送出去(直接用curl命令测试没这个问题,应该是web服务器会自动进行一次url解码导致的)

Gopher协议是互联网上使用的分布型的文件搜集获取网络协议。gopher协议是在HTTP协议出现之 前,在internet上常见重用的协议,但是现在已经用的很少了;

绕过姿势

(1)利用@,当网站限制只能访问 http://www.xxx.com类型的域名时,可以采用http基本身份认证的方式绕过,如:http://www.xxx.com@www.xxc.com

在对@解析域名中,不同的处理函数存在处理差异,例如:

http://www.aaa.com@www.bbb.com@www.ccc.com

在PHP的parse_url中会识别 www.ccc.com,而libcurl则识别为 www.bbb.com。

2、绕过限制请求IP不为内网地址:

(1)采用短网址绕过

(2)利用特殊域名,xip.io可以指向任意域名(原理是DNS解析),即 127.0.0.1.xip.io,可以解析为127.0.0.1

(3)采用进制转换,127.0.0.1 八进制:0177.0.0.1;十六进制:0x7f.0.0.1;十进制:2130706433

(4)利用[::]http://[::]:80/ 会解析为 http://127.0.0.1

(5)添加端口号,http://127.0.0.1:8080

(6)利用句号,127。0。0。1 会解析为 127.0.0.1

(7)采用302跳转

3、限制请求只为http协议:

(1)采用302跳转

(2)采用短地址

危险函数

根据后台使用的函数的不同,相应的影响和利用方法也不一样,PHP中下面函数的使用不当会导致SSRF:

file_get_contents()
fsockopen()
curl_exec()

file_get_contents()

这个函数的作用是将整个文件读入一个字符串中,并且此函数是用于把文件的内容读入到一个字符串中的首选方法。

比如:下面的代码执行结果是输出test.txt文件里面的字符串。

<?php echo file_get_contents(“test.txt”); ?>

fsockopen()

使用fsockopen函数实现获取用户制定url的数据(文件或者html)。

curl_exec()

该函数可以执行给定的curl会话。

防护

1.禁止跳转

2.过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。

3.禁用不需要的协议,仅仅允许http和https请求。可以防止类似于file://, gopher://, ftp:// 等引起的问题

4.设置URL白名单或者限制内网IP(使用gethostbyname()判断是否为内网IP)

5.限制请求的端口为http常用的端口,比如 80、443、8080、8090

的信息是否符合标准。

6.统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/786911.html

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

相关文章

企业软文怎么写:深度剖析写作技巧!

在当今信息爆炸的时代&#xff0c;企业软文已经成为了企业营销的重要手段之一。一篇高质量的企业软文不仅能够提升企业的品牌知名度&#xff0c;还能够为企业带来实际的经济效益。那么&#xff0c;如何才能写出一篇高质量的企业软文呢&#xff1f;本文伯乐网络传媒将从软文标题…

服务器负载均衡算法有哪些

算法举例 服务器负载均衡算法是用于分配网络流量到多个服务器的策略&#xff0c;以实现负载均衡和提高系统性能。以下是一些常见的服务器负载均衡算法的详细说明&#xff1a; 轮询&#xff08;Round Robin&#xff09;算法&#xff1a; 轮询算法是最简单且常见的负载均衡算法之…

ES6基础知识四:对象新增了哪些扩展?

一、参数 ES6允许为函数的参数设置默认值 function log(x, y World) {console.log(x, y); }console.log(Hello) // Hello World console.log(Hello, China) // Hello China console.log(Hello, ) // Hello函数的形参是默认声明的&#xff0c;不能使用let或const再次声明 fu…

minitab学习系列(3)--DOE结果分析

系列文章目录 文章目录 系列文章目录前言一、DOE五步法二、分析要点1.ANOVA表的分析2.分析评估回归的总效果3.分析评估各项效应的显著性 三、图像解释1.Pareto图2.正态效应图3.半正态效应图4.残差图5.Box-Cox变换结果图 四、判断模型是否需要改进五、删减模型判断6.主效应图7.等…

大数据技术之Hive2

目录标题 3、Hive 数据类型3.1 基本数据类型&#xff1a;3.2 集合数据类型&#xff1a;3.3 类型转化 4、DDL数据定义4.1 创建数据库4.2 查询数据库4.3 创建表4.4 管理表4.5 外部表4.6 管理表与外部表的相互转换4.7 分区表4.7.1 分区表基本操作4.7.2 分区表注意事项 4.7 修改表4…

C#using关键字的使用方法

这篇日志记录下C#中using关键字的使用方法。 Using的使用大致分别以下三种&#xff1a; 1&#xff1a;using指令&#xff08;命名空间&#xff09; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; …

Java常见练手程序《“书写”百遍,其义自见》

1、锻炼重写方法、抽象类定义、常量、自定义异常与调用。 建立一个Java抽象类Drink&#xff0c;应当 a、声明一个抽象方法taste() 该方法负责输出饮料的味道 b、声明int型常量来代表不同的饮料类型 咖啡、啤酒、牛奶 c、声明静态方法getDrink(int drinkType) 根据传入…

1. 业务场景讲解设计模式(简单工厂模式)

现阶段我之所以再次学习设计模式&#xff0c;是因为感受到企业项目的多层封装与调用的复杂性&#xff0c;既然这样那肯定是有自己的设计道理的&#xff0c;能让系统更具有拓展性&#xff0c;安全性&#xff0c;易维护性。所以&#xff0c;我希望这次站在领导设计者的角度去实现…

如何为IP申请一个SSL证书?

打开www.zerossl.com官网&#xff0c;然后我们直接输入服务器的IP地址&#xff0c;然后直接点击Next Step。 接下来&#xff0c;我们输入自己的邮箱账号&#xff0c;直接注册。&#xff08;如果点击后没有反应&#xff0c;请挂代理访问。&#xff09; 然后我们到了下一页直接点…

mmcv与cuda,pytorch版本匹配要求

mmcv与cuda、pytorch版本兼容要求&#xff0c;见mmcv官方文档&#xff1a;https://mmcv.readthedocs.io/zh_CN/latest/get_started/installation.html#pip 安装部分。 目前网页上默认最新版2.x版本&#xff0c;若要切换旧版&#xff0c;点击页面左下角切换即可。 查看自己的cud…

面向对象设计原则和GOF23种设计模式

写在前面 本文一起看下面向对象的设计原则和GOF 23 种常用的设计模式。 1&#xff1a;面向对象设计原则 面向对象设计原则可以简单的总结为SOLID&#xff0c;分别看下。 1.1&#xff1a;S single responsibility principle&#xff0c;单一职责原则&#xff0c;即一个类只…

百叶隔断为空间添加时尚元素

百叶隔断作为一种常见的空间分隔方式&#xff0c;早已成为了许多家庭、工作场所不可缺少的装修元素之一。而在装修中&#xff0c;如何利用百叶隔断为间添加时尚元素呢&#xff1f; 1. 选择合适的材质 百叶隔断的材质种类繁多&#xff0c;包括木质、金属、PVC等等。在选择时&…

SIT1021,可替代TJA1021一款本地互联网络(LIN)物理层收发器

SIT1021 是一款本地互联网络&#xff08;LIN&#xff09;物理层收发器&#xff0c;符合 LIN 2.0、LIN 2.1、LIN 2.2、LIN 2.2A、 ISO 17987-4:2016 (12V) 和 SAE J2602 标准。主要适用于使用 1kbps 至 20kbps 传输速率的车载网 络。SIT1021 通过 TXD 引脚控制 LIN 总线的状态&a…

MPLS多协议标签交换

最初MPLS多协议标签交换和包交换是竞争关系 随着包交换的快速发展为特快包交换 MPLS最终落败但开展其它业务并且还使用了特快包交换中的FIB表 开展业务为&#xff1a; 解决BGP路由黑洞的最佳方案MPLS VPN MPLS TE 流量工程 MPLS多协议标签交换 工作过程 控制层面&#x…

【Apollo星火计划】—— Cyber基础概念|通信机制

文章目录 前言基本概念1Cyber简介通信构成Bazel简介 TEST1. 构建单包工程TEST2. 构建多包工程基本概念2话题通信服务通信参数通信数据通信基础ProtobufProtobuf简介Protobuf 文件编写Protobuf编译 TEST3. protobuf实验TEST4.C话题通信实践案例TEST5.C服务通信实践案例TEST6.C参…

electron dialog.showMessageBox使用案例

electron 版本&#xff1a;25.3.1 index.html <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>Hello World!</title><meta http-equiv"Content-Security-Policy" content"script-src self unsa…

在linux中进行arm交叉编译体验tiny6410裸机程序开发流程

在某鱼上找了一个友善之臂的Tiny6410开发板用来体验一下嵌入式开发。这次先体验一下裸机程序的开发流程&#xff0c;由于这个开发板比较老旧了&#xff0c;官方文档有很多过期的内容&#xff0c;所以记录一下整个过程。 1. 交叉编译器安装 按照光盘A中的文档《04- Tiny6410 L…

C语言非常道 c0609.c 练习6.8

结构类型处理复杂的数据 结构声明位于源文件的开头&#xff0c;相当于结构类型的全局声明 注意&#xff1a;读取或者写入某个文件&#xff0c;都要先打开文件 写入读出函数的参数类型&#xff0c;实参和形参的类型要对应&#xff1b; 上述&#xff1a; & emp 得到一个指向…

Appium+python自动化(二十一)- 让猴子按你指令大闹手机,让我们都成为耍猴高手(超详解)

耍猴第一式 - 隐藏命令 monkey隐藏的两个命令&#xff1a; 1 –pck-blacklist-file<黑名单文件><br><br>–pck-whitelist-file<白名单文件> monkey还有一个隐藏的命令那就是&#xff1a; 1 –f<脚本文件>:可以指定monkey的自定义脚本 一般…

批处理下载视频

一、安装annie Github 上 annie 下载神器的安装及使用教程: https://blog.csdn.net/qq_41780295/article/details/119795152 二、视频下载 安装了annie之后&#xff0c;我们就可以使用命令行下载视频文件了&#xff1b; 例如&#xff0c;打开B站&#xff0c;随便点开一个视频…