Web渗透-SSRF服务端请求伪造

news2024/11/24 21:06:06

SSRF(Server-Side Request Forgery,服务器端请求伪造)是一种由攻击者利用漏洞服务器发送恶意请求的攻击方式。SSRF漏洞通常出现在服务器端的web应用中,应用允许用户提供的输入被服务器用来发起请求,而没有对输入进行充分的验证或限制。这使得攻击者可以构造恶意请求,访问内部资源或服务,甚至在某些情况下,控制服务器。

SSRF的常见利用方式
①访问内部服务:攻击者可以通过SSRF漏洞访问原本只有在内部网络中才能访问的服务,例如数据库、内部API、文件服务器等。
②获取敏感信息:攻击者可以利用SSRF获取一些本应只有服务器端才能访问的敏感信息,例如云服务提供商的元数据服务。
③端口扫描:攻击者可以通过SSRF漏洞对服务器所在网络的内部系统进行端口扫描,以识别网络中的其他活跃服务。
④执行代码:在某些情况下,攻击者甚至可以通过SSRF漏洞在目标服务器上执行恶意代码,达到远程代码执行的效果。
SSRF漏洞常见的出现场景
1. URL 读取功能

许多应用程序允许用户输入一个URL,然后服务器从该URL获取数据。例如,社交媒体平台允许用户提供一个图片URL,然后服务器从该URL下载并显示图片;如果对输入的URL没有进行严格的验证,攻击者可以输入指向内部服务的URL。

2. Webhooks

Webhooks允许外部服务通过HTTP请求触发某些事件。攻击者可以利用SSRF漏洞指定内部网络中的URL,导致服务器发送请求到内部服务。

3.服务器端的URL转发功能

一些应用程序提供URL转发或代理服务,允许用户通过服务器访问外部资源;如果没有对用户输入的URL进行严格的验证,攻击者可以利用这个功能访问内部网络资源。

示例:

在此处我们也是使用pikachu靶场来进行演示,打开靶场中SSRF漏洞相关页面,可以发现此处有一个链接:

点击链接后页面出现了一首诗;但是我们需要关注的重点并不是诗,而是当前页面的url;可以看到url中出现了另外一个url;

url=http://127.0.0.1/pikachu/vul/ssrf/ssrf_info/info1.php

这个url的作用又是什么呢,我们可以通过查看靶场源码来进行理解:

1.首先我们来看一下后面这个url中的容是什么,只需要根据路径找到info1.php这个文件即可

可以发现这个php文件的主要作用实际上就是打印刚才显示在页面中的那首诗。

那么到这边的话我们基本上可以初步判断原先的SSRF漏洞页面的链接实际上就触发了一个事件:在当前页面中显示另外一个页面的内容,这个时候要验证我们的想法很简单,我可以将后面的另外一个URL的值改为www.baidu.com百度的网址,看百度的页面内容是否会显示到当前页面中即可;此时访问到的URL就是:

http://127.0.0.1/pikachu/vul/ssrf/ssrf_curl.php?url=https://www.baidu.com

访问后可以发现页面中出现了百度网页内容,这个想法就基本没错了;

当然除了这个方法之外还可以直接通过剖析源码来验证我们的想法;相关代码以及代码解析如下:

if(isset($_GET['url']) && $_GET['url'] != null){
    // 检查是否通过URL参数提供了名为 'url' 的参数,并且该参数不为空
    $URL = $_GET['url'];
    // 将用户提供的URL赋值给变量 $URL
    $CH = curl_init($URL);
     // 初始化一个cURL会话,并设置会话的URL为用户提供的URL
    curl_setopt($CH, CURLOPT_HEADER, FALSE);
     // 设置cURL选项,不输出HTTP头部信息
    curl_setopt($CH, CURLOPT_SSL_VERIFYPEER, FALSE);
     // 设置cURL选项,不验证对等证书的真实性(关闭SSL验证)
    $RES = curl_exec($CH);
    // 执行cURL会话,发送请求并获取响应
    curl_close($CH) ;
     // 关闭cURL会话,释放资源
    echo $RES;
      // 输出响应内容
}

从代码中就可以看出来,后端程序会接收来自前端的url参数中的数据,接着对该数据进行访问并显示在当前页面中,这段代码就存在明显的安全问题,主要是由于没有对用户输入的URL进行充分的验证;攻击者可以利用该漏洞,构造恶意URL,导致服务器发送请求到内部网络中的其他服务或资源,从而访问敏感信息或进行其他恶意操作。

漏洞利用:

SSRF的利用姿势还是非常多的,但因为本文主要是针对SSRF漏洞的形成原理进行描述,所以漏洞利用方式我们就稍微举两个例子即可:

1.存活主机探测与开放端口扫描

