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

渗透测试之SSRF漏洞原理 危害 产生的原因 探测手法 防御手法 绕过手法 限制的手段

目录

SSRF说明:

SSRF攻击流程

原理:

危害:

SSRF产生的原因

ssrf漏洞利用{危害}

探测手法是否存在SSRF漏洞

如何找ssrf漏洞位置

分享连接地址

google hack url关键字

PHP语言中可能出现的ssrf漏洞函数

file_get_contents

sockopen()

curl_exec()

SSRF防御

1、过滤返回信息

2、统一错误信息

3、限制请求的端口为http常用的端口

4、防火墙策略

5、禁用不需要的协议

6、url网址写死

SSRF绕过手法

1、限制为http://www.xxx.com 域名时(利用@)

2.采用短网址绕过,也叫做url短链接

3.采用进制转换

4.利用特殊域名

5.利用[::]

6.利用句号

7、CRLF 编码绕过

8.利用封闭的字母数字

常见限制

1.限制为http://www.xxx.com 域名

2.限制请求IP不为内网地址

3.限制请求只为http协议


SSRF说明:

  • CSRF:跨站请求伪造,客户端请求伪造

  • SSRF(Server-Side Request Forgery:服务器端请求伪造)

    • 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。

  • 一般情况下,SSRF攻击的目标是从外网无法访问的内部系统

  • 正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统

SSRF攻击流程

  • 外网是服务攻击到

  • 内网ip是不联网的(服务器)

  • 如果含有ssrf漏洞

  • Pyload

  • 内网服务器

原理:

  • SSRF 形成的原因:
    • 大都是由于服务端提供了
    • 从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制

  • 黑客操作服务端从指定URL地址获取网页文本内容

    • 加载指定地址的图片,下载等等

    • 利用的是服务端的请求伪造【SSRF】

    • ssrf是利用存在缺陷的web应用作为代理攻击远程和本地的服务器。

外网 -> 如果含有ssrf漏洞{中间外网服务器} –> pyload -> 内网服务器

  • 本机 公网 【攻击主机】
  • Win2003 php 公网 lan地址 【外网服务器 商城】
  • Win lan地址 【和外网服务器商城相连接】

危害:

  • 主要是用来进行内网进行探测

    • 也可以说是内网信息收集

    • 存货主机和开发端口。

    • 基于这一步开展下一步的后渗透行为

  • 访问网址是没意义的 我们需要探测内网主机端口开放情况以及存活情况。


SSRF产生的原因

  • 就是用户提交过来的数据没有做过滤

  • 我们就可以改成内网ip地址手动去探测一下

    • 这个的前提是我们做好信息收集拿到了真实的IP


ssrf漏洞利用{危害}

  1. 可以对外网服务器所在的内网进行端口扫描,获取一些服务的banner信息mysql5.5.53

  2. 有时候还可以攻击运行在内网或本地的应用程序; 内网中其它的主机 比如通过ssrf给内网的redis写定时任务,实现反弹shell;

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

  4. 攻击内外网的web应用,比如struts2,sql注入等;

  5. 利用file协议读取本地文件等;

  6. 各种伪协议进行探测:http,file,dict,ftp,gopher等 伪协议;


探测手法是否存在SSRF漏洞

  • BP攻击器 如果对方开启了ip白名单或者是请求频率限制如何处理?

    • 手工探测是非常麻烦勒

    • 这个时候我们就可以借助自动化工具去探测比如说BP

如何找ssrf漏洞位置

  • 各大电商分享地址 这样就是请求地址转发的形式

    • 其实这样就是一个服务端的ssrf漏洞

    • 探测分享网址的服务端地址 探测服务端服务器。

分享连接地址

  • 图片、文章收藏功能:此处的图片、文章收藏中的文章收藏

  • 就类似于分享功能中获取URL地址中title以及文本的内容作为显示,目的还是为了更好的用户体验。

    • 例如title参数是文章的标题地址,代表了一个文章的地址链接,请求后返回文章是否保存,收藏的返回信息。

    • 如果保存,收藏功能采用了此种形式保存文章,则在没有限制参数的形式下可能存在SSRF。

    • http://title.xxx.com/title?title=http://title.xxx.com/as52ps63de

google hack url关键字

  • 从URL关键字中寻找

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

    • Inurl: .php?url=

share

wap

url

link

src

source

target

u

display

sourceURl

imageURL

domain


PHP语言中可能出现的ssrf漏洞函数

  • 代码审计会发现的漏洞 需要看对请求参数是否过滤。

file_get_contents

  • 下面的代码使用file_get_contents函数从用户指定的url获取图片

    • 然后把它用一个随机文件名保存在硬盘上,并展示给用户

