当前位置: 首页 > news >正文

SSRF(服务器端请求伪造)漏洞

CSRF漏洞与SSRF漏洞的主要区别在于伪造目标的不同。

一、SSRF是什么

SSRF漏洞:(Server-Side Request Forgery,服务器端请求伪造)是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)。

简易理解:
比如 : A网站,是一个所有人都可以访问的外网网站,B网站是一个他们内部的OA网站。我们普通用户只可以访问a网站,不能访问b网站。但是我们可以通过a网站做中间人,访问b网站,从而达到攻击b网站需求。
正常用户访问网站的流程是:
    输入A网站URL --> 发送请求 --> A服务器接受请求(没有过滤),并处理 -->返回用户响应
【那网站有个请求是www.baidu,com/xxx.php?image=URL】
那么产生SSRF漏洞的环节在哪里呢?安全的网站应接收请求后,检测请求的合法性
产生的原因:服务器端的验证并没有对其请求获取图片的参数(image=)做出严格的过滤以及限制,导致A网站可以从其他服务器的获取数据
例如:
www.baidu.com/xxx.php?image=www.abc.com/1.jpg
如果我们将www.abd.com/1.jpg换为与该服务器相连的内网服务器地址会产生什么效果呢?
如果存在该内网地址就会返回1xx 2xx 之类的状态码,不存在就会其他的状态码。
终极简析 : SSRF漏洞就是通过篡改获取资源的请求发送给服务器,但是服务器并没有检测这个请求是否合法的,然后服务器以他的身份来访问其他服务器的资源。

二、SSRF形成原因

前提:服务器具有主动发起请求的功能
SSRF形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。利用的是服务端的请求伪造
ssrf是利用存在缺陷的web应用作为代理攻击远程和本地的服务器。

三、SSRF危害

1、可以对外网服务器所在的内网、本地进行端口扫描,获取一些服务的banner信息 。
2、攻击运行在内网或者本地的应用程序。
3、对内网web应用进行指纹识别,通过访问默认文件实现 。
4、攻击内外网的web应用。sql注入、redis等。
5、利用file协议读取本地文件等。(文件包含漏洞类似)

四、SSRF漏洞寻找

个人觉得所有调外部资源的参数都有可能存在ssrf漏洞。
1)分享:通过URL地址分享网页内容
2)转码服务
3)在线翻译
4)图片加载与下载:通过URL地址加载或下载图片
5)图片、文章收藏功能
6)未公开的api实现以及其他调用URL的功能
7)从URL关键字中寻找Share、wap、url、link、src、source、target、u、3g、display、sourceURL、imageURL、domain

五、SSRF防护

重点解决两个问题:
  • 用户请求的合法性
  • 服务器行为的合规性
1、过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。
2、统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态。
3、限制请求的端口为http常用的端口,比如,80,443,8080,8090。
4、黑名单内网ip。避免应用被用来获取获取内网数据,攻击内网。
5、禁用不需要的协议。仅仅允许http和https请求。可以防止类似于file:///,gopher://,ftp:// 等引起的问题。
6、双向过滤用户端参数

六、Pikachu靶场中的SSRF

搭建环境: Pikachu靶场

docker安装:docker run -d  --rm --name pikachu -p 8765:80 area39/pikachu

pikachu——SSRF - 学安全的小白 - 博客园 (cnblogs.com)

6.1、SSRF(curl)

漏洞产生的地方: /app/vul/ssrf/ssrf_curl.php
服务器没有对传进来的URL参数进行过滤,并且把服务器请求的结果输出到了前端。

6.1.1、读取本地文件

6.1.2、扫描内网端口(http/s和dict协议)

说明主机开启了22端口
如果没没有响应就说明该端口处于关闭状态。

6.1.3、 探测内网主机存活(http/s协议)

可以借助burp中的爆破模块进行存活主机探测
通过截图可以看出136主机存活。

