微服务与RPC架构下SSRF的新玩法
字数 1791 2025-08-23 18:31:17

微服务与RPC架构下SSRF漏洞深度解析与利用

一、微服务与RPC架构基础

1.1 微服务架构

核心概念

  • 将应用程序划分为一组小型、独立的服务
  • 每个服务运行在自己的进程中
  • 通过轻量级通信机制协同工作(HTTP/RPC/消息队列)
  • 独立开发、部署和扩展

优势

  • 快速迭代
  • 高可用性
  • 可扩展性
  • 技术栈灵活性

1.2 RPC(远程过程调用)

核心概念

  • 允许不同系统上的程序像调用本地函数一样调用远程函数
  • 隐藏底层网络通信复杂性
  • 常见实现:gRPC、Thrift、JSON-RPC

优势

  • 高效通信
  • 简化分布式系统开发
  • 支持多种编程语言

1.3 微服务与RPC的关系

  • RPC作为微服务间通信手段
  • 微服务为RPC提供应用场景
  • 两者相辅相成推动分布式系统发展

二、传统SSRF漏洞利用

2.1 SSRF基本概念

定义:服务器端请求伪造,利用存在缺陷的Web应用作为代理发起内部/外部请求

成因:服务端未对用户输入URL进行有效过滤和限制

攻击目标

  • 互联网无法直接访问的内部服务
  • 本地网络资源
  • 受限资源

2.2 常见利用方式

2.2.1 协议利用

  • HTTP/HTTPS:访问内部Web服务
  • 文件协议:读取服务器文件
  • LDAP:目录服务查询
  • 压缩协议:zlib/phar/tar/rar
  • 数据库协议:Redis/Memcached

2.2.2 PHP伪协议利用

// base64编码读取文件
file_get_contents('php://filter/read=convert.base64-encode/resource=/etc/passwd');

// 直接读取POST输入
file_get_contents('php://input');

2.2.3 内网探测

  • Web服务指纹识别
  • 端口扫描
  • 盲打RCE漏洞

2.2.4 高级绕过技术

  • 短网址重定向
  • 自建恶意网站
  • 域名解析控制
  • 多漏洞组合(DOM-XSS+CSRF+SSRF)

2.3 黑盒测试重点

  1. 业务功能测试

    • 社交分享URL处理
    • 转码服务
    • 在线翻译
    • 图片加载/下载
    • 内容收集
  2. URL参数测试

    • 关键参数识别(share/wap/url等)
    • 边界值测试
    • 协议和编码测试
    • 重定向测试
    • 权限验证

三、微服务与RPC架构下的SSRF新利用

3.1 架构特性带来的风险

  1. 网络请求复杂度增加

    • 更多服务间通信
    • 更复杂的调用链
    • 更大的攻击面
  2. RPC框架降低控制力

    • 隐藏网络细节
    • 减少输入检查
    • 增加漏洞隐蔽性
  3. 服务注册中心风险

    • 元数据篡改可能
    • 服务发现滥用
  4. 序列化风险

    • 反序列化漏洞
    • 输入校验不足

3.2 新型利用场景

3.2.1 跨协议攻击

  • HTTP → RPC协议转换
  • 利用微服务支持的多种协议
  • 绕过传统防护措施

3.2.2 内部服务调用滥用

  • 伪造服务间通信
  • 绕过服务鉴权
  • 示例攻击链:
    1. 通过SSRF访问UserService获取token
    2. 使用token冒充合法服务访问PaymentService
    3. 获取支付敏感信息

3.2.3 服务注册中心攻击

  • 查询服务注册信息
  • 篡改服务端点
  • 实施供应链攻击

3.2.4 敏感信息泄露

  • 访问配置端点
  • 获取环境变量
  • 读取服务元数据

3.2.5 内部端口扫描

  • 探测微服务开放端口
  • 识别内部服务拓扑
  • 发现薄弱环节

3.3 重点攻击面

  1. 内部服务调用

    • 微服务间通信核心
    • 未经授权访问风险高
    • 可能导致数据泄露/破坏
  2. 服务发现和注册中心

    • 系统管理关键组件
    • 配置混乱风险
    • 供应链攻击入口
  3. 敏感信息泄露

    • 配置/环境变量暴露
    • 进一步渗透基础
  4. 内部端口扫描

    • 暴露服务攻击面
    • 识别脆弱服务

四、防御措施

