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

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

目录

一、SSRF 漏洞核心原理

1.1 定义

1.2 攻击流程

1.3 成因分析

1.4 核心危害

二、SSRF 漏洞挖掘技巧

2.1 功能场景挖掘

2.2 URL 关键字挖掘

2.3 漏洞验证方法

三、SSRF 漏洞具体利用

3.1 常用协议及用途

3.2 典型利用场景

四、SSRF 防御与绕过技巧

4.1 核心防御措施

4.2 常见绕过技巧

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

5.1 进入ssrf练习平台(CTFHub)

5.2 内网访问(CTFHub实战)

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

5.4 端口扫描(CTFHub实战)

六、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 语法 + 关键字搜索潜在漏洞点,关键字汇总:

核心关键字扩展关键字搜索语法示例
urlsourceURL、imageURLinurl:"sourceURL" site:xxx.com
linktarget、domaininurl:"link" + "http://"
sharewap、3ginurl:"share" + "url="
displaySIC、sourceinurl:"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
短地址跳转短链接解析后指向内网 IPhttp://127.0.0.1/flag.php转为短链接https://shorturl.at/gszD2
特殊域名xip.io 等域名解析为指定 IP127.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 的核心是 “服务器跳板”,掌握协议利用和绕过技巧,就能应对大部分实战场景。建议结合靶场练习,把每个利用场景和绕过方法动手实操一遍,加深理解~

posted @ 2026-01-17 16:45  clnchanpin  阅读(0)  评论(0)    收藏  举报