- 文档
- 教程
- 网络安全
【免费下载链接】Viper
Adversary simulation and Red teaming platform with AI
本文以 Viper 平台为核心,完整演示如何通过 acme.sh 从 Let's Encrypt 申请一张受信任的合法 SSL 证书,将私钥与证书合并为 PEM 格式后上传至 Viper,并据此建立 reverse_https 监听,最终使目标主机回连流量呈现为可信 HTTPS 访问。读完本文,你将掌握域名指向、证书签发、PEM 合并、Viper 证书上传与监听配置、可信性验证的完整链路,从而让 C2 通信在流量审计与终端安全视角下更接近正常业务访问。
为什么 reverse_https 监听需要"合法"证书
Viper 的监听(Handler)用于接收被控端(Session)的回连连接,其中reverse_https类型的监听以 HTTPS 协议承载 Meterpreter 会话通信(相关载荷类型如windows/meterpreter/reverse_https、windows/x64/meterpreter/reverse_https在 载荷生成模块 中有明确列出)。
默认情况下,Viper 内置了一张自签名的 SSL 证书www.example.com.pem,可直接用于 HTTPS 加密(详见 监听载荷文档 的"HTTPS 证书"小节)。但自签名证书存在两个现实问题:
- 客户端告警:浏览器、curl 等客户端在访问自签名证书站点时会弹出"证书不受信任"的告警,极易暴露异常;
- 流量与终端检测:EDR、杀软及流量分析设备对自签名证书、陌生证书链的 C2 流量往往有更高的告警权重。
因此,为 reverse_https 监听配置一张由受信任 CA(如 Let's Encrypt)签发的合法证书,能让会话通信在证书维度上"看起来"完全正常,属于反溯源与流量伪装的重要一环。Viper 官方也明确支持用户上传自己的 PEM 格式证书:证书文件中必须同时包含公钥(证书)和私钥,格式以内置的www.example.com.pem文件为参考。
环境准备
开始前需确认两个前提条件:
- Viper 正常运行:VPS 上已通过 Docker 等方式部署 Viper 并能正常登录控制台。部署要求与方式可参考 快速开始(例如 VPS 防火墙需放行 60000 管理端口及后续监听所需端口)。
- 域名已正确解析:你准备用于监听的域名(如
xg.xxx.website)已配置 A 记录并指向 Viper 所在 VPS 的 IP 地址。这一步是证书签发与最终访问验证的基础——Let's Encrypt 的 standalone 验证需要域名解析到本机,浏览器最终访问的也是该域名。
在控制台的监听/系统页面确认上述状态正常后,即可进入证书获取阶段。
使用 acme.sh 获取 Let's Encrypt 合法证书
acme.sh 是一个开源的 ACME 协议客户端,可通过命令行自动向 Let's Encrypt 申请、续期证书。以下步骤以最简化的 standalone 模式为例。
安装 acme.sh
在 VPS 上执行官方一键安装脚本,将你的真实邮箱填入email=参数(用于证书到期提醒):
curl https://get.acme.sh | sh -s email=my@example.com安装脚本默认会将 acme.sh 安装到当前用户的~/.acme.sh目录,并自动写入 cron 定时任务用于证书续期。安装完成后,通常需要重新登录 Shell 或执行source ~/.bashrc使acme.sh命令可用(以实际安装环境的提示为准)。
生成证书(standalone 模式)
执行签发命令前,必须确保 80 端口未被其他服务占用。standalone 模式下 acme.sh 会在 80 端口临时启动一个内置 HTTP 服务,用于响应 Let's Encrypt 的域名所有权验证(HTTP-01 挑战):
acme.sh --issue -d xg.xxx.website --standalone说明:
-d xg.xxx.website指定要签发证书的域名,需与解析到本机的域名完全一致;--standalone表示由 acme.sh 自己监听 80 端口完成验证,若 80 端口被 Nginx 等占用,可改用 Webroot 等模式,或先暂停占用 80 端口的服务;- 签发成功后,终端会输出证书相关文件的保存路径,其中通常包括:
<域名>.key:私钥文件;<域名>.cer(或.crt):证书(公钥载体)文件;- 可能还有
fullchain.cer等完整证书链文件,具体以 acme.sh 实际输出为准。
提示:Let's Encrypt 证书有效期约为 90 天,acme.sh 的定时任务会自动续期。续期后若证书文件路径未变,Viper 中上传的 PEM 内容不会自动同步更新,需要在证书更新后重新合并并上传。
将私钥与证书合并为 PEM 文件
Viper 要求上传的 PEM 文件同时包含公钥与私钥(见 监听载荷文档)。因此需要把上一步生成的私钥文件与证书文件内容合并到一个文件中。
在 VPS 上执行(将域名替换为你的实际域名):
cat xg.xxx.website.key xg.xxx.website.cer > test.pem执行完成后,可用以下命令快速检查合并结果是否完整:
# 查看 PEM 文件中是否同时包含私钥段与证书段 grep -E "BEGIN (RSA |EC |)PRIVATE KEY|BEGIN CERTIFICATE" test.pem一个规范的 PEM 合并文件应形如(示意,非真实密钥):
-----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEC... (私钥内容) -----END PRIVATE KEY----- -----BEGIN CERTIFICATE----- MIIFazCCA1+gAwIBAgIU... (证书内容) -----END CERTIFICATE-----关于合并顺序:文档中的操作是将 key 与 cer 依次合并进同一文件。如果签发产物中还包含
fullchain.cer(含中间证书链),为保证链的完整性,也可按"私钥 + 证书链"的顺序合并,使客户端能完整校验信任链。合并后的文件即为待上传的test.pem。
上传 PEM 证书并建立 reverse_https 监听
上传证书到 Viper
在 Viper 控制台中找到证书管理/上传入口(监听配置中"证书文件"相关的上传区域),将合并好的test.pem上传。上传成功后,该 PEM 会出现在可供监听选择的证书列表中。
使用上传的证书建立监听
新建监听(Handler)时选择reverse_https类型,并在证书配置项中选择刚上传的test.pem,同时正确填写监听 IP(VPS 公网 IP)与端口(如 443 或自定义高位端口),其余参数按需配置(如 LURI)。保存并启动监听后,Viper 即以该合法证书为 reverse_https 监听提供 HTTPS 服务。
与之配套的监听与传输细节可进一步参考:
- 监听载荷(Handler and Payload):虚拟监听、HTTPS 证书、生成载荷等监听相关能力;
- 传输协议(Transport):Session 通过传输协议与 Viper 服务器通讯、多协议切换与休眠等机制。
反向场景提醒:何时应留空证书
并非所有 reverse_https 场景都需要本地上传证书。例如在 云函数上线 的用法中,监听需选择meterpreter_reverse_https类型,且LURI 和证书文件要留空、载荷侧关闭证书验证选项——因为该场景下 HTTPS 终端由云函数 API 网关承载,其自身已具备可信证书。这说明"是否上传证书"取决于流量终结的位置:由 Viper 直接终结 TLS 时,才需要把合法证书配置给监听。
验证监听证书已被信任
监听建立并运行后,直接在浏览器中访问监听链接(https://xg.xxx.website:端口/)。此时应看到:
- 地址栏出现锁形图标,证书被浏览器判定为受信任,不再出现自签名证书的告警页;
- 点击锁形图标可查看证书详情,签发者应为 Let's Encrypt 等受信任 CA,域名与访问地址一致。
这一步验证通过后,说明 reverse_https 监听已使用合法证书对外提供 HTTPS 服务,后续生成的 reverse_https 载荷回连时,会话流量在证书层面即为可信 HTTPS 通信。
证书获取的替代方案:克隆 HTTPS 证书模块
除申请 Let's Encrypt 证书外,Viper 还内置了 克隆 HTTPS 证书 模块(对应 MITRE ATT&CK 的 Subvert Trust Controls 技术):输入任意目标网站,模块即可克隆其 SSL 证书,结果可用于 reverse_https 类型的监听。这种方式适合快速复用已有知名域名的证书外观,但与 Let's Encrypt 方案相比,克隆证书本质上不是由 CA 为你的域名签发的合法证书,客户端仍可能因域名不匹配产生告警,适用场景需自行权衡。
另外,在部署反溯源方面,Viper 的自动安装脚本也支持在安装时直接生成随机 SSL 证书、自定义端口、添加 Basic 认证等反溯源配置(见 版本发布说明),可作为监听证书之外的防护组合。
常见问题与注意事项
- 80 端口被占用:standalone 模式签发失败时,先检查 80 端口是否被 Nginx 等占用,可临时停止服务或改用其他验证模式;
- 域名解析不一致:签发与访问均需使用解析到本机 VPS IP 的域名,直接访问 IP 无法体现证书域名可信;
- PEM 缺少私钥:Viper 要求 PEM 必须包含公钥与私钥,仅上传证书(公钥)文件会导致监听配置不完整,参考内置
www.example.com.pem的格式检查; - 证书续期后的更新:acme.sh 自动续期后,需重新合并并上传最新 PEM 到 Viper,否则监听仍使用旧证书;
- 防火墙与端口:确保 VPS 防火墙放行了 reverse_https 监听所使用的端口(详见 快速开始 中关于防火墙放行的提示);
- rc4 类监听:传输协议中无法添加 rc4 密码参数,不要将 rc4 类监听添加到传输协议中(见 传输协议)。
通过上述步骤,Viper 的 reverse_https 监听即可长期稳定地以一张受信任的合法证书对外提供服务,在证书维度上显著降低 C2 通信被识别的概率。
- 文档
- 教程
- 网络安全
【免费下载链接】Viper
Adversary simulation and Red teaming platform with AI
相关推荐
Restreamer安全配置:GDPR合规与Let's Encrypt SSL证书终极指南
Restreamer安全配置:GDPR合规与Let's Encrypt SSL证书终极指南 Restreamer是一款功能强大的自托管流媒体服务器解决方案,能够
使用 Let's Encrypt 证书配置 Mosquitto MQTT Broker 的 TLS 加密监听
使用 Let's Encrypt 证书配置 Mosquitto MQTT Broker 的 TLS 加密监听 本指南讲解如何将 Let's Encrypt 签发
物联网消息队列后端Docker-Mailserver SSL/TLS配置终极指南:Let's Encrypt自动证书管理完全教程
Docker Mailserver SSL/TLS配置终极指南:Let's Encrypt自动证书管理完全教程 在当今互联网安全日益重要的环境下,为邮件服务器配
后端通信云原生
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考