<?php if (isset($_POST['url'])) {
$content = file_get_contents($_POST['url']); $filename ='./images/'.rand().';img1.jpg'; file_put_contents($filename, $content); echo $_POST['url'];
$img = "<img src=\"".$filename."\"/>";
}
echo $img;
?>

sockopen()

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

<?php
function GetFile($host,$port,$link)
{
$$fp = fsockopen($$host, intval($port), $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;
}
}
?>

curl_exec()

  • cURL这是另一个非常常见的实现,它通过 PHP获取数据。文件/数据被下载并存储在“curled”文件夹下的磁盘中,并附加了一个随机数和“.txt”文件扩展名

<?php if (isset($_POST['url'])) {
$link = $_POST['url']; $curlobj = curl_init();
curl_setopt($curlobj, CURLOPT_POST, 0); curl_setopt($curlobj,CURLOPT_URL,$link); curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, 1);
$result=curl_exec($curlobj); curl_close($curlobj);
$filename = './curled/'.rand().'.txt'; file_put_contents($filename, $result); echo $result;
}
?>

SSRF防御

  • 1、过滤返回信息

    • 验证远程服务器对请求的响应是比较容易的方法。

    • 如果web应用是去获取某一种类型的文件

    • 那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。

  • 2、统一错误信息

    • 避免用户可以根据错误信息来判断远端服务器的端口状态

  • 3、限制请求的端口为http常用的端口

    • 比如,80,443,8080,8090。

  • 4、防火墙策略

    • 内网ip设置黑名单

    • 避免应用被用来获取获取内网数据

    • 攻击内网。

  • 5、禁用不需要的协议

    • 仅仅允许http和https请求

    • 可以防止类似于file:///,gopher://,ftp:// 等引起的问题。

  • 6、url网址写死

    • 固定几个网址

    • 其他网址一律不允许访问


SSRF绕过手法

1、限制为http://www.xxx.com 域名时(利用@)

  • 可以尝试采用http基本身份认证的方式绕过

  • 如:http://www.aaa.com@www.bbb.com@www.ccc.com,在对@解析域名中,不同的处理函数存在处理 差异 在PHP的parse_url中会识别www.ccc.com,而libcurl则识别为www.bbb.com。这个要分语言

2.采用短网址绕过,也叫做url短链接

  • 比如百度短地址https://dwz.cn/ 有很多在线网站就能帮我们的网址转换为url短链接形式。
  • 原理就是:
    • 当请求这个短链接的时候,url短链接提供商的服务器先解析一下对应的真实url
    • 然后拿到实url之后再发起访问
    • 这样提交的数据看不到真实url
    • 用来绕过后端代码对网址的过滤,所以url短链接经常用于攻击行为和钓鱼行为等。
  • 黑客更多用这种方法来进行绕过

3.采用进制转换

  • 127.0.0.1 八进制:0177.0.0.1。
  • 十六进制:0x7f.0.0.1。
  • 十进制:2130706433.

4.利用特殊域名

  • 原理是DNS解析。
    • xip.io可以指向任意域名,即 127.0.0.1.xip.io,可解析为127.0.0.1

5.利用[::]

  • 可以利用[::]来绕过localhost
    • http://169.254.169.254>>http://[::169.254.169.254] # 这种写法是ipv6的地址写法,
    • 只要对方支持ipv6的ip地址访问就行,需要配置才行
    • 比如nginx就可以配 置ipv6来访问

6.利用句号

  • 127。0。0。1 >>> 127.0.0.1
  • 比如:
    • ping 127。0。0。1,
  • 注意,linux系统才能识别,windows系统不能识别

7、CRLF 编码绕过

  • %0d->0x0d->\r回车 %0a->0x0a->\n换行 进行HTTP头部注入 example.com/?
  • url=http://eval.com%0d%0aHOST:fuzz.com%0d%0a

8.利用封闭的字母数字

利用Enclosed alphanumerics,有些输入法直接就可以输入这样的封闭字符

ⓔⓧⓐⓜⓟⓛⓔ.ⓒⓞⓜ >>> example.com http://169.254.169.254>>>http://[::①⑥⑨。②⑤④。⑯⑨。②⑤④] List:

① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳

⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇

⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛

⒜ ⒝ ⒞ ⒟ ⒠ ⒡ ⒢ ⒣ ⒤ ⒥ ⒦ ⒧ ⒨ ⒩ ⒪ ⒫ ⒬ ⒭ ⒮ ⒯ ⒰ ⒱ ⒲ ⒳ ⒴ ⒵ Ⓐ Ⓑ Ⓒ Ⓓ Ⓔ Ⓕ Ⓖ Ⓗ Ⓘ Ⓙ Ⓚ Ⓛ Ⓜ Ⓝ Ⓞ Ⓟ Ⓠ Ⓡ Ⓢ Ⓣ Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩ ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ⓠ ⓡ ⓢ ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ ⓪ ⓫ ⓬ ⓭ ⓮ ⓯ ⓰ ⓱ ⓲ ⓳ ⓴

⓵ ⓶ ⓷ ⓸ ⓹ ⓺ ⓻ ⓼ ⓽ ⓾ ⓿

比如ping ①②⑦.⓪.⓪.① 注意,也是linux系统支持


常见限制

1.限制为http://www.xxx.com 域名

采用http基本身份认证的方式绕过,

即@ http://www.xxx.com@www.xxc.com

2.限制请求IP不为内网地址

当不允许ip为内网地址时:

(1)采取短网址绕过

(2)采取特殊域名

(3)采取进制转换

3.限制请求只为http协议

(1)采取302跳转 https-->http

(2)采取短地址

相关文章:

渗透测试之SSRF漏洞原理 危害 产生的原因 探测手法 防御手法 绕过手法 限制的手段

目录 SSRF说明: SSRF攻击流程 原理&#xff1a; 危害: SSRF产生的原因 ssrf漏洞利用{危害} 探测手法是否存在SSRF漏洞 如何找ssrf漏洞位置 分享连接地址 google hack url关键字 PHP语言中可能出现的ssrf漏洞函数 file_get_contents sockopen() curl_exec() SSRF…...

微信小程序-base64加解密

思路&#xff1a;先创建一个base64.js的文件&#xff0c;这个文件可以作为专门加解密的文件模块&#xff0c;需要时就引用&#xff1b;创建好后&#xff0c;引用base64.js里的加解密函数。 注意&#xff1a;引用模块一定要引用正确的路径&#xff0c;否则会报错。 base64.js:…...

Linux shell 批量验证端口连通性

脚本 #!/bin/bash # #database check #set -o nounset LOCALIPifconfig | grep inet | head -1 | awk {print $2} | sed s/addr\:// IPLIST192.168.1.99 192.168.1.98 192.168.1.97 PORTLIST81 82 83 84 85 86 check_nc(){ for CHECK_IP in $IPLIST dofor CHECK_PORT in $PORT…...

2025-1-21 Newstar CTF web week1 wp

文章目录 week1headach3会赢吗智械危机 week1 headach3 根据提示&#xff0c;在页面的请求头里找到flag flag{You_Ar3_R3Ally_A_9ooD_d0ctor} 会赢吗 打开控制台&#xff0c;拿到第一部分flag 将地址栏改为提示&#xff0c;去到下一关 控制台调用函数&#xff0c;得到flag …...

【系统架构】如何设计一个秒杀系统?

目录 1. 什么是秒杀&#xff1f; 2. 秒杀系统的特点 3. 如何设计秒杀系统&#xff1f; 3.1 前端秒杀设计 3.2 后端秒杀设计 4. 如何保证不超卖&#xff1f; 4.1 库存扣减方式 4.2 服务端库存处理 5. 总结 * 知识扩展&#xff1a;什么是CDN&#xff1f; 1. 什么是秒杀…...

C++模拟实现queue

C模拟实现queue 1.queue的基本概念2.queue的基本框架3.size()成员函数4.empty()成员函数5.push()成员函数6.pop()成员函数7.front()成员函数8.back()成员函数9.完整代码 &#x1f31f;&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f;&#x1f31f; &#x…...

【2025小年源码免费送】

&#x1f496;学习知识需费心&#xff0c; &#x1f4d5;整理归纳更费神。 &#x1f389;源码免费人人喜&#xff0c; &#x1f525;码农福利等你领&#xff01; &#x1f496;山高路远坑又深&#xff0c; &#x1f4d5;大军纵横任驰奔&#xff0c; &#x1f389;谁敢横刀立马行…...

PyQt5 超详细入门级教程上篇

PyQt5 超详细入门级教程 上篇&#xff1a;1-3部分&#xff1a;PyQt5基础与常用控件 第1部分&#xff1a;初识 PyQt5 和安装 1.1 什么是 PyQt5&#xff1f; PyQt5 是 Python 的图形用户界面 (GUI) 框架&#xff0c;它基于强大的 Qt 库。Qt 是一个跨平台的 C 框架&#xff0c;用…...

qiankun+vite+vue3