通过SSRF可以扫描当前内网中的存活主机(服务器可访问的)以及对应主机的开放端口;此时我在物理机中开启一个虚拟机,那么这个时候我们就可通过这个页面去对探测虚拟机是否存活以及对其进行端口扫描。

当前虚拟机的IP地址为192.168.8.140,且虚拟机中开启了mysql数据库服务,为了节约时间我们直接测试这个IP的3306,这个时候的访问的url:

http://127.0.0.1/pikachu/vul/ssrf/ssrf_curl.php?url=http://192.168.8.140:3306

查看结果:

可以看到我们获得了虚拟机(内网中另外一台存活主机)的端口;当然这边需要测试的范围非常大,我们可以通过写一个脚本,或者使用burpsuite的爆破模块进行批量检测。

2.利用file协议查看服务器中的文件

此处以Windows为例子(在渗透前肯定是要先判断当前网站的部署环境的);我在服务器(其实就是我的物理机)的D盘中创建一个文件:

文件内容为:

这个时候我们就可以通过file协议对这个文件的内容进行读取,将其显示在页面中;此时地址栏中访问的url为:

http://127.0.0.1/pikachu/vul/ssrf/ssrf_curl.php?url=file:///D:/mysql.ini

查看访问结果:

可以看到文件内容就显示在页面中了,打开思路,若是网站部署在Linux服务器中,那么通过这个SSRF漏洞我们是不是就可以读取Linux中的一些敏感文件,如/etc/passwd等获取系统的用户结构,为后续攻击做准备。

Windows中也有一些比较有用的的文件,如hosts文件、win.ini文件等:

防御SSRF攻击的措施
  1. 输入验证和过滤:严格验证和过滤用户输入的URL,只允许访问白名单中的地址或域名。

  2. 网络隔离:将内部服务和外部可访问的服务进行网络隔离,防止外部请求直接访问内部服务。

  3. 使用防火墙:配置防火墙规则,限制服务器只能对特定的外部地址或端口发起请求。

  4. 减少权限:运行服务器进程的账户应具有最小权限,以减少在被攻击时的损害。

  5. 监控和日志记录:对服务器的请求活动进行监控和日志记录,及时发现和响应异常请求行为。

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

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

相关文章

数据结构:为什么说链表是顺序表的升级版(c语言实现)

前言: 我们在之前的几篇文章中详细的讲解了顺序表的特点,增删改查操作和动态顺序表的优点,并使用顺序表的底层结构实现了通讯录项目,似乎顺序表是一个非常完美的数据结构,它可以实现按照需求实现增删查改,对…

换电脑后导入git本地仓库记录

导入本地仓库tig记录 换了新电脑,将旧电脑的数据盘查到新的笔记本之后发现,使用pycharm 读取不到本地的git提交记录了,我没有将本地git上传到远程仓库的习惯,这可抓马了,硬盘插回去的话也太麻烦了。试了 vscode 提示设…

冲击2024年CSDN博客之星TOP1:CSDN文章质量分查询在哪里?

