SSRF服务端请求伪造漏洞

news2024/10/24 18:23:57

文章目录

  • 一、SSRF漏洞描述
  • 二、漏洞危害
  • 三、可能存在SSRF漏洞的地方
  • 四、常见漏洞函数
    • Java中的SSRF
    • Python中的SSRF
    • PHP中的SSRF
  • 五、可利用的协议
  • 六、SSRF过滤绕过方法
  • 七、漏洞修复建议


一、SSRF漏洞描述

SSRF(全称Server-Side Request Forgery),即服务器端请求伪造。SSRF是一种由攻击者构造请求,服务端发起请求的漏洞。SSRF攻击的目标是外网无法访问的内部系统(服务端可以请求到与自身相连而与外网隔离的内部系统)。SSRF形成的原因是服务端提供了从其他服务器获取数据的功能,但没有对目标地址做过滤与限制,导致攻击者在服务端从指定URL地址获取内部系统的数据(文件、图片等)。


二、漏洞危害

1、利用漏洞探测其他应用,如对服务器所在的内网环境进行端口扫描、指纹识别、资源访问等。
2、利用漏洞攻击其它内网应用(如内网web应用、redis服务等),特定情况可结合内网RCE等漏洞突破互联网边界。
3、利用file协议读取服务器本地文件,造成信息泄露风险。
4、云上SSRF漏洞可读取云主机的元数据信息。


三、可能存在SSRF漏洞的地方

  • 转码服务
  • 在线翻译
  • 获取超链接的标题等内容进行显示
  • 请求远程服务器资源的地方,图片加载与下载(通过URL地址加载或下载图片)
  • 图片、文章收藏功能
  • 对外发起网络请求的地方、网站采集、网页抓取的地方
  • 一切要你输入网址的地方和可以输入ip的地方
  • 数据库内置功能(Mongodb的copyDatabase函数)
  • 从URL关键字中寻找:share、wap、url、link、src、source、target、u、3g、display、sourceURL、imageURL、domain

四、常见漏洞函数

Java中的SSRF

  • HttpURLConnection

当使用HttpURLConnection发起HTTP请求时,当没有对url参数进行限制,此时就可能存在SSRF漏洞,可以通过修改url参数来探测、攻击其他应用,漏洞代码示例如下:

String url = request.getParameter("url");
StringBuffer response = new StringBuffer();
URL pic = new URL(url);
HttpURLConnection con = (HttpURLConnection)pic.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("User-Agent", "Mozilla/5.0");
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
  • httpClient

当使用httpClient获取图片二进制流时,如果url参数可控且没有对url参数进行校验,此时就可能存在SSRF漏洞,可以通过修改url参数来探测、攻击其他应用,漏洞代码示例如下:

CloseableHttpClient httpClient = HttpClients.createDefault();
HttpGet getRequest = new HttpGet(url);
HttpResponse response = httpClient.execute(getRequest);
  • Socket

当使用Socket建立链接判断ip对应端口的联通性,如果host和port参数是由用户输入,且没有对可访问的host和port进行限制,此时就会存在SSRF漏洞,利用SSRF进行端口扫描,漏洞代码示例如下:

String host = request.getParameter("host");
String port = request.getParameter("port");
socket = new Socket(host, port);
  • OkHttpClient

当使用OkHttpClient发起http请求时,如果url参数可控且没有对url参数进行校验,此时就可能存在SSRF漏洞,可以通过修改url参数来探测、攻击其他应用,漏洞代码示例如下:

String url = request.getParameter("url");
OkHttpClient httpClient = new OkHttpClient();
Request request = new Request.Builder()     
 	   	   .url(url)     
           .build();
Response response = httpClient.newCall(request).execute();
return response.body().string();
  • ImageIO

当使用ImageIO读取远程图片时,如果url参数可控且没有对url参数进行校验,此时就可能存在SSRF漏洞,可以通过修改url参数来探测、攻击其他应用,漏洞代码示例如下:

