网络安全进阶学习:SSRF(服务器端请求伪造)漏洞全解析

摘要:本文旨在系统性地解析SSRF(服务器端请求伪造)漏洞。内容涵盖其核心原理、常见成因、挖掘方法、具体利用手段、经典防御策略及其绕过技巧,并结合实战靶场(如CTFHub、Pikachu)案例进行说明。

靶场实践:CTFHub靶场---SSRF攻击-CSDN博客


目录

[一、 SSRF原理概述](#一、 SSRF原理概述)

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

[三、 SSRF具体利用手法](#三、 SSRF具体利用手法)

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

[五、 实战练习与总结](#五、 实战练习与总结)


一、 SSRF原理概述

1.1 什么是SSRF?

SSRF(Server-Side Request Forgery,服务器端请求伪造)是一种由攻击者构造恶意请求,并由服务器端 代为发起此请求的安全漏洞。攻击者能够利用存在缺陷的Web应用作为代理,去攻击服务器所在内网或本地的其他服务。

简单比喻A(用户)让B(存在漏洞的服务器)去访问C(目标,通常是内网或本地的资源)。如果B在"不知情"(即未对A的请求目标做严格校验)的情况下执行了请求,就形成了SSRF。

1.2 漏洞成因

核心原因在于:服务器提供了从其他服务器获取数据的功能,但未对用户提供的目标地址(URL)进行充分的过滤与限制

常见的危险函数包括:

  • file_get_contents():可读取本地/远程文件,支持多种协议。

  • fsockopen():打开网络Socket连接。

  • curl_exec():执行cURL会话,支持多种网络协议。

例如,一段不安全的PHP代码:

复制代码
if(isset($_GET['url'])){
    $url = $_GET['url']; // 未对用户输入的`url`参数做任何过滤
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    $result = curl_exec($ch); // 服务器直接请求用户输入的URL
    curl_close($ch);
    echo $result;
}

1.3 主要危害

  1. 内网探测与端口扫描:探测内网存活主机及开放的服务端口。

  2. 读取本地敏感文件 :利用file://等协议读取服务器本地的系统或应用文件(如/etc/passwd, Web源码)。

  3. 攻击内网应用:利用漏洞作为跳板,攻击内网中不可直接访问的Web应用或服务(如Redis, JBoss等)。

  4. 利用内外网Web漏洞:结合其他Web漏洞(如SQL注入、RCE)进行组合攻击。


二、 SSRF漏洞挖掘

挖掘SSRF的关键在于寻找服务器会代表用户发起网络请求的功能点。

2.1 从Web功能上寻找

  • 社交分享功能:通过用户提供的URL获取网页标题、缩略图。

  • 在线翻译:翻译指定URL的网页内容。

  • 图片/文件加载与下载:编辑器远程加载图片、通过URL下载资源、远程设置头像。

  • 转码服务:为适应移动端,对提供URL的网页进行转码(如百度、腾讯的转码服务)。

  • 未公开的API接口:任何需要传入URL参数以获取远程资源的接口。

  • 网站评分/测速:一些在线服务会访问目标网站进行评估。

2.2 从URL参数关键字中寻找

在功能测试或代码审计中,可关注以下常见参数名:

share, wap, url, link, src, source, target, display, sourceURL, imageURL, domain 等。利用Google语法(inurl:)结合这些关键字,可能发现存在漏洞的站点。

核心思路一切需要用户输入URL或IP地址的地方,都可能存在SSRF风险。


三、 SSRF具体利用手法

3.1 利用协议

SSRF利用常涉及以下协议:

  • http(s)://:探测内网、攻击Web应用。

  • file://:读取服务器本地文件。

  • dict://:获取服务Banner信息,探测端口。

  • gopher://:功能强大的协议,可用于构造GET/POST请求攻击多种内网服务(如Redis、MySQL)。

  • PHP伪协议(如php://filter):读取服务器文件源码。

3.2 利用场景

  1. 访问内网资源?url=http://192.168.1.1/admin?url=http://127.0.0.1/flag.php

  2. 读取本地文件?url=file:///etc/passwd?url=file:///C:/Windows/win.ini

  3. 端口扫描

    • 使用dict协议:?url=dict://127.0.0.1:22(通过返回的Banner或错误信息判断)。

    • 使用http协议:?url=http://127.0.0.1:8080(通过HTTP状态码差异判断,如200、503、超时等)。常用工具(如Burp Suite Intruder)进行批量探测。

  4. 攻击内网应用 :结合gopher等协议攻击内网的Redis、FastCGI等服务。

3.3 漏洞验证

  • 排除法一(外网请求) :输入外部地址(如http://www.baidu.com),观察返回内容是否为百度页面。如果是,则可能存在问题。

  • 排除法二(流量分析) :使用抓包工具(如Burp Suite)。如果请求图片等资源的流量是由客户端浏览器 直接发出,则非SSRF;如果该请求是由服务器端发起再返回给客户端,则可能存在SSRF。


四、 SSRF防御与绕过

4.1 防御思路

  1. 过滤与校验 :对用户输入的URL进行严格过滤,禁止内网IP、私有地址段(如127.0.0.0/8, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)。

  2. 限制协议 :仅允许httphttps协议,禁用filegopherdictftp等危险协议。

  3. 限制端口:只允许访问Web常用端口(如80, 443, 8080, 8090)。

  4. 统一错误信息:避免通过差异化的错误信息暴露端口或服务状态。

  5. 验证响应内容:服务器获取远程内容后,应校验其格式是否合法(如图片头、文件类型)。

  6. 禁止跳转:处理302/307等跳转,防止利用重定向绕过黑名单。

4.2 常见绕过技巧

当防御措施不完善时,攻击者可尝试以下绕过方法:

  1. 利用@符号http://example.com@127.0.0.1,实际请求的是127.0.0.1

  2. 使用非常见IP格式

    • 八进制:0177.0.0.1-> 127.0.0.1

    • 十六进制:0x7f.0.0.1-> 127.0.0.1

    • 十进制:2130706433-> 127.0.0.1

    • 省略点:127.0.0.1-> 127.1

  3. 利用域名解析特性

    • 特殊域名:127.0.0.1.xip.io解析为 127.0.0.1

    • DNS重绑定攻击:利用域名TTL过期后重新解析到内网IP的特性。

  4. 利用URL编码/封闭式字母数字 :对IP或点号进行编码或使用特殊字符(如127。0。0。1127。0。0。1)。

  5. 利用短网址服务:将内网地址生成短链,以绕过对明文内网IP的检测。

  6. 使用非HTTP协议 :如果未完全禁用,可尝试dict://sftp://ldap://tftp://等协议。


五、 实战练习与总结

5.1 推荐靶场

Pikachu靶场:提供基础的SSRF利用场景(外网访问、文件读取、端口探测)。

CTFHub技能树-SSRF板块:提供体系化的挑战,涵盖基础利用及各种Bypass技巧(如数字IP绕过、302跳转绕过、DNS重绑定等),是深入学习的最佳路径。

5.2 核心总结

漏洞入口广泛:任何允许用户提交URL/IP地址的功能点都应被纳入测试范围。

利用链丰富 :SSRF不仅是信息泄露漏洞,更是进入内网的"桥梁"。结合file协议可读文件,结合gopher等协议可攻击内网服务,危害极大。

防御需多层:单一的黑名单过滤极易被绕过。应采取"白名单+协议/端口限制+禁止跳转"的综合防护策略,并对服务器出站流量进行监控。

持续学习:SSRF的绕过技巧与防御手段在不断演变,需关注最新的绕过技术(如利用云服务元数据、新型协议等)。

学习SSRF的过程,是理解Web应用作为"网络代理"这一角色所面临风险的过程。唯有深刻理解其原理,才能有效地挖掘与防御。

相关推荐
项目管理小胡6 小时前
2026年项目管理工具选型指南:功能对比、适用场景与避坑建议
java·python·安全·团队开发·个人开发
huachaiufo7 小时前
burpsuite代理链实现对google.com 访问
web安全·网络安全
祁白_7 小时前
Bugku:备份是一个好习惯
笔记·学习·web安全·ctf
芙莉莲教你写代码7 小时前
Flutter 框架跨平台鸿蒙开发 - 网络安全学习应用
学习·web安全·flutter·华为·harmonyos
OPHKVPS8 小时前
Metro4Shell攻击进行中:CVE-2025-11953高危漏洞正被用于入侵React Native开发者机器
安全·web安全
黎阳之光8 小时前
黎阳之光:数智科技破局湖库富营养化,筑造水生态治理新标杆
大数据·人工智能·科技·安全·数字孪生
white-persist8 小时前
【渗透测试 红队】Netcat(NC)渗透实战全指南详解
开发语言·数据库·python·sql·算法·web安全·网络安全
Figo_Cheung9 小时前
Figo数字时代科学创新的伦理安全策略及技术实现——AI参与科学创新的伦理安全审查
人工智能·安全
123过去10 小时前
crunch使用教程
linux·测试工具·安全