6.2、SSRF(file_get_contents

漏洞产生的地方: /app/vul/ssrf/ssrf_fgc.php

七、靶机部署

实战 | 利用SSRF渗透内网主机-上 - 墨天轮   实战 | 利用SSRF渗透内网主机-上
实战 | 利用SSRF渗透内网主机-中 - 墨天轮   实战 | 利用SSRF渗透内网主机-中
实战 | 利用SSRF渗透内网主机-下 - 墨天轮   实战 | 利用SSRF渗透内网主机-下
Weblogic中存在一个SSRF漏洞,利用该漏洞可以发送任意HTTP请求,进而攻击内网中redis、fastcgi等脆弱组件。
CVE编号:CVE-2014-4210
靶机:192.168.11.135
下载vulhub:git clone https://github.com/vulhub/vulhub.git
进入目录:cd ./vulhub-master/weblogic/ssrf/
启动环境:docker-compose up -d
 
访问:http://192.168.3.222:7001/uddiexplorer/SearchPublicRegistries.jsp,出现如下页面说明测试环境ok

7.1、漏洞复现

开启Burp代理,提交表单
从返回页面的结果的报错上看,当提交表单的时候会访问下面这个URL,并做XMLSoap解析,这个错误就是我们SSRF漏洞产生的关键点
operator=http%3A%2F%2Fwww-3.ibm.com%2Fservices%2Fuddi%2Finquiryapi&rdoSearch=name&txtSearchname=1&txtSearchkey=2&txtSearchfor=3&selfor=Business+location&btnSubmit=Search
为了验证是否存在SSRF漏洞,将operator的值改为DNSLog生成的记录:
在DNSLog中可以看到请求的内容,说明存在SSRF漏洞。

7.2、探测内网存活IP

>>> 若ip不存在时返回如下信息(会一直请求该地址,直到超时)
 
>>> 若ip存在则返回如下信息

7.3、探测端口

>>> 端口不存在,将会返回`could not connect over HTTP to server`。
>>> 可访问的端口将会得到错误,一般是返回status code(如下图),如果访问的非http协议,则会返回`did not have a valid SOAP content-type`。
通过错误的不同,即可探测内网状态。

八、检测SSRF的方法与工具

8.1、Burp Collaborator

渗透测试:Burp suite 之 Burp Collaborator模块-【黑基网】 (hackbase.net)
10 SSRF 漏洞:外网隔离就绝对安全了吗?_哔哩哔哩_bilibili
只有pro版本可以使用该功能: 

8.2、SSRFmap

https://github.com/swisskyrepo/SSRFmap
利用它 可检测与利用SSRF 漏洞, 同时它也整合了一些常用漏洞可以结合 SSRF 去利用,比如 fastjson、mysql、github 的一些历史漏洞,还有端口扫描、读取文件等利用功能,都是实用的漏洞利用能力。
SSRF 通常用于利用对其他服务的操作,此框架旨在轻松查找和利用这些服务。 SSRFmap 将 Burp 请求文件作为输入和模糊参数
$ git clone https:// github.com/ swisskyrepo/ SSRFmap
$ cd SSRFmap/
$ pip3 install - r requirements.txt
$ python3 ssrfmap.py
使用:
1、 首先,您需要一个带有模糊参数的请求,Burp 请求与 SSRFmap 配合得很好。 它们应如下所示。 https://github.com/swisskyrepo/SSRFmap/tree/master/data 文件夹中提供了更多示例。
复制到data/目录下的一个文件中:
python3 ssrfmap.py -r data/pikachu_ssf.txt -p url -m readfiles,portscan  # -m的取值来自于 SSRFmap/modules/下的文件

九、参考

84、ssrf服务器请求伪造_哔哩哔哩_bilibili

10 SSRF 漏洞:外网隔离就绝对安全了吗?_哔哩哔哩_bilibili

检测 SSRF 的通用方法和工具 - 知乎 (zhihu.com)

相关文章:

SSRF(服务器端请求伪造)漏洞

CSRF漏洞与SSRF漏洞的主要区别在于伪造目标的不同。 一、SSRF是什么 SSRF漏洞:(Server-Side Request Forgery,服务器端请求伪造)是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从…...

【Axure动态面板】利用动态面板实现树形菜单的制作

利用动态面板,简单制作高保真的树形菜单。 一、先看效果 https://1poppu.axshare.com 二、实现思路 1、菜单无非就是收缩和展开,动态面板有个非常好的属性:fit to content,这个属性的含义是:面板的大小可以根据内容多少…...

Android 实现 RecyclerView下拉刷新,SwipeRefreshLayout上拉加载

上拉、下拉的效果图如下&#xff1a; 使用步骤 1、在清单文件中添加依赖 implementation ‘com.android.support:recyclerview-v7:27.1.1’ implementation “androidx.swiperefreshlayout:swiperefreshlayout:1.0.0” 2、main布局 <LinearLayout xmlns:android"http…...

使用MethodInterceptor和ResponseBodyAdvice做分页处理

目录 一、需求 二、代码实现 父pom文件 pom文件 配置文件 手动注册SqlSessionFactory&#xff08;MyBatisConfig &#xff09; 对象 实体类Users 抽象类AbstractQuery 查询参数类UsersQuery 三层架构 UsersController UsersServiceImpl UsersMapper UsersMapper.…...

WEB集群——LVS-DR 群集、nginx负载均衡

1、基于 CentOS 7 构建 LVS-DR 群集。 2、配置nginx负载均衡。 一、 LVS-DR 群集 1、LVS-DR工作原理 LVS-DR&#xff08;Linux Virtual Server Director Server&#xff09; 名称缩写说明 虚拟IP地址(Virtual IP Address) VIPDirector用于向客户端计算机提供服务的IP地址真实…...

倒计时87天!软考初级信息处理技术员2023下半年报名考试攻略

软考初级信息处理技术员2023下半年报名条件&#xff1a; 1、凡遵守中华人民共和国宪法和各项法律&#xff0c;恪守职业道德&#xff0c;具有一定计算机技术应用能力的人员&#xff0c;均可根据情况报名参加相应专业类别、级别的考试。 2、获准在中华人民共和国境内就业的外籍…...

【腾讯云 Cloud Studio 实战训练营】使用Cloud Studio构建SpringSecurity权限框架

1.Cloud Studio&#xff08;云端 IDE&#xff09;简介 Cloud Studio 是基于浏览器的集成式开发环境&#xff08;IDE&#xff09;&#xff0c;为开发者提供了一个永不间断的云端工作站。用户在使用 Cloud Studio 时无需安装&#xff0c;随时随地打开浏览器就能在线编程。 Clou…...

c语言每日一练(4)

五道选择题 1、有以下代码&#xff0c;程序的输出结果是( ) #include <stdio.h> int main() {int a 0, b 0;for (a 1, b 1; a < 100; a){if (b > 20) break;//1if (b % 3 1)//2{b b 3;continue;}b b-5;//3}printf("%d\n", a);return 0; } A.1…...

VB字符转换

都是类型转换&#xff0c;转换成数值类型 VAL是根据情况来系统自动决定转换成什么类型&#xff0c; CDbl是转换成双精度浮点数据类型 VB中C带头的强制转换函数有&#xff1a; CBool(expression) ---- 转换成布尔型 CByte(expression) ---- 转换成字节型 CCur(expression) --…...

【C++进阶之路】map与set的基本使用

文章目录 一、set系列1.set①insert②find③erase④lower_bound与upper_bound 2.multiset①count②equal_range 二、map系列1.map①insert1.插入pair的四种方式2.常用两种方式 ②[]2.multimap①count②equal_range 一、set系列 1.set ①insert 函数分析&#xff08;C98&…...

代码随想录算法训练营day56

文章目录 Day56两个字符串的删除操作题目思路代码 编辑距离题目思路代码 Day56 两个字符串的删除操作 583. 两个字符串的删除操作 - 力扣&#xff08;LeetCode&#xff09; 题目 给定两个单词 word1 和 word2&#xff0c;找到使得 word1 和 word2 相同所需的最小步数&#…...

通话降噪算法在手机和IOT设备上的应用和挑战

随着电子产品的升级换代&#xff0c;用户对通话质量的要求也越来越高。通话降噪算法对通话质量起到了关键核心的作用。计算资源的提升使得深度学习模型在便携式的低功耗芯片上面跑起来了&#xff0c;器件成本降低让IoT设备开始使用骨导传感器&#xff0c;&#xff0c;那怎么样才…...

Pet Detection System (PDS)

宠物医院检验设备物联系统...

【OpenCV常用函数:颜色空间转换、阈值化】cv2.cvtColor()+cv2.threshold()

1、cv2.cvtColor() 对图像进行颜色空间的转换 cv2.cvtColor(src, code[, dst[, dstCn]])1) src: 输入图像 2) code: 颜色空间转换编码&#xff0c;常使用的GRAY和RGB之间的转换 cv2.COLOR_BGR2GRAY, cv2.COLOR_RGB2GRAY, cv2.COLOR_GRAY2BGR, cv2.COLOR_GRAY2RGB 3) dst: 输出…...