String imgurl = request.getParameter("url");
URL url = new URL(imgurl);
Image image = ImageIO.read(url);
return image;

Python中的SSRF

python中可以造成SSRF漏洞的库有pycurl、urllib、urllib3、requests等,如urllib库请求一个url,如果url参数可控且没有对url参数进行校验,此时就可能存在SSRF漏洞,可以通过修改url参数来探测、攻击其他应用,漏洞代码示例如下:

import urllib.request
req = urllib.request.urlopen("url")
print(req.read())

PHP中的SSRF

  • curl_exec()

通过get传参变量url,然后再把这个变量url代入curl函数,通过curl_exec发起一个请求,如果url参数可控且没有对url参数进行校验,此时就可能存在SSRF漏洞,可以通过修改url参数来探测、攻击其他应用,漏洞代码示例如下:

<?php
function curl($url){    
  $ch = curl_init(); 
  curl_setopt($ch,CURLOPT_URL,$url);   
  #curl_setopt($ch,CUPLOPT_HEADER,1);    
  curl_exec($ch);    
  curl_close($ch);
}
  $url = $_GET['url'];
  curl($url);
?>
  • file_get_contents()

file_get_content函数从用户指定的url获取内容,并展示给用户。当url参数可控就可能存在SSRF漏洞,此时可以利用file协议读取服务器上任意文件,漏洞代码示例如下:

<?php
$url = $_GET['url'];
echo file_get_contents($url);
?>
  • fsockopen()

fsockopen 函数实现对用户指定url数据的获取,该函数使用socket(端口)跟服务器建立tcp连接,传输数据。变量host为主机名,port为端口,当host和port可控时就可能存在SSRF漏洞,通过遍历host和port进行内网端口扫描,漏洞代码示例如下:

<?php
$host=$_GET['url'];
$port=$_GET['port'];
$fp = fsockopen($host, $port, $errno, $errstr, 30);
if (!$fp) {    
    echo "$errstr ($errno)<br />\n";
} else {    
   fwrite($fp);    
   while (!feof($fp)) {        
	 echo fgets($fp, 128);    
   }    
   fclose($fp);
}?>

五、可利用的协议

  • http/https,发起HTTP请求
  • file,如果会回显数据的话,那么我们可以使用file协议读取目标本地文件
  • dict,可以用来探测目标端口
  • gopher,可以发送get/post请求
  • ftp,文件传输协议
  • ………

六、SSRF过滤绕过方法

  • 0.0.0.0这个IP地址可以直接访问到本地
  • 把IP地址的格式进行转换从而绕过
    (通常我们用的是127.0.0.1,但事实上127这个段的地址都用来表示本机地址了,所以像127.155.155.155这样的也是可以的,还可以进行进制转换也是可以的)
    8进制(把127转为八进制写的时候前面加个0):0177.0.0.1
    16进制(把127转为十六进制写的时候前面加个0x):0x7f.0.0.1
    16进制整数格式:0x7f000001
    10进制证书格式(把16整数转为10进制):2130706433
  • Localhost
  • 利用@绕过例如,www.baidu.com@127.0.0.1
  • 利用非HTTP协议,例如上面说到的gopher或者dict
  • 利用DNS解析(DNSlog)
  • 利用IPv6
  • 添加端口号
  • [::]代替127.0.0.1,比如http://[::]:80,这样也是可以访问到的。

七、漏洞修复建议

1、屏蔽或过滤返回的详细信息

2、仅允许HTTP和HTTPS请求,禁用高危协议如:file://gopher://ftp://dict://

3、限制请求的端口为http请求,如:80443

4、设置请求的URL白名单或者限制内网IP

5、统一错误信息,避免攻击者可以根据错误信息来判断远端服务器的端口状态

6、针对云上SSRF读取元数据可以设置元数据访问模式为加固模式,即通过token鉴权访问元数据接口

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

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

相关文章

【软件工程】软件工程入门

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;软件开发必练内功_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前…

多模态大语言模型(MLLM)-Blip3/xGen-MM

