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

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. 监控和日志记录:对服务器的请求活动进行监控和日志记录,及时发现和响应异常请求行为。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SCIE与SCI期刊的区别

在学术出版领域,SCI(Science Citation Index)和SCIE(Science Citation Index Expanded)是两个关键的索引数据库,它们对科研人员在选择发表论文的期刊时起着至关重要的作用。虽然这两个术语经常被交替使用&a…

04_FFmpeg常用API及内存模型

【说明】课程学习地址:https://ke.qq.com/course/468797 FFmpeg内存模型 FFmpeg内存模型 int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt); int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame);问题(数据的申请和释放): …

五十五、openlayers官网示例Loading Spinner解析——给地图添加loading效果,瓦片图层加载时等待效果

官网demo地址: Loading Spinner 这篇介绍了一个非常简单的loading效果 利用地图的loadstart和loadend事件,动态的添加和删除class名。 map.on("loadstart", function () {map.getTargetElement().classList.add("spinner");});map…

【Python】从基础到进阶(一):了解Python语言基础以及变量的相关知识

🔥 个人主页:空白诗 文章目录 引言一、Python简介1.1 历史背景1.2 设计哲学1.3 语言特性1.4 应用场景1.5 为什么选择Python 二、Python语言基础2.1 注释规则2.1.1 单行注释2.1.2 多行注释2.1.3 文件编码声明注释 2.2 代码缩进2.3 编码规范2.3.1 命名规范…

汉诺塔问题-递归

面试题 08.06. 汉诺塔问题 - 力扣&#xff08;LeetCode&#xff09; 递归问题&#xff0c;一定相信调用的这个函数传参进去能解决好问题&#xff0c;就是不用展开具体的递归图&#xff1b; class Solution { public:void hanota(vector<int>& A, vector<int>&…

中石化加油卡有什么用?

对于有车一族来说&#xff0c;有一张加油卡真的可以省下不少钱 但是像我们这种没车的人&#xff0c;即使得到加油卡也毫无用武之地 久而久之&#xff0c;难免会造成卡过期的情况出现 还好&#xff0c;前两天把我手上堆积了好久的加油卡在收卡云上卖出去了&#xff0c;99折真…

6月21日(周五)欧美股市总结:“三巫日”英伟达继续拉低标普纳指,道指全周涨1.5%为5月来最佳,钯金一度涨11%

内容提要 美国二手房销售减速且房价新高&#xff0c;服务业PMI初值两年多最高&#xff0c;盘中标普和纳指转涨未果&#xff0c;标普连涨三周&#xff0c;纳指连续两日跌离新高抹去全周涨幅&#xff0c;道指连涨四日站稳四周高位。微软谷歌收创新高&#xff0c;英伟达盘中跌5%后…

Nutch爬虫在大数据采集中的应用案例

引言 在当今信息爆炸的时代&#xff0c;大数据的价值日益凸显。网络作为信息的海洋&#xff0c;蕴藏着丰富的数据资源。Nutch&#xff0c;作为一个开源的Java编写的网络爬虫框架&#xff0c;以其高效的数据采集能力和良好的可扩展性&#xff0c;成为大数据采集的重要工具。本文…

外星人Alienware m15R7 原厂Windows11系统

装后恢复到您开箱的体验界面&#xff0c;包括所有原机所有驱动AWCC、Mydell、office、mcafee等所有预装软件。 最适合您电脑的系统&#xff0c;经厂家手调试最佳状态&#xff0c;性能与功耗直接拉满&#xff0c;体验最原汁原味的系统。 原厂系统下载网址&#xff1a;http://w…

LCR 142.训练计划IV

1.题目要求: /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ int compare(const void* a,const void* b) {return (*(int*)a - *(int*)b); } struct ListNode* trainningPlan(struct ListNode* l1, struct Li…

C++ STL ③

sort排序 #include <iostream> #include <algorithm> using namespace std;int main() {int a[5],i;cout<<"请输入数组元素:"<<endl;for(i0;i<5;i){cin>>a[i];}sort(a,a5,greater<int>());for(i0;i<5;i){cout<<a[i…

尚品汇-(三)

maven之packaging标签 &#xff08;1&#xff09;项目创建父模块 首先设置 下Maven Maven&#xff1a;仓库地址&#xff1a;这里是腾讯云仓库 作为父模块&#xff0c;src没用&#xff0c;干掉src 这里我们是Maven创建的项目&#xff0c;想要项目变成SpringBoot的项目&#xf…

Linux驱动调试——使用DEVICE_ATTR实现cat、echo指令调试驱动

在平常做一些驱动调试的时候&#xff0c;每次都写应用去调试相对较麻烦&#xff0c;有一个非常便捷的操作方法就是使用device_attr&#xff0c;只需要执行shell指令例如echo和cat就可以看到效果&#xff0c;不需要再单独写一个测试demo。 看网上很多博客在这一块的使用上写的都…

深度神经网络——什么是小样本学习?

引言 小样本学习是指使用极少量的训练数据来开发人工智能模型的各种算法和技术。小样本学习致力于让人工智能模型在接触相对较少的训练实例后识别和分类新数据。小样本训练与训练机器学习模型的传统方法形成鲜明对比&#xff0c;传统方法通常使用大量训练数据。小样本学习是 主…

DAY10-力扣刷题

1.最后一个单词的长度(简单) 58. 最后一个单词的长度 - 力扣&#xff08;LeetCode&#xff09; 给你一个字符串 s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子…

机器学习python实践——由特征选择引发的关于卡方检验的一些个人思考

最近在用python进行机器学习实践&#xff0c;在做到特征选择这一部分时&#xff0c;对于SelectPercentile和SelectKBest方法有些不理解&#xff0c;所以去了查看了帮助文档&#xff0c;但是在帮助文档的例子中出现了"chi2"&#xff0c;没接触过&#xff0c;看过去就更…

MySQL存储管理(一):删数据

从表中删除数据 从表中删除数据&#xff0c;也即是delete过程。 什么是表空间 表空间可以看做是InnoDB存储引擎逻辑结构的最高层&#xff0c;所有的数据都存放在表空间中。默认情况下&#xff0c;InnoDB存储引擎有一个共享表空间idbdata1&#xff0c;即所有数据都存放在这个表…

20.Cargo和Crates.io

标题 一、采用发布配置自定义构建1.1 默认配置1.2 修改配置项 二、将crate发布到Crates.io2.1 编写文档注释2.2 常用&#xff08;文档注释&#xff09;部分2.3 文档注释作用测试2.4 为包含注释的项添加文档注释2.5 使用pub use导出公有API2.6 创建Crates.io账号2.7 发布2.8 版本…

基于STM8系列单片机驱动LCD12864液晶程序

1&#xff09;单片机/ARM硬件设计小知识&#xff0c;分享给将要学习或者正在学习单片机/ARM开发的同学。 2&#xff09;内容属于原创&#xff0c;若转载&#xff0c;请说明出处。 3&#xff09;提供相关问题有偿答疑和支持。 LCD12864支持串行和并行的通信传输方式&#xff…

NeRF从入门到放弃3: EmerNeRF

https://github.com/NVlabs/EmerNeRF 该方法是Nvidia提出的&#xff0c;其亮点是不需要额外的2D、3Dbox先验&#xff0c;可以自动解耦动静field。 核心思想&#xff1a; 1. 动、静filed都用hash grid编码&#xff0c;动态filed比静态多了时间t&#xff0c;静态的hash编码输入是…