基础漏洞——SSRF

目录

一.原理

二.引起ssrf的函数

三.这些函数具体作用

(1)File_get_content()

(2)Fsockopen()

(3)Curl_exec()

四.常见的业务场景(可能出现的漏洞的地方,漏洞挖掘)

1.分享,通过URL地址分享网页内容,通过URL获取目标页标签等内容

第一种情况

第二种情况

第三种情况

第四种情况:这种就是没有开放

2.转码服务,适配手机屏幕大小,通过URL地址进行图片转码

3.图片加载与下载,通过URL加载网络图片(头像上传、等)

4.图片、文章收藏,通过URL获取目标的title等信息

五.从URL关键字中寻找

五.SSRF漏洞利用(危害)

六.SSRF漏防御


一.原理

由web应用去请求其他服务器加载图片,文件,如果加载文件这里的参数可以控制,就可以构造恶意的代码,形成由服务器端发起的请求的安全漏洞。

二.引起ssrf的函数

File_get_content()

Fsockopen()

Curl_exec()

三.这些函数具体作用

注释:这三个代码是我从SSRF漏洞原理攻击与防御(超详细总结)-CSDN博客博主那里借鉴的。解读了一下

(1)File_get_content()

下面的代码使用file_get_content()函数从用户指定的url获取图片。然后把它用一个随机文件名保存在硬盘上,并展示给用户。

<?php

if (isset($ _POST['url']))
{

$content = file_get_contents($ _POST['url']);//漏洞点,通过POST传输,获取web页面数据

$filename='./images/'.rand().';img1.jpg';//rand,随机产生文件名字.

file_put_contents($filename,$content);

echo $_POST['url'];

$img = "<img src=\"".$filename."\"/>";

}

echo $img;

?>

(2)Fsockopen()

以下代码使用fsockopen函数实现获取用户制定ur的数据(文件或者html)。这个函数会使用socket跟服务器建立tcp连接,传输原始数据。

前提:PHP fsockopen需要 PHP.ini 中 allow_url_fopen 选项开启。

allow_url_fopen = On

<?php 
function GetFile($host,$port,$link) 
{ 
$fp = fsockopen($host, intval($port), $errno, $errstr, 30);
/*$host:包含要连接的主机名(例如 "example.com")或 IP 地址。这就是漏洞点参数。

intval($port):将端口号转换为整数,通常是服务器监听的端口(例如 HTTP 的 80,HTTPS 的 443)。
$errno:连接失败时捕获错误编号的变量。
$errstr:连接失败时捕获错误信息的变量。
这两个导致敏感信息泄露,特别是在错误消息中暴露了系统或服务器的详细信息

30:连接尝试的超时时间(单位:秒)。*/

if (!$fp) { 
echo "$errstr (error number $errno) \n"; 
} else { 
$out = "GET $link HTTP/1.1\r\n"; 
$out .= "Host: $host\r\n"; 
$out .= "Connection: Close\r\n\r\n"; 
$out .= "\r\n"; 
fwrite($fp, $out); 
$contents=''; 
while (!feof($fp)) { 
$contents.= fgets($fp, 1024); 
} 
fclose($fp); 
return $contents; 
} 
}
?>

(3)Curl_exec()

在 PHP 中,`curl_exec()` 函数用于执行一个 cURL 会话。cURL(Client URL Library)是一个用来传输数据的工具和库,支持各种协议,如 HTTP、FTP、SMTP 等。文件/数据被下载并存储在"cured"文件夹下的磁盘中,并附加一个随机数和“.txt”文件扩展名。

<?php 
if (isset($_POST['url']))//检查 POST 请求:
{
$link = $_POST['url'];//获取 URL
$curlobj = curl_init();//初始化 cURL,初始化一个 cURL 会话。
curl_setopt($curlobj, CURLOPT_POST, 0);//设置为 GET 请求(CURLOPT_POST, 0)。
curl_setopt($curlobj,CURLOPT_URL,$link);//设置要访问的 URL。
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, 1);/*将返回结果作为字符串而不是直接输出(CURLOPT_RETURNTRANSFER, 1)。*/

