网络安全中级阶段学习笔记(六):网络安全 SSRF 漏洞学习笔记

SSRF(Server-Side Request Forgery,服务器端请求伪造)是 Web 安全中高频高危漏洞之一,常被用于攻击内网未暴露服务、读取敏感文件、端口扫描等。

目录

[一、SSRF 漏洞核心原理](#一、SSRF 漏洞核心原理)

[1.1 定义](#1.1 定义)

[1.2 攻击流程](#1.2 攻击流程)

[1.3 成因分析](#1.3 成因分析)

[1.4 核心危害](#1.4 核心危害)

[二、SSRF 漏洞挖掘技巧](#二、SSRF 漏洞挖掘技巧)

[2.1 功能场景挖掘](#2.1 功能场景挖掘)

[2.2 URL 关键字挖掘](#2.2 URL 关键字挖掘)

[2.3 漏洞验证方法](#2.3 漏洞验证方法)

[三、SSRF 漏洞具体利用](#三、SSRF 漏洞具体利用)

[3.1 常用协议及用途](#3.1 常用协议及用途)

[3.2 典型利用场景](#3.2 典型利用场景)

[四、SSRF 防御与绕过技巧](#四、SSRF 防御与绕过技巧)

[4.1 核心防御措施](#4.1 核心防御措施)

[4.2 常见绕过技巧](#4.2 常见绕过技巧)

[五、靶场实战(CTFhub 经典题型)](#五、靶场实战(CTFhub 经典题型))

[5.1 进入ssrf练习平台(CTFHub)](#5.1 进入ssrf练习平台(CTFHub))

[5.2 内网访问(CTFHub实战)](#5.2 内网访问(CTFHub实战))

[5.3 伪协议读取文件(CTFHub实战)](#5.3 伪协议读取文件(CTFHub实战))

[5.4 端口扫描(CTFHub实战)](#5.4 端口扫描(CTFHub实战))

[六、SSRF vs CSRF 易混淆点对比](#六、SSRF vs CSRF 易混淆点对比)

七、学习总结与建议

八、补充工具推荐


一、SSRF 漏洞核心原理

1.1 定义

攻击者通过有漏洞的 Web 应用,以服务器身份发起伪造请求,攻击外网无法直接访问的内网系统或本地资源(本质是服务器充当 "跳板")。

1.2 攻击流程

1.3 成因分析

服务器提供了 "远程获取资源" 功能,但未对用户输入的 URL/IP 做过滤限制,常见危险函数如下:

危险函数(PHP) 功能描述 风险点
curl_exec() 执行 HTTP/HTTPS 等协议请求 支持多协议(file/dict 等),未过滤则可跨网段访问
file_get_contents() 读取本地 / 远程文件 可通过php://伪协议读取源码、file://读本地文件
fsockopen() 建立网络连接并读写数据 可探测端口存活状态

1.4 核心危害

  1. 内网探测:扫描内网主机存活状态、开放端口
  2. 敏感数据泄露:读取服务器本地文件(/etc/passwd、配置文件等)
  3. 内网服务攻击:利用内网应用漏洞(如 Redis 未授权访问)
  4. 端口利用:攻击开放端口对应的服务(如 8080 Tomcat、3306 MySQL)

二、SSRF 漏洞挖掘技巧

2.1 功能场景挖掘

所有 "需要用户输入 URL/IP" 的功能都可能存在漏洞,汇总如下:

功能场景 示例场景 风险点
社交分享 分享链接时获取网页标题 未过滤目标 URL 可指向内网
在线翻译 翻译指定 URL 的网页内容 服务器代访问输入的地址
图片加载 / 下载 富文本编辑器远程图片上传 image=参数未过滤协议
转码服务 网页适配手机屏幕转码 代访问用户输入的 URL
未公开 API 网站评分、远程资源加载 API 参数(如sourceURL)未校验
云服务状态检测 云厂商判断网站是否存活 探测逻辑可被篡改指向内网

2.2 URL 关键字挖掘

通过 Google 语法 + 关键字搜索潜在漏洞点,关键字汇总:

核心关键字 扩展关键字 搜索语法示例
url sourceURL、imageURL inurl:"sourceURL" site:xxx.com
link target、domain inurl:"link" + "http://"
share wap、3g inurl:"share" + "url="
display SIC、source inurl:"display" + "ip="

2.3 漏洞验证方法

三、SSRF 漏洞具体利用

3.1 常用协议及用途

协议 核心作用 实战示例 Payload
http:// 探测内网主机存活、端口扫描 ?url=http://127.0.0.1:8080
file:// 读取服务器本地文件 ?url=file:///etc/passwd(Linux)、file:///C:/WINDOWS/win.ini(Windows)
dict:// 泄露软件版本、端口探测 ?url=dict://127.0.0.1:6379/info(Redis 版本)
gopher:// 发送 POST/GET 请求、攻击内网应用 ?url=gopher://127.0.0.1:80/_GET /flag.php HTTP/1.1\r\nHost: 127.0.0.1\r\n\r\n
php:// 读取 PHP 源码(伪协议) ?url=php://filter/read=convert.base64-encode/resource=ssrf.php

3.2 典型利用场景

利用场景 操作步骤 示例结果
内网访问 拼接内网 IP + 目标文件 ?url=http://127.0.0.1/flag.php(CTF 常见)
读取敏感文件 使用 file:// 协议指定文件路径 获得 /etc/passwd 用户列表
端口扫描 遍历端口 + http/dict 协议 200 状态码 = 端口开放,503 = 未开放
读取 PHP 源码 php://filter 伪协议 Base64 编码读取 解码后得到服务器脚本源码

四、SSRF 防御与绕过技巧

4.1 核心防御措施

防御方向 具体操作 效果
过滤 URL/IP 黑名单:内网 IP(127.0.0.1、192.168.0.0/16 等) 阻止直接访问内网
限制协议 仅允许 http/https,禁用 file/dict/gopher 等 避免本地文件读取 / 端口探测
限制端口 仅开放 80、443、8080 等常用端口 减少端口攻击面
统一错误信息 隐藏 "端口未开放""文件不存在" 等具体提示 防止攻击者判断状态
验证返回内容 校验返回数据是否符合预期(如仅允许图片格式) 避免泄露敏感信息

4.2 常见绕过技巧

绕过方法 原理 实战示例
@符号绕过 URL 中@后才是真实访问地址 http://notfound.ctfhub.com@127.0.0.1/flag.php
进制转换 点分十进制 IP 转其他进制(八 / 十六 / 十) 127.0.0.1 → 八进制0177.0.0.1、十进制2130706433
短地址跳转 短链接解析后指向内网 IP http://127.0.0.1/flag.php转为短链接https://shorturl.at/gszD2
特殊域名 xip.io 等域名解析为指定 IP 127.0.0.1.xip.io → 解析为 127.0.0.1
302 跳转 服务器跟随 302 重定向,指向内网 构造公网跳转页面,重定向到127.0.0.1
DNS 重绑定 域名多次解析为不同 IP(公网→内网) 生成绑定 127.0.0.1 的域名7f000001.c0a80001.rbndr.us
特殊符号替换 代替.,绕过 IP 过滤 127。0。0。1 → 等效 127.0.0.1

五、靶场实战(CTFhub 经典题型)

题型 解题思路 核心 Payload
内网访问 直接访问 127.0.0.1/flag.php ?url=http://127.0.0.1/flag.php
伪协议读取文件 使用 file:// 协议读取 /var/www/html/flag.php ?url=file:///var/www/html/flag.php
端口扫描 Burp Intruder 遍历 8000-9000 端口 ?url=http://127.0.0.1:8628(示例开放端口)
URL Bypass @符号绕过 "必须包含指定域名" 限制 ?url=http://notfound.ctfhub.com@127.0.0.1/flag.php
数字 IP Bypass 进制转换 /localhost绕过 IP 黑名单 ?url=http://localhost/flag.php
302 跳转 Bypass 短链接跳转指向内网 ?url=https://shorturl.at/gszD2
DNS 重绑定 Bypass 使用 DNS 重绑定工具生成目标域名 ?url=http://7f000001.c0a80001.rbndr.us/flag.php

5.1 进入ssrf练习平台(CTFHub)

进入ctfhub平台(https://www.ctfhub.com/),注册一个账户,点击顶上的技能树,点击web

点击ssrf

5.2 内网访问(CTFHub实战)

点击内网访问,点击开启题目

复制题目给出的链接,并且题目的提示是叫我们访问127.0.0.1下的flag.php

复制题目给的网址,可以看见网址后面自动显示了一个url=_ 的一个标签,很明显需要我们填网址,再加上题目的提示,所以我们去掉横线,输入

复制代码
127.0.0.1/flag.php

可以看见给出了一串代码,这个就是我们需要提交的flag。全部复制下来

复制这flag代码(记住他的格式,后续的flag的格式样子都长这样)

复制代码
ctfhub{4ce13e02b42995aa0fe547e3}

返回ctfhub平台的这道题,粘贴进去,点击提交flag

右上角弹窗显示成功就代表成功了

接着第二题

5.3 伪协议读取文件(CTFHub实战)

点击开启题目

可以看到有一个网址,然后题目的提示是读取web目录下的flag.php,这里就要用到读取文件的file:///协议了

题目说的是web目录下的flag.php,我查了一下,web目录指的是var/www,正常后面都会接个html,如果没有的话再考虑后面没有html目录的情况

所以这里的网址的url为

复制代码
file:///var/www/html/flag.php

输入进去回车

发现出现了3个❓,查看源代码看看

结果找到了flag代码,复制下来

复制代码
ctfhub{c7989a71ba81a196ec12b18e}

返回题目,粘贴,提交

成功

5.4 端口扫描(CTFHub实战)

打开burp suite抓包工具拦截模式(不会下载安装使用的参考我往期作品点击跳转👈)

打开浏览器的代理工具,以及配置的bp代理(不会的参考往期作品点击跳转👈

打开题目复制的网址,然后url填写一个127.0.0.1,后面的端口随便填写,方便我们进行爆破

打开bp发现包已经拦截成功,右键界面,发送到爆破模块intruder

点击进入intruder,positions,点击右边clear删除所有标记

选中端口8080,点击右边的add添加

然后端口8080会变成绿色

然后点击payloads,如图进行设置参数

最后点击start attack直接进行爆破,等待一会时间

发现有一个不一样的,端口为8628,所以端口就是这个了

直接访问,发现flag代码出来了

直接复制

复制代码
ctfhub{5c283ab9b860387840ad49d5}

粘贴到题目中提交

后续题目感兴趣的也可以自行尝试

六、SSRF vs CSRF 易混淆点对比

对比维度 SSRF(服务器端) CSRF(客户端)
攻击发起方 有漏洞的 Web 服务器 受害者的浏览器
核心原理 服务器未过滤请求,充当跳板 利用用户 Cookie,伪造用户操作
攻击目标 内网服务、服务器本地资源 用户有权限的 Web 应用
触发条件 输入恶意 URL/IP 诱导用户点击恶意链接 / 访问页面

七、学习总结与建议

  1. 挖掘核心:凡输入 URL/IP 的功能,皆可测试 SSRF(分享、翻译、图片加载等)
  2. 利用优先级:伪协议读文件 > 内网端口扫描 > 内网服务攻击
  3. 防御核心:"白名单 + 协议限制 + 返回校验" 三重防护,黑名单易被绕过
  4. 实战建议:多刷 CTFhub SSRF 专题,重点练习 "绕过技巧" 和 "协议利用"
  5. 法律红线:测试需获得授权,禁止未授权扫描他人服务器

八、补充工具推荐


最后:SSRF 的核心是 "服务器跳板",掌握协议利用和绕过技巧,就能应对大部分实战场景。建议结合靶场练习,把每个利用场景和绕过方法动手实操一遍,加深理解~

相关推荐
shenghaide_jiahu1 小时前
数学分析简明教程——总练习题5
学习
中云DDoS CC防护蔡蔡1 小时前
国外服务器延迟高怎么办
服务器·经验分享·http·网络安全·ddos
0和1的舞者1 小时前
《从静态页到自定义 Header:Spring MVC 响应能力通关指南》
java·学习·web·header·spirng
moringlightyn1 小时前
Linux---基础IO(文件理解 文件接口使用 文件系统层面)
linux·运维·服务器·c语言·笔记·系统·文件
烟囱土著1 小时前
捣鼓30天,我写了一个数学加减练习小程序
学习·算法·微信小程序·小程序
丝斯20111 小时前
AI学习笔记整理(29)—— 计算机视觉之人体姿态估计相关算法
人工智能·笔记·学习
未若君雅裁1 小时前
JVM实战总结笔记
java·jvm·笔记
摇滚侠1 小时前
2025最新 SpringCloud 教程,Seata-基础-架构原理-整合 Seata 完成,笔记68,笔记69
笔记·spring cloud·架构
xixixi777771 小时前
二值化——将具有丰富灰度或彩色信息的图像,转换为仅由两种像素值(通常是0和1,或0和255) 组成的图像,即黑白图像
网络·图像处理·人工智能·学习·计算机视觉·信息与通信