SSRF基础原理(浅层面解释 + 演示)

简介: SSRF基础原理(浅层面解释 + 演示)

一、SSRF漏洞的基本概念:

SSRF--全名:Server-Side Request Forgery,汉译:服务端请求伪造,漏洞别名“借刀杀人”。

想象以下,现存在一个 Web应用,这个Web应用可以帮助我们能=爬取互联网上的其他内容,如将别处网站的照片爬取过来等等,这时我们尝试构造一个恶意的URL让它去访问,比如让它去访问 127.0.0.1,也就是本机或者是内网里的一个地址,Web应用如果按照我们的要求去访问并且把访问结果返回的话,那么此处就存在SSRF漏洞。

图示流程如下:

(1)若不存在SSRF漏洞,流程图如下:

(2)若存在SSRF漏洞,流程图如下:

更详细的关于SSRF漏洞类型、协议等内容请参考下面一片文章:

SSRF漏洞原理攻击与防御(超详细总结)


二、靶场漏洞复现(pikachu靶场):

1、SSRF(curl):

(1)curl函数造成漏洞原理:

curl 是常用的命令行工具,可以用来请求 Web 服务器。同时也支持其他协议,如FTP、FTPS、HTTP、HTTPS、TFTP、SFTP、Gopher、SCP、Telnet、DICT、FILE、LDAP、LDAPS、IMAP、POP3、SMTP和 RTSP,curl中也包含了用于程序开发的libcurl。

造成SSRF漏洞的根本原因是:服务端提供了从其他服务器获取数据的功能,而没有对目标地址进行限制和过滤,导致产生SSRF漏洞。

(2)curl函数实现源码:
<?php
function curl($url){
    $ch=curl_init(); // 初始化cURL会话
    curl_setopt($ch,CURLOPT_URL,$url); // 设置要访问的URL
    curl_setopt($ch,CURLOPT_HEADER, 0); // 不返回HTTP头部信息
    curl_exec($ch); // 执行cURL会话,发送请求并获取响应
    curl_close($ch); // 关闭cURL会话
}
$url=$_GET['url']; // 从GET请求中获取参数'url'的值
curl($url); // 调用curl函数,传入URL参数
?>
(3)漏洞复现:

进入靶场,页面如下图所示:

发现一句话,可点击,点击进入,页面显示如下图所示:

出现一段文字,同时我们发现URL中多出了一个参数url,分析后端代码:

通过分析后端代码,我们得知url参数被赋值给$URL,并且使用curl()函数进行请求访问,最后 echo $RES 将响应结果返回给了前端,显示在用户的页面中,这就是典型的SSRF漏洞。

我们可以对URL中的url参数进行修改来复现SSRF漏洞:

1、http协议访问本地文件:

2、file协议读取C盘下的配置文件:

3、利用curl函数打开百度:

除以上功能外,利用SSRF(curl)漏洞还可以利用dic协议扫描内网各个端口的开放情况。


2、SSRF(file_get_content):

(1)file_get_content 后端源码:

代码大体意思为:将指定URL的文件读入为一个字符串并返回前端。

(2)file_get_content()函数造成漏洞的原理:

file_get_contents函数本身是一个强大的工具,它能够读取文件或URL的内容到字符串中。然而,当这个函数与用户输入相结合时,如果未对用户输入进行适当的验证和限制,就可能允许攻击者构造特定的URL,使服务器发起对内网或互联网上其他服务器的请求。

(3)漏洞复现:

2、file协议读取C盘下的配置文件:

3、http协议读取根目录下文件:

(4)curl() 函数 和 file_get_content() 的区别:

1、curl_exec 支持更多协议,有http、https、ftp、gopher、telnet、dict、file、ldap;模拟 Cookie 登录,爬取网页;FTP 上传下载。

2、file_get_contents 只能使用 GET 方式获取数据。

相关文章
|
2月前
|
机器学习/深度学习 网络架构 计算机视觉
YOLOv5改进 | 检测头篇 | 利用DBB重参数化模块魔改检测头实现暴力涨点 (附代码 + 详细修改教程)
YOLOv5改进 | 检测头篇 | 利用DBB重参数化模块魔改检测头实现暴力涨点 (附代码 + 详细修改教程)
181 3
|
2天前
|
数据可视化 算法 大数据
深入解析高斯过程:数学理论、重要概念和直观可视化全解
这篇文章探讨了高斯过程作为解决小数据问题的工具,介绍了多元高斯分布的基础和其边缘及条件分布的性质。文章通过线性回归与维度诅咒的问题引出高斯过程,展示如何使用高斯过程克服参数爆炸的问题。作者通过数学公式和可视化解释了高斯过程的理论,并使用Python的GPy库展示了在一维和多维数据上的高斯过程回归应用。高斯过程在数据稀疏时提供了一种有效的方法,但计算成本限制了其在大数据集上的应用。
10 1
|
10月前
|
算法 JavaScript 数据安全/隐私保护
某美动态参数对抗思路
某美动态参数对抗思路
91 0
|
机器学习/深度学习 消息中间件 自然语言处理
解析ChatGPT背后的工作原理
解析ChatGPT背后的工作原理
|
存储 编解码 C++
实验分析非常精彩 | Transformer中的位置嵌入到底改如何看待?(二)
实验分析非常精彩 | Transformer中的位置嵌入到底改如何看待?(二)
454 0
|
自然语言处理 数据建模 计算机视觉
实验分析非常精彩 | Transformer中的位置嵌入到底改如何看待?(一)
实验分析非常精彩 | Transformer中的位置嵌入到底改如何看待?(一)
193 0
|
数据采集 消息中间件 分布式计算
最终整体回顾总结(代码-预处理及爬虫识别)|学习笔记
快速学习最终整体回顾总结(代码-预处理及爬虫识别)
107 0
最终整体回顾总结(代码-预处理及爬虫识别)|学习笔记
|
存储 安全 Linux
一文揭开https原理的真实面貌(简明扼要,附代码说明)
https真的是非对称加吗吗,非对称性能差,网络传输流量高,它如何能做到高效?证书被窃取是否意味着数据有泄密的可能?CA机构的原理是什么…………
243 0
一文揭开https原理的真实面貌(简明扼要,附代码说明)
|
域名解析 网络协议 网络架构