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

SSRF漏洞基础

文章目录

  • 一、客户端请求
  • 二、服务器端请求
  • 三、服务器端请求伪造
  • 四、漏洞形成原因
  • 五、漏洞危害
  • 六、漏洞场景
  • 七、漏洞函数
    • 1. curl_exec
    • 2.file_get_contents
    • 3. fsockopen
  • 八、漏洞类型
  • 九、判断是否存在
  • 十、漏洞利用
    • 1.读取敏感文件
      • (1)通过file协议读取敏感文件
        • 1)读取etc/passwd
        • 2)读取etc/hosts
  • 十一、漏洞防御

一、客户端请求

客户端请求是用户设备(如浏览器、APP)向服务器发起的资源或服务请求(如打开网页、提交表单),由用户触发,受浏览器安全策略限制。

二、服务器端请求

服务器端请求是服务器在处理客户端请求时,主动向其他服务器或服务发起的请求(如调用第三方API、同步数据),在后台执行,用户无感知,不受浏览器策略限制。

三、服务器端请求伪造

服务器端请求伪造(SSRF)是攻击者通过构造恶意参数,诱导服务器发起非预期请求,利用服务器权限访问内网资源、扫描端口或攻击其他系统,突破网络隔离,危害较大。
在这里插入图片描述

四、漏洞形成原因

由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制,导致攻击者可以传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据。比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。

五、漏洞危害

  1. 内部网络探测:绕过防火墙,扫描内网服务(如数据库、管理后台)。
  2. 敏感数据泄露:读取本地文件(file://协议)或访问云元数据(如AWS/Azure密钥)。
  3. 内部服务攻击:攻击Redis、MySQL等未授权服务,甚至执行命令。
  4. 权限绕过:利用服务器身份访问受限资源(如API、SSH)。

六、漏洞场景

SSRF漏洞一般存在于Web应用程序中,这些应用程序接受来自用户的输入,然后将其用于向其他服务器发出请求。攻击者可以在输入中注入恶意的URL,从而使服务器发起未经授权的请求,以访问敏感的内部资源。

  • 文件上传功能:Web应用程序通常允许用户上传文件,攻击者可以上传包含恶意URL的文件,以触发SSRF漏洞。
  • 图片处理功能:Web应用程序通常包含图片处理功能,攻击者可以在图片URL中注入恶意的URL,以触发SSRF漏洞。
  • URL重定向功能:Web应用程序可能包含URL重定向功能,攻击者可以在重定向URL中注入恶意的URL,以触发SSRF漏洞。
  • API调用:Web应用程序可能会使用API与其他服务进行交互,攻击者可以在API请求中注入恶意的URL,以触发SSRF漏洞。

七、漏洞函数

  • php:
    这些函数用于发出HTTP请求,包括常见的函数如curl_exec()file_get_contents()fsockopen()。如果这些函数允许从用户输入中获取URL,但未正确验证和过滤用户输入,攻击者可以通过在URL中注入恶意代码来触发SSRF漏洞。
  • java:
    仅支持HTTP/HTTPS协议的类:HttpClient类、HttpURLConnection类、OkHttp类、Request类支持sun.net.www.protocol所有协议的类:URLConnection类、URL类、ImageIO类。

1. curl_exec

格式:curl_exec(resource $ch)
作用:执行 cURL 会话

<?php
// 创建一个cURL资源
$ch = curl_init();
// 设置URL和相应的选项
curl_setopt($ch,CURLOPT_URL,"http://www.baidu.com/");
// 设置不包括响应头信息,只返回正文内容 curl_setopt($ch,CURLOPT_HEADER, 0);
// 将SSL证书验证设置为false,即不验证对等证书
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
// 将SSL主机验证设置为FALSE,即不验证主机
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
// 抓取URL并把它传递给浏览器
curl_exec($ch);
// 关闭cURL资源,并且释放系统资源
curl_close($ch);
?>
  1. 在网站根目录中创建文件。
    在这里插入图片描述
  2. 在浏览器中访问,可以看到直接跳转到了百度。
    在这里插入图片描述

2.file_get_contents

格式:file_get_contents(path,include_path,context,start,max_length)
作用:把整个文件读入一个字符串中。将整个文件或一个url所指向的文件读入一个字符串中。

<?php
if(isset($_POST['url']))
{
$content=file_get_contents($_POST['url']);
$filename='./images/'.rand().'.txt';
file_put_contents($filename,$content);
echo $_POST['url'];
$img="<img src=\"".$filename."\"/>";
}
echo $img;
?>
  1. 在网站根目录中创建文件,并创建一个images文件夹。
    在这里插入图片描述
  2. 在浏览器中访问,并传入一个地址。
    在这里插入图片描述
    在这里插入图片描述
  3. 打开images文件夹,发现自动生成了一个txt文件,里面是百度首页的源码。
    在这里插入图片描述

3. fsockopen

格式:fsockopen(string hostname[, intport = -1 [, int &$errno
[, string &errstr[, floattimeout = ini_get(“default_socket_timeout”) ]]]] )
作用:打开一个网络连接或者一个Unix 套接字连接。

<?php
$fp =fsockopen("192.168.1.11",9998,$errno,$errstr,30);
if(!$fp){
echo "$errstr($errno)<br />\n";
}else {
$out ="GET / HTTP/1.1\r\n";
$out .="Host:192.168.1.11\r\n";
$out .="connection:close\r\n\r\n";
fwrite($fp, $out);
while(!feof($fp)){
echo fgets($fp, 128);
}
fclose($fp);
}
?>

在这里插入图片描述

八、漏洞类型

  • 有回显:页面有返回具体内容。
  • 无回显:页面没有返回具体内容

九、判断是否存在

在无回显(Blind)的SSRF攻击中,攻击者无法直接获取目标系统返回的响应,因此需要寻找一种方法来间接地确认攻击是否成功。

DNSLog是一种常用的间接确认方法,它通过向一个域名提交请求,然后查看DNS服务器的日志来获取该域名的请求记录,从而确认攻击是否成功。

攻击者可以在SSRF漏洞中注入带有DNSLog服务地址的URL,并将该URL发送到目标服务器上,当目标服务器对该URL进行请求时,DNSLog服务将接收到请求并记录在日志中。攻击者可以定期查看 DNSLog的日志,以确认目标服务器是否对该URL进行了请求。

  • DNS
    域名解析系统(Domain Name System), 用户在浏览器输入一个域名, 靠DNS服务解析域名的真实IP,访问服务器上相应的服务。
  • DNSLOG
    DNS的日志, 存储在DNS 服务器上的域名信息, 记录着用户对域名的访问信息,类似日志文件。

十、漏洞利用

1.读取敏感文件

(1)通过file协议读取敏感文件

  • 格式:file://filepatch
  • 作用:本地文件传输协议,用于访问本地计算机中的文件。
    注意:读取文件读取的是目标服务器本地的文件,无法读取其他服务器的文件。
1)读取etc/passwd