$result=curl_exec($curlobj);//执行 cURL 请求,执行 cURL 请求并将结果存储在 $result 中。
curl_close($curlobj);//关闭 cURL 会话,关闭 cURL 会话,释放资源。
$filename = './curled/'.rand().'.txt';
file_put_contents($filename, $result); /*生成文件名并保存结果,生成一个随机命名的文件名,将结果写入该文件。*/
echo $result;
}
?>

四.常见的业务场景(可能出现的漏洞的地方,漏洞挖掘)

1、分享,通过URL地址分享网页内容,通过URL获取目标页标签等内容

2、转码服务,适配手机屏幕大小,通过URL地址进行图片转码

3、图片加载与下载,通过URL加载网络图片(头像上传、等)

4、图片、文章收藏,通过URL获取目标的title等信息

5、其他加载URL的功能

1.分享,通过URL地址分享网页内容,通过URL获取目标页标签等内容

它访问了其他的网址

可以修改为内网服务器的IP地址,可以随便访问

实例

Pikachu靶场

点击

观察url

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

修改后面的地址,百度域名

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

加载过来了,既然能读取第三方,那我是不是能读取内网里面的东西。

http://192.168.2.18/pikachu/vul/ssrf/ssrf_curl.php?url=file://D:/1.txt

我想要跨盘读取,这个过程是读不了的。

http://192.168.2.18/pikachu/vul/ssrf/ssrf_curl.php?url=file://C:/2.txt

这是因为这个不能跨盘读取。

我们可以通过ssrf来进行端口探测,这个的目的:如果探测到你的端口3306是开放的是不是说,知道你是mysql数据。

第一种情况

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

不允许连接,说明是开放的。

第二种情况

http://192.168.2.18/pikachu/vul/ssrf/ssrf_curl.php?url=http://192.168.2.18:445

秒反应,也是开启状态

第三种情况

http://192.168.2.18/pikachu/vul/ssrf/ssrf_curl.php?url=http://192.168.2.18:135

一直转圈圈,也是开放的

netstat -ant

第四种情况:这种就是没有开放

http://192.168.2.18/pikachu/vul/ssrf/ssrf_curl.php?url=http://192.168.2.18:1111

转了大概2秒就返回页面,页面没什么变化,说明端口未开放

2.转码服务,适配手机屏幕大小,通过URL地址进行图片转码

转码服务:通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览

由于手机屏幕大小的关系,直接浏览网页内容的时候会造成许多不便,因此有些公司提供了转码功能,把网页内容通过相关手段转为适合手机屏幕浏览的样式。例如百 度、腾讯、搜狗等公司都有提供在线转码服务。

3.图片加载与下载,通过URL加载网络图片(头像上传、等)

在线翻译:通过URL地址翻译对应文本的内容。提供此功能的百度、有道等

4.图片、文章收藏,通过URL获取目标的title等信息

图片加载与下载:通过URL地址加载或下载图片

图片加载远程图片地址此功能用到的地方很多,但大多都是比较隐秘,比如在有些公司中的加载自家 图片服务器上的图片用于展示。(此处可能会有人有疑问,为什么加载图片服务器上的图片也会有问题,直接使用img标签不就好了,没错是这样,但是开发者为了有更好的用户体验通常对图片做些微小调整例 如加水印、压缩等,就必须要把图片下载到服务器的本地,所以就可能造成SSRF问题)

五.从URL关键字中寻找

share、 wap、 url.link、 src, source,target、 u、 3g、displaysourcellRL. imageURL、 domain

俗称的参数

?share=什么什么

五.SSRF漏洞利用(危害)

1.可以将中间服务当作跳板机,对外网,服务器所在内网,本地进行端口扫描,获取一些服务器的banner信息。

2.攻击运行在本地或内网应用程序,溢出攻击。

3.对内网web应用进行指纹识别。

4.攻击内外网的web应用,主要是使用get参数实现攻击。

5.利用一些伪协议(file)读取本地文件或远程文件。

六.SSRF漏防御

1.过滤返回的信息,也就是在讲返回结果展示给用户之前,先验证这个信息中符不符合标准。

2.同一错误信息,避免用户可以根据错误信息进行判断端口状态。

3.将一些无用的/危险的端口禁用,或者说限制ip访问。