4.1 基础防护

  • 输入验证和过滤
  • 白名单限制访问资源
  • 禁用危险协议(file://, gopher://等)

4.2 微服务特定防护

  1. 服务间认证

    • 双向TLS认证
    • JWT/OAuth2令牌验证
    • 服务身份认证
  2. 网络隔离

    • 服务网格(如Istio)
    • 网络策略限制
    • 零信任架构
  3. 注册中心保护

    • 严格访问控制
    • 变更审计
    • 完整性校验
  4. 监控与日志

    • 异常调用检测
    • 完整请求日志
    • 实时告警

五、研究与展望

5.1 潜在攻击方向

  • 供应链攻击

    1. 通过SSRF篡改服务注册信息
    2. 将合法服务指向恶意端点
    3. 实施中间人攻击或数据窃取
  • 跨云攻击
    利用微服务跨云特性,通过一个云环境的SSRF攻击另一个云环境

5.2 研究价值

  • 新型架构带来新的攻击面
  • 传统漏洞在新环境下的演变
  • 防御体系需要与时俱进

附录:示例代码

Python微服务与RPC示例

WeatherService接口

from jsonrpclib import ServerProxy

class WeatherService:
    def __init__(self, url):
        self.service_url = url
        self.proxy = ServerProxy(self.service_url)
    
    def get_weather(self, city):
        return self.proxy.get_weather(city)

RPC服务端

from jsonrpclib import Server
from weather_service import WeatherService

server = Server()
weather_service = WeatherService("http://localhost:8000")
server.register_instance(weather_service)

if __name__ == "__main__":
    print("Starting RPC server...")
    server.serve()

RPC客户端

import json
import requests
from weather_service import WeatherService

def call_get_weather(city):
    url = "http://localhost:8000"
    payload = {
        "method": "get_weather",
        "params": {"city": city},
        "id": 1
    }
    response = requests.post(url, data=json.dumps(payload)).json()
    return response["result"] if "result" in response else None

SSRF漏洞示例

Flask漏洞端点

from flask import Flask, request, jsonify
import requests

app = Flask(__name__)

@app.route('/fetch_url', methods=['POST'])
def fetch_url():
    url = request.form.get('url')
    try:
        response = requests.get(url)
        return jsonify({'status': 'success', 'content': response.text})
    except Exception as e:
        return jsonify({'status': 'error', 'message': str(e)})

利用脚本

import requests

def exploit_ssrf(target_url, internal_url):
    payload = {'url': internal_url}
    response = requests.post(target_url, data=payload)
    return response.json()

# 示例使用
print(exploit_ssrf("http://vuln-server/fetch_url", "http://192.168.1.100/secret"))
微服务与RPC架构下SSRF漏洞深度解析与利用 一、微服务与RPC架构基础 1.1 微服务架构 核心概念 : 将应用程序划分为一组小型、独立的服务 每个服务运行在自己的进程中 通过轻量级通信机制协同工作(HTTP/RPC/消息队列) 独立开发、部署和扩展 优势 : 快速迭代 高可用性 可扩展性 技术栈灵活性 1.2 RPC(远程过程调用) 核心概念 : 允许不同系统上的程序像调用本地函数一样调用远程函数 隐藏底层网络通信复杂性 常见实现:gRPC、Thrift、JSON-RPC 优势 : 高效通信 简化分布式系统开发 支持多种编程语言 1.3 微服务与RPC的关系 RPC作为微服务间通信手段 微服务为RPC提供应用场景 两者相辅相成推动分布式系统发展 二、传统SSRF漏洞利用 2.1 SSRF基本概念 定义 :服务器端请求伪造,利用存在缺陷的Web应用作为代理发起内部/外部请求 成因 :服务端未对用户输入URL进行有效过滤和限制 攻击目标 : 互联网无法直接访问的内部服务 本地网络资源 受限资源 2.2 常见利用方式 2.2.1 协议利用 HTTP/HTTPS:访问内部Web服务 文件协议:读取服务器文件 LDAP:目录服务查询 压缩协议:zlib/phar/tar/rar 数据库协议:Redis/Memcached 2.2.2 PHP伪协议利用 2.2.3 内网探测 Web服务指纹识别 端口扫描 盲打RCE漏洞 2.2.4 高级绕过技术 短网址重定向 自建恶意网站 域名解析控制 多漏洞组合(DOM-XSS+CSRF+SSRF) 2.3 黑盒测试重点 业务功能测试 : 社交分享URL处理 转码服务 在线翻译 图片加载/下载 内容收集 URL参数测试 : 关键参数识别(share/wap/url等) 边界值测试 协议和编码测试 重定向测试 权限验证 三、微服务与RPC架构下的SSRF新利用 3.1 架构特性带来的风险 网络请求复杂度增加 : 更多服务间通信 更复杂的调用链 更大的攻击面 RPC框架降低控制力 : 隐藏网络细节 减少输入检查 增加漏洞隐蔽性 服务注册中心风险 : 元数据篡改可能 服务发现滥用 序列化风险 : 反序列化漏洞 输入校验不足 3.2 新型利用场景 3.2.1 跨协议攻击 HTTP → RPC协议转换 利用微服务支持的多种协议 绕过传统防护措施 3.2.2 内部服务调用滥用 伪造服务间通信 绕过服务鉴权 示例攻击链: 通过SSRF访问UserService获取token 使用token冒充合法服务访问PaymentService 获取支付敏感信息 3.2.3 服务注册中心攻击 查询服务注册信息 篡改服务端点 实施供应链攻击 3.2.4 敏感信息泄露 访问配置端点 获取环境变量 读取服务元数据 3.2.5 内部端口扫描 探测微服务开放端口 识别内部服务拓扑 发现薄弱环节 3.3 重点攻击面 内部服务调用 : 微服务间通信核心 未经授权访问风险高 可能导致数据泄露/破坏 服务发现和注册中心 : 系统管理关键组件 配置混乱风险 供应链攻击入口 敏感信息泄露 : 配置/环境变量暴露 进一步渗透基础 内部端口扫描 : 暴露服务攻击面 识别脆弱服务 四、防御措施 4.1 基础防护 输入验证和过滤 白名单限制访问资源 禁用危险协议(file://, gopher://等) 4.2 微服务特定防护 服务间认证 : 双向TLS认证 JWT/OAuth2令牌验证 服务身份认证 网络隔离 : 服务网格(如Istio) 网络策略限制 零信任架构 注册中心保护 : 严格访问控制 变更审计 完整性校验 监控与日志 : 异常调用检测 完整请求日志 实时告警 五、研究与展望 5.1 潜在攻击方向 供应链攻击 : 通过SSRF篡改服务注册信息 将合法服务指向恶意端点 实施中间人攻击或数据窃取 跨云攻击 : 利用微服务跨云特性,通过一个云环境的SSRF攻击另一个云环境 5.2 研究价值 新型架构带来新的攻击面 传统漏洞在新环境下的演变 防御体系需要与时俱进 附录:示例代码 Python微服务与RPC示例 WeatherService接口 : RPC服务端 : RPC客户端 : SSRF漏洞示例 Flask漏洞端点 : 利用脚本 :