在Linux系统里,/etc/passwd文件中每条记录都对应着一个用户,里面保存着该用户的基础属性信息。对于系统管理员而言,这个文件是用户管理工作中的常用对象,他们常会通过修改其中的内容来完成对用户的各类管理操作。
在这里插入图片描述
在这里插入图片描述

2)读取etc/hosts

hosts文件的核心功能是建立IP地址与主机名的对应映射,这份映射关系以文本形式记录,可用普通文本工具打开。当用户在浏览器输入网址时,系统会先查询hosts文件,若找到对应的IP地址,就直接用该地址访问网页;若未找到,才会将网址提交给DNS服务器解析IP。简单讲,它是用于快速完成IP与域名对应解析的文件,通过查看该文件,能获取内网所处的网段信息。
在这里插入图片描述

十一、漏洞防御

服务器端请求本是业务正常功能的一部分,比如加载图片等场景都会用到。但正因如此,也可能被恶意利用,从而产生服务器端请求伪造(SSRF)漏洞。

目前防御SSRF的主要手段有:

  1. 白名单机制:对用户提交的URL设置允许访问的白名单,例如当用户访问www.example.com时,仅允许提交来自example.com的URL。

  2. 协议限制:限定仅可使用http、https协议发起请求,以此避免file://、ftp://等协议可能导致的文件泄露问题。

  3. 返回信息过滤:对服务器返回的内容进行校验,比如若服务本应获取jpg格式图片,却返回了其他类型内容,则判定为异常并进行报错处理。

  4. 统一错误信息:仅返回固定的几种错误提示,使SSRF攻击无法获取有效反馈,成为无回显漏洞。

http://www.dtcms.com/a/306842.html

相关文章:

  • RESTful API和WebSocket的优缺点,各自适合以及不适合什么样的场景
  • LLM 模型部署难题的技术突破:从轻量化到分布式推理的全栈解决方案
  • uni-app webview的message监听不生效(uni.postmessage is not a function)
  • 嵌入式第十五课!!!!指针函数(续)+函数指针+二级指针+指针数组!!!
  • Java 14 新特性解析与代码示例
  • OWSM v4 语音识别学习笔记
  • RK3506-G2 开箱使用体验
  • 【Python】 切割图集的小脚本
  • 【WRF-Chem第五期】自定义字段配置 iofields_filename 详述
  • 红绿多空策略
  • 全包圆230㎡整装案例亮相,空间美学演绎东方韵味
  • Netty是如何解决epoll CPU占用100%问题的
  • 借助 Wisdom SSH AI 助手构建 Linux 容器化开发流水线
  • 构建智能体(Agent)时如何有效管理其上下文
  • 2022 年 NOI 最后一题题解
  • 【Spark征服之路-4.3-Kafka】
  • CMS框架GetShell
  • 2020 年 NOI 最后一题题解
  • Go语言核心知识点补充
  • 【Unity】在构建好的项目里创建自定义文件夹
  • 2.3.1-2.3.5获取资源-建设团队- 管理团队-实施采购-指导
  • solidity 中 Eth 和 Usd 到底如何转换
  • 技术人生——第17集:京城首发,AI叩问
  • C++中sizeof运算符全面详解和代码示例
  • 15.网络编程:让程序学会上网
  • 【读书笔记】设计数据密集型应用 DDIA 第二章
  • RPA软件推荐:提升企业自动化效率
  • 无线土壤水分传感器的结构组成及工作特点
  • Vue 3 入门教程 3- 响应式系统
  • Qt知识点3『自定义属性的样式表失败问题』