4.制作白黑名单。

5.禁用一些不需要的协议,只用http/https请求。

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

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

相关文章

展锐平台的手机camera 系统isptool 架构

展锐平台的isptool 主要用于支持展锐各代芯片isp的各效果模块快速tuning和参数生成打包。 具体需要&#xff1a; 一、工具段能在线实时预览到调试sensor经过isp 处理后的图像&#xff0c;也就是各模块的参数在当下实时生效&#xff0c;通过工具能在PC 上在线观看到修改的效果。…

【理解 Java 中的 for 循环】

理解 Java 中的 for 循环 for 循环是 Java 中用于迭代的常用控制结构&#xff0c;它可以帮助我们重复执行某段代码&#xff0c;直到满足特定条件。本文将介绍 for 循环的基本语法、执行流程、注意事项及一些练习。 基本语法 for 循环的基本语法如下&#xff1a; for (循环变…

FBX福币连续2天破万亿,沪指重回3000点,后续怎么走?

查查配分析今日,A股继续强势上攻。有关#A股重回3000点#、#A股成交额连续2天破万亿#的讨论迅速登上微博热搜。 FBX福币凭借用户友好的界面和对透明度的承诺,迅速在加密货币市场中崭露头角,成为广大用户信赖的平台。 白马蓝筹股领涨市场,上证50指数劲升逾4.69%,创近4个月来新高,…

Java语法-类和对象之继承与多态(中)

1. 继承 为什么要继承? 从生物学角度来说,继承就是把父辈的基因遗传给子代,然后子代再在细胞分裂的途中产生变异,生成比父辈更加适应环境的物种.其中很重要的就是继承给子代的基因(父类的方法和属性)和子代在父辈的基础上产生的变异(方法的重写). 比如猫和狗都是哺乳动物,是在…

了解独享IP的概念及其独特优势

在网络世界中&#xff0c;IP地址是用来识别和定位设备的标识符。独享IP是一种服务模式。使用代理服务器时&#xff0c;用户拥有一个不与其他用户共享的专用独立IP地址。与共享IP相比&#xff0c;独享IP为用户提供了更高的独立性和隐私保护。下面详细介绍独享IP的定义、工作原理…

什么是unix中的fork函数?

一、前言 在本专栏之前的文档中已经介绍过unix进程环境相关的概念了&#xff0c;本文将开始介绍unix中一个进程如何创建出新进程&#xff0c;主要是通过fork函数来实现此功能。本文将包含如下内容&#xff1a; 1.fork函数简介 2.父进程与子进程的特征 3.如何使用fork创建新进程…

C语言实现归并排序(Merge Sort)

目录 一、递归实现归并排序 1. 归并排序的基本步骤 2.动图演示 3.基本思路 4.代码 二、非递归实现 1.部分代码 2.代码分析 修正后代码&#xff1a; 归并过程打印 性能分析 复杂度分析 归并排序是一种高效的排序算法&#xff0c;采用分治法&#xff08;Divide and Con…

Spring6梳理13——依赖注入之引入集合Bean属性

以上笔记来源&#xff1a; 尚硅谷Spring零基础入门到进阶&#xff0c;一套搞定spring6全套视频教程&#xff08;源码级讲解&#xff09;https://www.bilibili.com/video/BV1kR4y1b7Qc 13 依赖注入之引入集合Bean属性 13.1 创建Lesson类&#xff0c;student类和teacher实体类…

Ansbile-变量

文章目录 零、Ansible的事实变量和内置变量&#xff1f;Ansible 的内置变量Ansible 的事实变量示例 一、Ansible的事实变量有哪些&#xff08;不全&#xff09;1. ansible_hostname2. ansible_fqdn3. ansible_os_family4. ansible_distribution5. ansible_version6. ansible_al…

从 Shapley 到 SHAP — 数学理解

如何计算 SHAP 特征贡献的概述 假设你(玩家 1)和朋友(玩家 2)参加了一场 Kaggle 比赛,你最终赢得了 10,000 元的一等奖。现在,你想公平地分配这笔钱。你的朋友建议你平分。但是,你的超参数调整技能更出色。你相信你应该得到更大的份额,因为你为团队做出了更多贡献。考虑…

