渗透测试之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漏洞利用{危害}
-
可以对外网服务器所在的内网进行端口扫描,获取一些服务的banner信息mysql5.5.53
-
有时候还可以攻击运行在内网或本地的应用程序; 内网中其它的主机 比如通过ssrf给内网的redis写定时任务,实现反弹shell;
-
对内网web应用进行指纹识别;
-
攻击内外网的web应用,比如struts2,sql注入等;
-
利用file协议读取本地文件等;
-
各种伪协议进行探测: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攻击流程 原理: 危害: SSRF产生的原因 ssrf漏洞利用{危害} 探测手法是否存在SSRF漏洞 如何找ssrf漏洞位置 分享连接地址 google hack url关键字 PHP语言中可能出现的ssrf漏洞函数 file_get_contents sockopen() curl_exec() SSRF…...
微信小程序-base64加解密
思路:先创建一个base64.js的文件,这个文件可以作为专门加解密的文件模块,需要时就引用;创建好后,引用base64.js里的加解密函数。 注意:引用模块一定要引用正确的路径,否则会报错。 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 根据提示,在页面的请求头里找到flag flag{You_Ar3_R3Ally_A_9ooD_d0ctor} 会赢吗 打开控制台,拿到第一部分flag 将地址栏改为提示,去到下一关 控制台调用函数,得到flag …...
【系统架构】如何设计一个秒杀系统?
目录 1. 什么是秒杀? 2. 秒杀系统的特点 3. 如何设计秒杀系统? 3.1 前端秒杀设计 3.2 后端秒杀设计 4. 如何保证不超卖? 4.1 库存扣减方式 4.2 服务端库存处理 5. 总结 * 知识扩展:什么是CDN? 1. 什么是秒杀…...
C++模拟实现queue
C模拟实现queue 1.queue的基本概念2.queue的基本框架3.size()成员函数4.empty()成员函数5.push()成员函数6.pop()成员函数7.front()成员函数8.back()成员函数9.完整代码 🌟🌟hello,各位读者大大们你们好呀🌟🌟 &#x…...
【2025小年源码免费送】
💖学习知识需费心, 📕整理归纳更费神。 🎉源码免费人人喜, 🔥码农福利等你领! 💖山高路远坑又深, 📕大军纵横任驰奔, 🎉谁敢横刀立马行…...
PyQt5 超详细入门级教程上篇
PyQt5 超详细入门级教程 上篇:1-3部分:PyQt5基础与常用控件 第1部分:初识 PyQt5 和安装 1.1 什么是 PyQt5? PyQt5 是 Python 的图形用户界面 (GUI) 框架,它基于强大的 Qt 库。Qt 是一个跨平台的 C 框架,用…...
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.顺序存储的队列:循环队列3.链式存储的队列:链式队列 1.队列的基本概念 队列是一种逻辑结构,是一种特殊的线性表 只能在固定的两端操作线性表 只要满足上述条件,那么这种特殊的线性表就会…...
Cursor的详细使用指南
以下是一份关于 Cursor 的详细使用指南: 一、安装与设置 下载与安装: 首先,访问 Cursor 的官方网站,根据你的操作系统(Windows、Mac 或 Linux)下载相应的安装程序。运行安装程序,按照屏幕上的提…...
2025美赛数学建模B题思路+模型+代码+论文
2025美赛数学建模A题B题C题D题E题思路模型代码(1.24第一时间更新,更新见文末名片) 论文数学建模感想 纪念逝去的大学数学建模:两次校赛,两次国赛,两次美赛,一次电工杯。从大一下学期组队到现在…...
2024年度总结-CSDN
2024年CSDN年度总结 Author:OnceDay Date:2025年1月21日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 文章目录 2024年CSDN年度总结1. 整体回顾2…...
2024国游销量前20游戏分析:某开放世界武侠(排名11)
1、销量约20万套,销售额1400万人民币。 与一代的发售间隔为三年。 虽然对于网游大厂来说这个数字不够看,但对一个小团队来说足够维持了,三年的运营成本不是小数目。 2、开发商属于国内最早做3DMMO的厂商之一,创始人曾在国外大学…...
如何使用python技术爬取下载百度文库文档?
使用 Python 爬取百度文库文档需要通过分析网页结构和接口请求来实现。以下是一个基于搜索结果的实现方法,适用于爬取百度文库中的文档内容: 第一部分:获取百度文库文档 实现步骤 获取文档 ID 和基本信息 通过文档的 URL 获取文档 ID&…...
navicat无法连接虚拟机的docker中的mysql
我的数据库安装在了虚拟机的docker中,启动MySQL后,在主机上使用navicat一直连接不上。 首先确认密码是否有问题: docker exec -it mysql8 bash #进入mysql容器 mysql -u root -p #登录MySQL,我这边密码是123456 密码没问题的话…...
如何使用CRM数据分析优化销售和客户关系?
嘿,大家好!你有没有想过为什么有些公司在市场上如鱼得水,而另一些却在苦苦挣扎?答案可能就藏在他们的销售策略和客户关系管理(CRM)系统里。今天我们要聊的就是如何通过有效的 CRM 数据分析来提升你的销售额…...
【Unity3D】3D物体摆放、场景优化案例Demo
目录 PlaceManager.cs(放置管理类) Ground.cs(地板类) 和 GroundData.cs(地板数据类) 额外知识点说明 1、MeshFilter和MeshRenderer的Bounds区别 2、Gizmos 绘制一个平行于斜面的立方体 通过网盘分享的文件:PlaceGameDemo2.unitypackage 链接: https://pan.baid…...
使用HTML5 Canvas 实现呼吸粒子球动画效果的原理
在网页开发领域,动画效果能够极大地提升用户体验,让页面变得更加生动有趣。今天,我们深入剖析一个基于 HTML5 Canvas 的 3D 粒子动画 —— 呼吸粒子球。通过详细解读其代码实现,我们将全面了解如何运用 HTML5 的强大功能构建出如此…...
Java 中实体类与操作类分离
目录 一、为啥要把实体类和操作类分开 二、实体类长啥样,怎么用 三、操作类的使命与实现 四、实战演练:实体类与操作类协同工作 五、拓展思考:这种分离带来的好处与进一步优化 六、总结与展望 家人们,今天我想跟你们唠唠我在…...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