基座与子应用代码示例 本示例中,基座为Vue3,子应用也是Vue3,由于qiankun不支持Vite构建的项目,这里还要引入 vite-plugin-qiankun 插件 基座(主应用) 加载qiankun依赖 npm i qiankun -S qiankun配置(src/qiankun) src/qiankun/config.ts export default {subApp…...

【数据结构】顺序队列与链式队列

顺序队列与链式队列 1.队列的基本概念1.顺序存储的队列&#xff1a;循环队列3.链式存储的队列&#xff1a;链式队列 1.队列的基本概念 队列是一种逻辑结构&#xff0c;是一种特殊的线性表 只能在固定的两端操作线性表 只要满足上述条件&#xff0c;那么这种特殊的线性表就会…...

Cursor的详细使用指南

以下是一份关于 Cursor 的详细使用指南&#xff1a; 一、安装与设置 下载与安装&#xff1a; 首先&#xff0c;访问 Cursor 的官方网站&#xff0c;根据你的操作系统&#xff08;Windows、Mac 或 Linux&#xff09;下载相应的安装程序。运行安装程序&#xff0c;按照屏幕上的提…...

2025美赛数学建模B题思路+模型+代码+论文

2025美赛数学建模A题B题C题D题E题思路模型代码&#xff08;1.24第一时间更新&#xff0c;更新见文末名片&#xff09; 论文数学建模感想 纪念逝去的大学数学建模&#xff1a;两次校赛&#xff0c;两次国赛&#xff0c;两次美赛&#xff0c;一次电工杯。从大一下学期组队到现在…...

2024年度总结-CSDN

2024年CSDN年度总结 Author&#xff1a;OnceDay Date&#xff1a;2025年1月21日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 文章目录 2024年CSDN年度总结1. 整体回顾2…...

2024国游销量前20游戏分析:某开放世界武侠(排名11)

1、销量约20万套&#xff0c;销售额1400万人民币。 与一代的发售间隔为三年。 虽然对于网游大厂来说这个数字不够看&#xff0c;但对一个小团队来说足够维持了&#xff0c;三年的运营成本不是小数目。 2、开发商属于国内最早做3DMMO的厂商之一&#xff0c;创始人曾在国外大学…...

如何使用python技术爬取下载百度文库文档?

使用 Python 爬取百度文库文档需要通过分析网页结构和接口请求来实现。以下是一个基于搜索结果的实现方法&#xff0c;适用于爬取百度文库中的文档内容&#xff1a; 第一部分&#xff1a;获取百度文库文档 实现步骤 获取文档 ID 和基本信息 通过文档的 URL 获取文档 ID&…...

navicat无法连接虚拟机的docker中的mysql

我的数据库安装在了虚拟机的docker中&#xff0c;启动MySQL后&#xff0c;在主机上使用navicat一直连接不上。 首先确认密码是否有问题&#xff1a; docker exec -it mysql8 bash #进入mysql容器 mysql -u root -p #登录MySQL&#xff0c;我这边密码是123456 密码没问题的话…...

如何使用CRM数据分析优化销售和客户关系?

嘿&#xff0c;大家好&#xff01;你有没有想过为什么有些公司在市场上如鱼得水&#xff0c;而另一些却在苦苦挣扎&#xff1f;答案可能就藏在他们的销售策略和客户关系管理&#xff08;CRM&#xff09;系统里。今天我们要聊的就是如何通过有效的 CRM 数据分析来提升你的销售额…...

【Unity3D】3D物体摆放、场景优化案例Demo

目录 PlaceManager.cs(放置管理类) Ground.cs(地板类) 和 GroundData.cs(地板数据类) 额外知识点说明 1、MeshFilter和MeshRenderer的Bounds区别 2、Gizmos 绘制一个平行于斜面的立方体 通过网盘分享的文件&#xff1a;PlaceGameDemo2.unitypackage 链接: https://pan.baid…...

使用HTML5 Canvas 实现呼吸粒子球动画效果的原理

在网页开发领域&#xff0c;动画效果能够极大地提升用户体验&#xff0c;让页面变得更加生动有趣。今天&#xff0c;我们深入剖析一个基于 HTML5 Canvas 的 3D 粒子动画 —— 呼吸粒子球。通过详细解读其代码实现&#xff0c;我们将全面了解如何运用 HTML5 的强大功能构建出如此…...

Java 中实体类与操作类分离

目录 一、为啥要把实体类和操作类分开 二、实体类长啥样&#xff0c;怎么用 三、操作类的使命与实现 四、实战演练&#xff1a;实体类与操作类协同工作 五、拓展思考&#xff1a;这种分离带来的好处与进一步优化 六、总结与展望 家人们&#xff0c;今天我想跟你们唠唠我在…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

scikit-learn机器学习

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...