如何在Windows和Linux之间实现粘贴复制

第一步 sudo apt-get autorremove open-vm-tools第二步 sudo apt-get update第三步 sudo apt-get install open-vm-tools-desktop第四步 一直按Y&#xff0c;希望执行 Y第四步 重启 reboot然后可以实现粘贴复制。

MySQL连接查询解析与性能优化成本

文章目录 一、连接查询1.连接查询基础1. INNER JOIN内连接2. LEFT JOIN (或 LEFT OUTER JOIN)左外连接3. RIGHT JOIN (或 RIGHT OUTER JOIN)右外连接4. FULL OUTER JOIN 2.连接查询的两种过滤条件3.连接的原理 二、性能优化成本1.基于成本的优化2.调节成本常数(1)mysql.server_…

如何在Markdown写文章上传到wordpress保证图片不丢失

如何在Markdown写文章上传到wordpress保证图片不丢失 写文日期,2023-11-16 引文 众所周知markdown是一款nb的笔记软件&#xff0c;本篇文章讲解如何在markdown编写文件后上传至wordpress论坛。并且保证图片不丢失&#xff08;将图片上传至云端而非本地方法&#xff09; 一&…

WSL进阶体验:gnome-terminal启动指南与中文显示问题一网打尽

起因 我们都知道 wsl 启动后就死一个纯命令行终端&#xff0c;一直以来我都是使用纯命令行工具管理Linux的。今天看到网上有人在 wsl 中启动带图形界面的软件。没错&#xff0c;就是在wsl中启动带有图形界面的Linux软件。比如下面这个编辑器。 ​​ 出于好奇&#xff0c;我就…

Linux部署python web项目Flask + gunicorn + nginx

文章目录 一、安装python&使用虚拟环境二、python程序重要参数加密2.1 非对称加密&#xff08;RSA&#xff09;2.2 生成密钥对2.4 以连接数据库参数加密为例2.4.1 工具类RSA.py 三、一个简单的Flask项目四、安装配置gunicorn4.1 安装4.2 启动/配置(选择eventlet)4.2.1 命令…

vue打包exe之electron-quick-start的npm install 报错

vue打包exe之electron-quick-start的npm install 报错 1、github地址2、问题3、解决4、其他(打包exe)参考 1、github地址 https://github.com/electron/electron-quick-start2、问题 我使用的pnpm install正常安装&#xff0c;执行npm start提示错误 3、解决 在package.js…

【LLM多模态】文生视频综述From Sora What We Can See: A Survey of Text-to-Video Generation

note 现在很多主流的文生视频应该还是Diffusion-based 基于扩散模型的方法这篇综述将现有研究按照三个维度进行分类&#xff1a;进化生成器&#xff08;Evolutionary Generators&#xff09;、卓越追求&#xff08;Excellent Pursuit&#xff09;、现实全景&#xff08;Realis…

【学习笔记】MIPI

MIPI介绍 MIPI是由ARM、Nokia、ST、IT等公司成立的一个联盟&#xff0c;旨在把手机内部的接口如存储接口&#xff0c;显示接口&#xff0c;射频/基带接口等标准化&#xff0c;减少兼容性问题并简化设计。 MIPI联盟通过不同的工作组&#xff0c;分别定义一系列手机内部的接口标…

植物大战僵尸杂交版V2.5.1下载(最新版)

2.5.1版本更新公告&#xff1a; 在最新的2.5.1版本中&#xff0c;游戏对“两面夹击”关卡进行了多项重要调整。出怪倍率和种类均有所降低&#xff0c;部分关卡的初始阳光量也得到了调整&#xff0c;以增强玩家的策略性。同时&#xff0c;玩家可以在这些关卡中使用投手类植物&a…

sysbench 命令:跨平台的基准测试工具

一、命令简介 sysbench 是一个跨平台的基准测试工具&#xff0c;用于评估系统性能&#xff0c;包括 CPU、内存、文件 I/O、数据库等性能。 ‍ 比较同类测试工具 bench.sh 在上文 bench.sh&#xff1a;Linux 服务器基准测试中介绍了 bench.sh 一键测试脚本&#xff0c;它对…