文章目录 一,2023年博客之星规则1,不高的入围门槛2,[CSDN博文质量分测评地址](https://www.csdn.net/qc) 二,高分秘籍1,要有目录2,文章长度要足够,我的经验是汉字加代码至少1000字。3&#xff0…

币旺BitonAI系统助力智能化交易 引领加密资产交易行业革新

随着加密货币市场的蓬勃发展,交易者们面临着市场波动、信息过载和日益激烈的竞争等多重挑战。在这样的背景下,智能化交易系统应运而生。AI技术的引入无疑为加密货币交易市场带来了一场革命性的变革。通过深度学习和大数据分析,加密货币交易成…

手机怎么自动切换ip地址

在数字化时代,网络IP地址不仅是设备在网络世界的标识,也是确保用户网络安全和数据隐私的关键因素。对于手机用户来说,在某些情境下可能需要自动切换IP地址,本文将为您介绍手机怎么自动切换IP地址。 随着网络技术的发展&#xff0c…

Claude 3.5 强势出击:解析最新AI模型的突破与应用

近年来,人工智能领域的发展迅猛,各大科技公司纷纷推出了自家的高级语言模型。在这场技术竞赛中,Anthropic的Claude系列模型凭借其强大的性能和创新的功能脱颖而出。最近,Anthropic发布了Claude 3.5 Sonnet模型,引起了广…

Vue73-命名路由

一、路由的name属性 二、小结

【机器学习】正则卷积群理论及Python代码实现

1. 引言 1.1.卷积神经网络CNN 卷积神经网络(CNN)的数学模型是深度学习中用于处理图像和其他高维数据的关键组成部分。那么,CNN究竟是什么呢? 总结起来,CNN网络主要完成以下操作: 卷积操作(Co…

使用Naive UI的级联选择器 Cascader进行省市区选择

序言: 在进行PC版的功能开发时,进行客户管理时老板要让客户便捷的选择自己的省市区等信息,而不是让他们一个个去填写,这时就需要使用级联选择器来进行省市区的选择。 注:element ui/plus的级联选择器也是可以的。 步骤…

Master PDF Editor v5 解锁版安装教程(小巧多功能PDF )

前言 Master PDF Editor,小巧的多功能PDF编辑器,轻松查看,创建,修改,批注,签名,扫描,OCR和打印PDF文档。高级注释工具,可以添加任意便笺指示对象突出显示,加…

Redis单例部署

目录 1. 概述2. 参考3. 环境4. 部署4.1 操作系统4.1.1 修改系统参数4.1.2 关闭透明大页内存4.1.3 修改系统限制 4.2 安装Redis4.2.1 下载Redis4.2.2 创建redis账号4.2.3 添加Redis环境变量4.2.4 创建Redis使用目录4.2.5 安装Redis4.2.6 手动修改配置文件(**可跳过&a…

Linux连接工具MobaXterm详细使用教程

目录 一、MobaXterm的下载 1、访问官网 2、下载便携版 3、启动MobaXterm 二、MobaXterm基本使用设置 1、新建会话 2、使用ssh连接第一个会话 3、设置主密码 4、主界面 5、sftp文件上传下载 6、文件拖拽的上传下载 7.右键粘贴 8、查看服务器监测信息​编辑 9、个…

在Linux下使用CMake加载自定义路径第三方库的指南

CMake是一个强大的跨平台构建系统,广泛应用于C项目中。它不仅能够处理标准的构建过程,还可以灵活地集成各种第三方库,包括自定义路径的库、已编译的共享库(.so 文件),以及仅包含头文件的库(如Ei…

qt 简单实验创建一个可以拖拽和缩放的矩形

1.概要 2.代码 2.1 resizablewidget.h #ifndef RESIZABLEWIDGET_H #define RESIZABLEWIDGET_H#include <QWidget> #include <QMouseEvent>class ResizableWidget: public QWidget {Q_OBJECT public:ResizableWidget(QWidget *parent nullptr); protected:void m…

IPD笔记

IPD笔记 先弄一个一图流&#xff0c;改天再过来继续补充 IPD&#xff08;Integrated Product Development&#xff09;即集成产品开发&#xff0c;是一套产品开发的模式、理念与方法。华为的IPD的核心思想是基于市场需求&#xff0c;将产品开发作为一项投资来管理&#xff0c;以…

【复旦邱锡鹏教授《神经网络与深度学习公开课》笔记】卷积

卷积经常用在信号处理中&#xff0c;用于计算信号的延迟累积。假设一个信号发射器每个时刻 t t t产生一个信号 x t x_t xt​&#xff0c;其信息的衰减率为 w k w_k wk​&#xff0c;即在 k − 1 k-1 k−1个时间步长后&#xff0c;信息为原来的 w k w_k wk​倍&#xff0c;时刻 …

vivado、vitis2022安装及其注意事项(省时、省空间)

1、下载 AMD官网-资源与支持-vivado ML开发者工具&#xff0c;或者vitis平台&#xff0c; 下载的时候有个官网推荐web安装&#xff0c;亲测这个耗时非常久&#xff0c;不建议使用&#xff0c;还是直接下载89G的安装包快。 注意&#xff1a;安装vitis平台会默认安装vivado&…

速卖通测评成本低见效快,自养号测评的实操指南,快速积累销量和好评

对于初入速卖通的新卖家而言&#xff0c;销量和评价的积累显得尤为关键。由于新店铺往往难以获得平台活动的青睐&#xff0c;因此流量的获取成为了一大挑战。在这样的背景下&#xff0c;进行产品测评以积累正面的用户反馈和销售记录&#xff0c;成为了提升店铺信誉和吸引潜在顾…

Mybatis框架的缓存

Mybatis框架的缓存 一.为什么使用缓存 缓存(cache&#xff09;的作用是为了减去数据库的压力&#xff0c;提高查询性能。缓存实现的 原理是从数据库中查询出来的对象在使用完后不要销毁&#xff0c;而是存储在内存&#xff08;缓存&#xff09; 中&#xff0c;当再次需要获取…

算法设计与分析:动态规划法求扔鸡蛋问题 C++

目录 一、实验目的 二、问题描述 三、实验要求 四、算法思想和实验结果 1、动态规划法原理&#xff1a; 2、解决方法&#xff1a; 2.1 方法一&#xff1a;常规动态规划 2.1.1 算法思想&#xff1a; 2.1.2 时间复杂度分析 2.1.3 时间效率分析 2.2 方法二&#xff1a;动态规划加…