- 文档
- 教程
- 网络安全
【免费下载链接】Viper
Adversary simulation and Red teaming platform with AI
本文介绍如何以腾讯云 API 网关(云函数)为 Viper 的 meterpreter payload 提供 HTTPS 反向代理转发,实现隐藏 C2 的完整上线流程。文章覆盖 Viper 监听配置、腾讯云 API 网关搭建、载荷生成与运行上线四个核心环节,并补充云函数上线原理、常见坑位与对抗域名封禁的进阶技巧,读者完成后即可独立复现"云函数隐藏 C2 + Meterpreter 上线"的完整链路。原始教程见 docs/zh/training/cloud_function_online.md。
为什么需要"云函数上线"
在攻防对抗与红队评估中,隐藏 C2 服务器是避免被溯源的关键环节。当前网络上关于云函数上线的公开资料绝大多数针对 Cobalt Strike,而针对 Metasploit / Viper 的完整教程相对稀缺——这也是本仓库教程文档(cloud_function_online.md)诞生的背景。
从原理上看,云函数上线并不复杂:把腾讯云 API 网关当作一个 HTTPS 反向代理。目标主机上的载荷并不直接连接 Viper 监听的真实 IP,而是连接云函数提供的公网域名*.apigw.tencentcs.com,云函数网关再根据请求头把流量转发到 Viper 监听所在的服务器端口。这样目标网络只能观测到与腾讯云之间的 HTTPS 流量,Viper 服务器的真实地址被隐藏。
相比 CDN 方式(参考 使用 CDN 上线 meterpreter),云函数无需购买域名、配置解析和 CDN 加速,创建后直接获得公网访问域名,在方便性与速度上都有优势。
第一步:在 Viper 中配置监听(Handler)
登录 Viper 控制台,进入"监听"页面,点击新建监听,按如下要点配置:
| 配置项 | 取值 | 说明 |
|---|---|---|
| 监听类型 | meterpreter_reverse_https | 必须选择该类型,不能选择meterpreter/reverse_https |
| LHOST | Viper 所在服务器的 IP 地址 | 后续云函数后端将指向该地址 |
| LPORT | 建议443或8443等常用端口 | 常用端口更不容易被出口网络屏蔽 |
| LURI | 留空 | 云函数转发链路不需要 URI 分发 |
| 证书文件 | 留空 | 由云函数网关负责 TLS 终结,Viper 侧不再额外配置证书 |
监听创建界面参见
docs/zh/training/img/cloud_function_online/1.webp,关于 LURI 与证书必须为空的提示参见docs/zh/training/img/cloud_function_online/2.webp。
为什么必须是 meterpreter_reverse_https
这是整个方案最容易踩的坑。仓库配套教程 如何在 MSF 中高效的使用云函数 给出了明确解释:
meterpreter/reverse_https(带斜杠的经典类型)需要通过网络传输 stager,stager 内容在经过云函数转发时会发生编码转换,导致 stager 加载失败;meterpreter_reverse_https(无斜杠的单阶段类型)已经将 stager 内置在 exe 文件中,载荷运行时直接发起完整会话,不受云函数转发影响。
因此云函数方案只支持meterpreter_reverse_http(s)这类单阶段监听类型。
关于虚拟监听
如果暂时不想在服务器上建立真实监听(例如仅用于生成载荷),可以参考 监听载荷 中的"虚拟监听"功能:虚拟监听将监听配置缓存在系统中、不建立实际网络监听,可用于快速生成载荷,且与真实监听可相互转换。云函数上线通知配置教程中也提到,可通过相关模块便捷生成"云函数虚拟监听"用于生成载荷(见 云函数上线通知配置方法)。
第二步:配置腾讯云 API 网关
新建服务与 API
打开腾讯云 API 网关控制台页面(https://console.cloud.tencent.com/apigateway/service?rid=1),新建一个 API 网关:
- 服务类型选择公网;
- 进入新建的服务,创建一个通用 API;
- 关键配置项如下表:
| 配置项 | 取值 | 说明 |
|---|---|---|
| 请求方法 | ANY | meterpreter 使用GET 请求获取命令、POST 请求回传结果,必须允许所有方法 |
| 后端类型 | 云函数/HTTP 均可 | 本教程使用 HTTP 后端指向 Viper 监听 |
| 后端域名 | Viper 监听的 IP 地址 + 端口 | 即第一步中 LHOST:LPORT,协议选择HTTPS |
| 后端路径 | / | 后端路径填写为根路径 |
| 响应结果类型 | BINARY | meterpreter 上传/下载文件时传输的是二进制数据,不能使用文本转换 |
创建服务与 API 的界面参见
docs/zh/training/img/cloud_function_online/3.webp、docs/zh/training/img/cloud_function_online/4.webp,后端域名配置参见docs/zh/training/img/cloud_function_online/5.webp。
记录云函数公网地址
生成完成后,点击对应的 API 获取详情,页面会展示该 API 的公网访问地址(云函数 Web 地址)。例如样例中为:
service-6abofmuc-1256520000.gz.apigw.tencentcs.com务必记录下这个云函数地址,后续生成载荷的 LHOST 就是它。地址详情界面参见docs/zh/training/img/cloud_function_online/6.webp。
第三步:生成配套的载荷(Payload)
在 Viper 中打开生成载荷,配置如下:
| 配置项 | 取值 | 说明 |
|---|---|---|
| LHOST | 云函数 Web 地址(如service-6abofmuc-1256520000.gz.apigw.tencentcs.com) | 载荷回连的目标地址 |
| LPORT | 443 | 固定填写 443,与云函数网关的 HTTPS 端口一致 |
| LURI | 空 | 与监听配置保持一致 |
| 证书文件 | 空 | 与监听配置保持一致 |
| 验证证书 | 关闭 | 关闭证书验证选项,避免 TLS 校验导致连接失败 |
配置完成后点击生成载荷,得到可执行的 exe(或按需选择 ELF/其他平台格式)。生成后可将其投递到目标主机运行。
载荷生成界面的完整截图参见
docs/zh/training/img/cloud_function_online/7.webp;关于"LHOST 为云函数 web 地址、LPORT 为 443、LURI 与证书文件为空、关闭验证证书"的原始说明可直接在 cloud_function_online.md 中核对。
第四步:运行上线与验证
将生成的载荷上传到目标主机并执行,随后回到 Viper 的会话列表观察:
- 如果配置正确,目标主机会出现一条新的 Session,连接来源显示为云函数网关 IP 而非目标真实出口 IP;
- 运行上线的过程与最终会话效果参见
docs/zh/training/img/cloud_function_online/8.webp、docs/zh/training/img/cloud_function_online/9.webp。
上线成功后,即可在 命令终端 中对 Session 执行 meterpreter 命令进行后续操作;也可以通过 主机&权限 页面管理会话、运行模块,或通过 内网路由 进行内网横向移动。
进阶技巧:对抗域名封禁与获取真实 IP
基础上线完成之后,仓库中的配套教程 如何在 MSF 中高效的使用云函数 还提供了两个实战中非常关键的进阶技巧。
对抗*.apigw.tencentcs.com域名封禁
防守方最常见的对抗手段是在行动期间直接封禁*.apigw.tencentcs.com这类云函数域名,禁止解析访问,或对云函数域名设置告警。对应的绕过思路是直接用 IP 连接、域名只放 Host 头:
- 通过公共 DNS 查询工具(如
ping.cn/dns)输入云函数域名,查询到云函数网关的官方服务器 IP; - 重新生成载荷:LHOST 填写该网关 IP(如
140.143.51.244),HttpHostHeader填写为云函数域名; - 运行上线。
其原理是:云函数网关在转发 HTTPS 请求时根据 HTTP 消息头中的 Host 字段进行路由。因此把云函数域名填进 Host 头、把请求通过 IP 方式直连网关,依然能达到反向代理的效果。这种方式下载荷不会访问*.apigw.tencentcs.com域名,也不会在目标网络留下相关 DNS 记录,从而绕过了针对域名的封禁。
获取目标机的真实出口 IP
使用云函数隐藏 C2 时有一个固有缺陷:无法从 Session 的远端 IP 得知目标机的真实出口地址——Session 显示的 IP 固定为云函数网关 IP。这在广撒网钓鱼场景下尤为麻烦:C2 会收到大量来自云沙箱的 Session,难以判断哪些是有效目标。
解决办法是在 Session 内主动查询公网 IP,例如访问https://ifconfig.io/ip。仓库教程给出了对应的 PowerShell 示例:
$WebRequest = [System.Net.WebRequest]::Create("http://ifconfig.io/ip") $WebRequest.Method = "GET" $WebRequest.ContentType = "application/json" $Response = $WebRequest.GetResponse() $ResponseStream = $Response.GetResponseStream() $ReadStream = New-Object System.IO.StreamReader $ResponseStream $Data = $ReadStream.ReadToEnd() Write-Host $Data上线自动通知
结合 云函数上线通知配置方法,还可以实现"Session 上线后自动把目标真实 IP 推送到手机"的完整闭环:
- 先在 Viper 中配置一个 Bot(支持钉钉、Server 酱、Telegram 等);
- 再配置"自动编排"规则,绑定会话上线事件;
- 之后只要有 Session 上线,就会自动将目标 IP 等信息通知到指定群/通道。
再配合 回连过滤 功能按地理位置、云厂商或沙箱 IP 过滤连接监听,可进一步降低云沙箱与分析测绘系统的干扰。
常见坑位与注意事项总结
- 监听类型必须为
meterpreter_reverse_https:经典meterpreter/reverse_https因 stager 需网络传输、会被云函数转发编码转换而加载失败; - LURI 与证书文件必须留空:监听与载荷两侧需保持一致,证书校验交由云函数网关处理;
- LPORT 尽量选 443/8443:常用 HTTPS 端口不容易被出口网络屏蔽;
- 生成载荷时关闭"验证证书"选项:避免 TLS 证书校验导致回连失败;
- 响应结果类型选择 BINARY:meterpreter 上传下载文件依赖二进制传输;
- 请求方法选择 ANY:meterpreter 的 GET(取命令)与 POST(回传结果)两种请求都必须被允许;
- 后端路径填写
/:确保所有路径请求都能转发到 Viper 监听。
延伸阅读
- 监听载荷:监听类型、HTTPS 证书、生成载荷的完整说明
- 如何在 MSF 中高效的使用云函数:云函数上线原理、对抗域名封禁与真实 IP 获取的深度教程
- 云函数上线通知配置方法:上线自动通知的 Bot 与编排配置
- 使用 CDN 上线 meterpreter:基于 CDN 的同类隐藏 C2 方案
- reverse_dns 上线:DNS 隧道方式上线
- 回连过滤:监听侧 IP/地理位置过滤,降低沙箱与测绘干扰
- 文档
- 教程
- 网络安全
【免费下载链接】Viper
Adversary simulation and Red teaming platform with AI
相关推荐
Viper 云函数上线实战:使用腾讯云 API 网关隐藏 C2 回调地址的完整配置指南
Viper 云函数上线实战:使用腾讯云 API 网关隐藏 C2 回调地址的完整配置指南 当前互联网上关于"云函数上线"的资料大多围绕 Cobalt Strike
文档教程网络安全Viper 使用 CDN 隐藏 C2:meterpreter_reverse_http(s) 域名上线实战
Viper 使用 CDN 隐藏 C2:meterpreter_reverse_http s 域名上线实战 导读 在红蓝对抗中,直接暴露 VPS 真实 IP 的
文档教程网络安全在 Metasploit 中高效使用云函数隐藏 C2:Viper 实战配置、对抗域名封禁与真实 IP 获取
在 Metasploit 中高效使用云函数隐藏 C2:Viper 实战配置、对抗域名封禁与真实 IP 获取 云函数作为 HTTPS 反向代理隐藏 C2 服务器,
文档教程网络安全
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考