论文链接&#xff1a;https://www.arxiv.org/abs/2408.08872 代码链接&#xff1a;https://github.com/salesforce/LAVIS/tree/xgen-mm 本次解读xGen-MM (BLIP-3): A Family of Open Large Multimodal Models 可以看作是 [1] Blip: Bootstrapping language-image pre-training…

uniapp:uni.createSelectorQuery函数结合vue的watch函数使用实例

提醒 本文实例是使用uniapp进行开发演示的。 一、需求场景 在开发详情页面时&#xff0c;不同产品描述文案不同&#xff0c;有的文案比较长&#xff0c;需求上要求描述文案最多展示4行文案&#xff0c;少于4行文案&#xff0c;全部显示&#xff0c;此UI高度自动适配&#xff0c…

智慧城管综合管理系统源码,微服务架构,基于springboot、vue+element+uniapp技术开发,支持二次开发

智慧城管源码&#xff0c;智慧城管执法办案系统源码 智慧城管综合执法办案平台是智慧城市框架下&#xff0c;依托物联网、云计算、多网融合等现代化技术&#xff0c;运用数字基础资源、多维信息感知、协同工作处置、智能化辅助决策分析等手段&#xff0c;形成具备高度感知、互联…

pikachu靶场-Cross-Site Scripting(XSS)

sqli-labs靶场安装以及刷题记录-dockerpikachu靶场-Cross-Site Scripting pikachu靶场的安装刷题记录反射型xss(get)反射型xss(post)存储型xssDOM型xssDOM型xss-xxss盲打xss之过滤xss之htmlspecialcharsxss之href输出xss之js输出 pikachu靶场的安装 刷题记录 反射型xss(get) …

《什么是大模型、超大模型和 Foundation Model?》

前言 大模型旨在解决人类面临的各种问题,提高人类的生产力和生活质量。是一门涉及计算机科学、数学、哲学、心理学等多个领域的交叉学科,旨在研究如何使计算机能够像人类一样思考、学习、推理和创造。大模型的出现,让很多产业人士认为这项技术会改变信息产业格局,即基于数…

解码专业术语——应用系统开发项目中的专业词汇解读

文章目录 引言站点设置管理具体要求包括&#xff1a; Footer管理基于URL的权限控制利用数据连接池优化数据库操作什么是数据连接池&#xff1f;优化的优势 利用反射改造后端代码&#xff0c;AJAX反射的作用及其在后端代码中的应用AJAX 实现前后端无刷新交互 引言 创新实践项目二…

ThingsBoard规则链节点:Delete Attributes节点详解

引言 删除属性节点简介 用法 含义 应用场景 实际项目运用示例 智能家居安全系统 物流跟踪解决方案 工业自动化生产线 结论 引言 ThingsBoard是一个开源的物联网平台&#xff0c;它提供了设备管理、数据收集与处理以及实时监控等功能。其中&#xff0c;规则引擎是其核心…

Clickhouse 笔记(一) 单机版安装并将clickhouse-server定义成服务

ClickHouse 是一个高性能的列式数据库管理系统&#xff08;DBMS&#xff09;&#xff0c;主要用于在线分析处理&#xff08;OLAP&#xff09;场景。它由俄罗斯搜索引擎公司 Yandex 开发&#xff0c;并在 2016 年开源。ClickHouse 以其卓越的查询性能和灵活的扩展性而闻名&#…

模拟信号采集显示器+GPS同步信号发生器制作全过程(焊接、问题、代码、电路)

1、制作最小系统板 在制作最小系统板的时候&#xff0c;要用USB转TTL给板子供电&#xff0c;留了一个电源输入的四个接口&#xff0c;同时又用排针引出来VCC和GND用于后续其他外设的电源供应&#xff0c;电源配有电源指示灯和保护电容&#xff0c; 当时在焊接的时候把接口处的…

云计算实验1——基于VirtualBox的Ubuntu安装和配置