一键登录和短信验证登录,到底有什么区别?

一键登录是什么&#xff1f; 本机号码一键登录验证是一种登录认证方式&#xff0c;通过获取用户手机上的本机号码来验证用户身份&#xff0c;从而实现快捷登录和简化登录流程的目的。 在使用一键登录时&#xff0c;首先需要用户在登录页面选择使用本机号码一键登录&#xff0…...

史上最精简Android RecyclerView实现拖拽排序改变位置代码

要实现RecyclerView的长按拖动改变位置&#xff0c;可以使用ItemTouchHelper类来处理拖动和滑动的操作。下面演示如何实现长按拖动改变位置&#xff1a; 首先&#xff0c;在你的Activity或Fragment中&#xff0c;初始化RecyclerView和ItemTouchHelper&#xff1a; RecyclerVi…...

centos 7 系统上重启 mysql 时报错 Failed to restart mysqld.service: Unit not found.

在 centos 7 系统上&#xff0c;使用常规命令&#xff1a;systemctl restart mysql 或 service mysqld restart 重启 mysql 时都会报如下错误&#xff1a; Failed to start mysqld.service: Unit not found. 根据所报错误&#xff0c;在网上搜罗了一圈&#xff0c;未果&#x…...

时间复杂度空间复杂度相关练习题