实验步骤 1、VirtualBox的安装 本实验使用VirtualBox-7.0.10 进行演示。对于安装包&#xff0c;大家可以前往 VirtualBox官网下载页面(https :/ / www. virtualbox.org/wiki/Downloads)下载其7.0版本安装包进行安装&#xff0c;或者直接使用QQ群的安装包VirtualBox-7.0.10-15…

基于开源Jetlinks物联网平台协议包-MQTT自定义主题数据的编解码

目录 前言 1.下载官方协议包 2.解压 3.自定义主题 4.重写解码方法 5.以下是我解析后接收到的数据 前言 最近这段时间&#xff0c;一直在用开源的Jetlinks物联网平台在学习&#xff0c;偶尔有一次机会接触到物联网设备对接&#xff0c;在协议对接的时候&#xff0c;遇到了…

Spring面试题——第五篇

1. Spring的优点 轻量级和非侵入性&#xff1a;不需要引入大量的依赖和配置。面向切面编程&#xff1a;Spring提供了强大的面向切面编程&#xff0c;允许用户定义横切关注点&#xff0c;并将其与核心业务逻辑分离&#xff0c;提高了灵活性。依赖注入&#xff08;DI&#xff09…

java对接钉钉发送消息(纯萌新文档解惑)

java对接钉钉&#xff08;纯萌新文档解惑&#xff09; 注意&#xff1a;不是其他直接给你个写好的钉钉工具类&#xff0c;但不知道它怎么来的。是以钉钉官方文档为准&#xff0c;流程是什么&#xff0c;你想要什么可以自己在文档找&#xff08;所有文档都有只是萌新看着懵&…

Kafka高可用性原理深度解析

在分布式系统中&#xff0c;高可用&#xff08;High Availability, HA&#xff09;是指系统在面对硬件故障、网络分区、软件崩溃等异常情况时&#xff0c;仍能继续提供服务的能力。对于消息队列系统而言&#xff0c;高可用性尤为重要&#xff0c;因为它通常作为数据流通的中枢&…

SSD | (十)PCIe介绍(上)

文章目录 📚从PCIe的速度说起📚PCIe拓扑结构🐇PCI——总线型拓扑结构🐇PCIe——树形拓扑结构📚PCIe分层结构📚PCIe TLP类型📚PCIe TLP结构🐇通用结构🐇具体TLP的Header📚从PCIe的速度说起 PCIe发展至今,速度一代比一代快。 连接速度所示1、2等是指PCIe链接…

Python 打包成 EXE 的方法详解

#1024程序员节&#xff5c;征文# 日常开发中&#xff0c;python由于其便捷性成为了很多人的首选语言&#xff0c;但是python的环境配置也是有点麻烦的&#xff0c;那么我们如何让其变得更加友好呢&#xff1f;没错&#xff0c;就是打包成exe可执行文件。 一、PyInstaller 简介…

修改windows11的hosts,配置127.0.0.1域名(最清晰)

这里记录的是学习短链接项目&#xff0c;通过配置127.0.0.1域名&#xff0c;达到可以通过域名代替127.0.0.1访问127.0.0.1下的某个端口的服务&#xff0c;达到短链接的前缀的效果&#xff0c;这里展示windows11的更改过程。 一、hosts文件路径 C:\Windows\System32\drivers\e…

【Java数据结构】---哈希表

乐观学习&#xff0c;乐观生活&#xff0c;才能不断前进啊&#xff01;&#xff01;&#xff01; 我的主页&#xff1a;optimistic_chen 我的专栏&#xff1a;c语言 &#xff0c;Java 欢迎大家访问~ 创作不易&#xff0c;大佬们点赞鼓励下吧~ 前言 在顺序结构以及平衡树中&…

littlefs源码分析1-设计思考

1.littlefs设计目的 littlefs 最初是作为一个实验而构建的&#xff0c;目的是在微控制器的环境中了解文件系统设计。目的是&#xff1a;构建一个在不使用无限制内存的情况下对电源丢失和闪存磨损具有弹性的文件系统。 这对嵌入式文件系统littlefs提出了三个主要要求&#xff1…