1.消失的数字 【题目】&#xff1a;题目链接 思路1&#xff1a;排序——》qsort快排——》时间复杂度O&#xff08;n*log2n&#xff09; 不符合要求 思路2&#xff1a;&#xff08;0123...n)-(a[0]a[1][2]...a[n-2]) ——》 时间复杂度O&#xff08;N&#xff09;空间复杂度…...

Linux | Ubuntu18.04安装RTX 4060显卡驱动完整教程

文章目录 概述一、定义介绍二、操作教程(一)、前期准备1.进入终端界面2.关闭界面显示器3.禁用其他显卡驱动4.卸载残余显卡驱动5.下载驱动(二)、安装驱动1.给驱动程序赋予权限2.安装驱动3.检查结果(三)、后续问题1.黑屏问题概述 本节详细介绍了如何在ubuntu18系统安装4060显卡的…...

Mermaid语法使用

Mermaid语法使用 1. 基础类1.1 流程图1.2 时序图 2. 工程图2.1 类图2.2 Git图 1. 基础类 1.1 流程图 graph TBid1(圆角矩形)--普通线-->id2[矩形];subgraph 子图id2粗线>id3{菱形}id3-. 虚线.->id4>右向旗帜]id3--无箭头---id5((圆形))end方向定义 用词含义TB从…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...