Empire 后渗透框架技术解析:PowerShell/Python 双 Agent 架构、安装部署与模块开发指南

📅 发布时间:2026/10/14 3:16:03
Empire 后渗透框架技术解析:PowerShell/Python 双 Agent 架构、安装部署与模块开发指南
网络安全应用安全【免费下载链接】EmpireEmpire is a PowerShell and Python post-exploitation agent.项目地址https://gitcode.com/gh_mirrors/em/Empire点击查看免费下载导读Empire 是一个开源的后渗透post-exploitation框架同时提供纯 PowerShell 2.0 的 Windows Agent 与纯 Python 2.6/2.7 的 Linux/OS X Agent它是此前 PowerShell Empire 与 Python EmPyre 两个项目的合并产物。本文以仓库根目录的 README.md 为骨架结合 主控制器、加密模块、HTTP 监听器、模块模板 等源码系统讲解 Empire 的架构设计、密码学通信机制、安装部署方式、RESTful API、模块体系与贡献规范帮助读者理解该框架的整体工作方式并掌握基于模板开发新模块的完整流程。注意README 开头即声明This project is no longer supported本仓库当前版本VERSION 记录为 2.3.0lib/common/empire.py 中VERSION 2.5changelog 记录了 2.5 Master Release已不再维护本文内容仅用于技术研究与学习参考。一、项目定位与核心特性1.1 双 Agent 架构README 明确描述了 Empire 的技术定位一个后渗透框架包含两类 Agent纯 PowerShell 2.0 Windows Agent适用于 Windows 目标且对 PowerShell 版本要求低模块信息中的MinLanguageVersion默认即为2纯 Python 2.6/2.7 Linux/OS X Agent适用于 Linux 与 macOS 目标模块默认MinLanguageVersion为2.6。两类 Agent 的实现分别位于 data/agent/agent.ps1PowerShell与 data/agent/agent.pyPythonPython Agent 中还内置了profile通信配置形如tasking uris | user agent | additional header ...以及delay默认 60 秒、jitter、lostLimit默认 60 次失联、killDate、workingHours等运行参数。1.2 框架能力概述按 README 的表述Empire 的核心能力包括密码学安全的通信cryptologically-secure communications灵活的架构flexible architecturePowerShell 侧支持在不依赖 powershell.exe 的情况下运行 PowerShell Agent提供快速部署的后渗透模块覆盖从键盘记录器key logger到 Mimikatz 等广泛功能提供可自适应的通信方式adaptable communications以规避网络检测以易用性为导向的交互式框架usability-focused framework。这些能力在仓库中均有对应实现通信加密见 lib/common/encryption.py交互式命令行见 lib/common/empire.py 的MainMenu提示符为(Empire) 模块库则位于 lib/modules 与 data/module_source。1.3 项目历史与致谢README 指出PowerShell Empire 于 2015 年在 BSidesLV 首次亮相Python EmPyre 于 2016 年在 HackMiami 首次亮相二者合并为现在的 Empire。框架底层大量依赖其他开源项目的工作例如 Mimikatz 相关模块、PowerSploit 风格指南、Invoke-Obfuscation 混淆框架等每个模块源码中均带有作者/引用链接信息。二、整体架构与核心目录结构从源码结构看Empire 采用控制器-监听器-Agent-模块的分层设计入口脚本 empire命令行入口负责解析参数、初始化MainMenu、启动交互式命令行或 RESTful API主控制器 lib/common/empire.py包含MainMenu主类实例化agents、credentials、stagers、modules、listeners等子组件并基于pydispatch实现事件分发与日志记录handle_event会把所有信号写入reporting表--debug参数可将事件额外写入empire.debug文件监听器 lib/listeners包括http.py、http_com.py、http_mapi.py、http_hop.py、dbx.pyDropbox、onedrive.py、meterpreter.py、redirector.py等由 lib/common/listeners.py 的Listeners类动态加载Stager 生成器 lib/stagers按平台划分windows / osx / multi可生成 dll、hta、macro、ducky、launcher_bat、shellcode 等多种形式的载荷模块体系 lib/modules按powershell与python两大语言组织涵盖 code_execution、collection、credentials、exploitation、lateral_movement、persistence、privesc、situational_awareness 等类别Agent 模板 data/agentagent.ps1、agent.py及 data/agent/stagers 下的通信模板http、dropbox、onedrive 等数据库与安装 setupinstall.sh、reset.sh、setup_database.py、cert.sh。三、安装部署3.1 脚本安装README 给出的标准安装方式为sudo ./setup/install.sh从 setup/install.sh 源码看安装过程主要包含以下步骤安装 PowerShell根据发行版自动匹配Debian 8/9、Ubuntu 14/16/17、Kali Linux或 macOS 下的 Homebrew 安装将 lib/powershell/Invoke-Obfuscation 复制到/usr/local/share/powershell/Modules为后续模块混淆提供支持确保 pip 存在并安装 setup/requirements.txt 中的 Python 依赖Flask、pyOpenSSL、M2Crypto、cryptography、pycrypto、dropbox、pyinstaller 等编译安装 xar从data/misc/xar-1.5.2.tar.gz解压构建与 bomutils用于生成 macOS .pkg 载荷运行 setup_database.py 初始化 SQLite 数据库运行 cert.sh 生成自签名 TLS 证书写入data/empire-chain.pem与data/empire-priv.key。3.2 Docker 方式README 同时提供了 Docker 安装途径docker pull empireproject/empire仓库 Dockerfile 展示了本地构建镜像的完整流程docker build -t empireproject/empire . docker create -v /opt/Empire --name data empireproject/empire docker run -ti --volumes-from data empireproject/empire /bin/bashDockerfile 基于ubuntu:16.04安装 Python 2.7 后克隆源码执行install.sh并运行setup_database.py最终通过CMD [python2.7, empire]启动。镜像内首次启动时empire 入口会通过database_check_docker()检测/.dockerenv若缺少数据库会自动执行setup/reset.sh完成初始化。3.3 支持的系统与限制README 明确从 2.4 版本开始只对 Kali、Debian、Ubuntu 提供排障支持其他操作系统不受支持官方建议这类场景改用 Docker 镜像。3.4 数据库初始化与重置setup_database.py 会创建data/empire.dbSQLite核心行为包括读取环境变量STAGING_KEY未设置时交互式询问服务器协商密码留空则随机生成 32 位密码设为RANDOM时同样随机生成其余情况下取输入值的 MD5 作为 staging key预置 RESTful API 默认账号empireadmin与随机密码、40 位随机永久 API Token默认混淆开关OBFUSCATE 0默认混淆命令Token\All\1Invoke-Obfuscation 语法创建config、agents、listeners、credentials、taskings、results、reporting七张表。需要重建环境时可运行 setup/reset.sh需 root 权限它会删除旧的empire.db、empire.debug与downloads/目录重新初始化数据库并启动 Empire。四、快速上手从启动到 Agent 上线4.1 启动交互式命令行安装完成后直接执行./empire进入(Empire) 主菜单。入口脚本 empire 支持的常用参数如下源码见argparse部分参数说明-v, --version显示当前 Empire 版本-r, --resource file启动后自动执行指定资源文件中的命令-l, --listener显示监听器选项不带值显示全部监听器-s, --stager指定要生成的 stager不带值列出全部 stager-o, --stager-options以OPTIONVALUE格式设置 stager 选项--rest同时启动 Empire 与 RESTful API--headless无界面方式运行 Empire 与 RESTful API--restport port指定 RESTful API 端口默认 1337--username / --password指定 RESTful API 账号密码默认取自数据库4.2 创建监听器与生成 Stager以 HTTP 监听器为例其全部可配置选项定义在 lib/listeners/http.py 的options字典中核心参数如下选项必填默认值说明Name是http监听器名称Host是http://本机IP:80供 staging 使用的域名/IPBindIP是0.0.0.0控制端绑定 IPPort是80监听端口Launcher是powershell -noP -sta -w 1 -encLauncher 字符串StagingKey是随机 32 位初始协商密钥不足 32 位会自动取其 MD5DefaultDelay是5Agent 回连间隔秒DefaultJitter是0.0回连间隔抖动0.0-1.0DefaultLostLimit是60失联多少次后 Agent 退出DefaultProfile是/admin/get.php,/news.php,/login/process.php\|Mozilla/5.0 ...Agent 通信 profileCertPath否空HTTPS 监听器证书路径设置后 Host 自动切换为 httpsKillDate否空监听器失效日期MM/dd/yyyyWorkingHours否空Agent 工作时间如 09:00-17:00ServerVersion是Microsoft-IIS/7.5控制端响应的 Server 头StagerURI否空Stager 下载 URI需/download/前缀UserAgent / Proxy / ProxyCreds否defaultstaging 请求的 UA 与代理设置SlackToken / SlackChannel否空 /#generalSlack 通知集成从 lib/common/listeners.py 的set_listener_option可以看到Host选项会被自动解析未写协议时根据是否配置CertPath自动补全http://或https://未指定端口时自动使用 80/443。创建好监听器后即可使用usestager windows/launcher_bat之类命令生成载荷stager 的通用选项Listener、Language、OutFile、Obfuscate、ObfuscateCommand等见 lib/stagers/windows/launcher_bat.py。4.3 Agent 上线与任务下发Agent 上线后可通过agents菜单对其下发 shell 命令或模块任务。任务下发流程在 empire 的 REST API 实现与 lib/common/agents.py 中完成控制端把命令写入taskings表Agent 回连时拉取任务、执行并把结果写回results表。stale失联Agent 的判定逻辑位于 empireintervalMax (delay delay * jitter) 30超过该阈值未回连即视为 stale。五、密码学通信机制README 强调密码学安全的通信其底层实现集中在 lib/common/encryption.py具体包含AES-128-CBC PKCS#7aes_encrypt()随机生成 16 字节 IV密文格式为IV ciphertextEncrypt-then-HMACaes_encrypt_then_hmac()对密文附加 SHA256 HMAC 的前 10 字节verify_hmac()使用双重 HMAC 比对以抵御时序攻击RC4rc4()实现标准 KSA/PRGA 加解密Diffie-HellmanDiffieHellman类默认使用 RFC 3526 的 6144 位 MODP Group 17 素数支持 2/3/5/7 生成元私钥默认 540 位genKey()将共享秘密经 SHA256 派生为会话密钥并通过 Legendre 符号校验对端公钥合法性RSArsa_xml_to_key()用于解析 PowerShellRSA.ToXmlString()导出的 XML 公钥供 PowerShell Agent 的 RSA-EKE 密钥交换使用。以 Python Agent 为例data/agent/stagers/http.py 展示了密钥协商的完整流程客户端生成随机 8 位sessionID随后用 staging key 通过aes_encrypt_then_hmac()加密自身 DH 公钥并 POST 回服务器从而完成双方会话密钥的建立后续所有 tasking/result 数据均基于该密钥加密传输。六、模块体系与模块开发规范6.1 模块的加载与分类lib/common/modules.py 的Modules类启动时递归扫描installPath/lib/modules/下所有*.py跳过*template.py通过imp.load_source()实例化每个模块并缓存模块名即相对路径如powershell/collection/minidump。lib/modules下同时存在powershell与python两套模块树分别对应两类 Agent 语言。6.2 模块模板info 与 optionsREADME 的贡献指南要求新模块基于模板开发PowerShell 模块参照 lib/modules/powershell_template.pyPython 模块参照 lib/modules/python_template.py。每个模块的info字典包含以下元数据字段字段含义Name模块显示名称Author作者列表Description多行描述Background是否后台运行true 时使用TASK_CMD_JOB任务类型OutputExtension输出文件扩展名非空时结果以[15位前缀][5位扩展名][数据]格式回传并落盘NeedsAdmin是否需要管理员权限OpsecSafe是否不落盘/操作安全Languagepowershell或pythonMinLanguageVersion最低语言版本PowerShell 为2Python 为2.6Comments参考链接与注释options字典定义可配置参数其中Agent是唯一必选的选项指定在哪个 Agent 上执行。generate()方法负责拼装最终脚本PowerShell 模板支持两种方式——从data/module_source/读取 .ps1 源文件或内联脚本随后遍历 options把非 Agent 参数以-参数 值的形式追加到脚本尾部布尔值True仅追加-参数开关。6.3 共享脚本与模块源码组织README 建议如果脚本逻辑较大、可能被多个模块复用或更新频繁应把 .ps1 脚本放入对应的data/module_source/目录并在模块 tasking 时把脚本内容拉取进来。本仓库的 data/module_source 正是按 code_execution、collection、credentials、exfiltration、exploitation、lateral_movement、management、persistence、privesc、recon、situational_awareness、trollsploit 分类存放共享脚本如 Invoke-Mimikatz.ps1、PowerUp.ps1、powerview.ps1 等。模板中的加载模式为moduleSource self.mainMenu.installPath /data/module_source/... if obfuscate: helpers.obfuscate_module(moduleSourcemoduleSource, obfuscationCommandobfuscationCommand) moduleSource moduleSource.replace(module_source, obfuscated_module_source)即开启混淆后模块会改从 data/obfuscated_module_source 读取已混淆版本。6.4 贡献规范要点README Contribution Rules分支策略向dev分支提交 Pull Request测试通过后再合并到 master模板要求模块基于powershell_template.py或python_template.py开发部分模块需要用Out-String处理输出以便展示参见 powerview 的 get_user 模块实现模式引用要求在模块的Comments部分引用前人的工作与参考链接命名规范PowerShell 函数使用批准的 PowerShell 动词兼容性强烈优先保证 PowerShell 2.0 兼容自测要求提交前必须从 Empire Agent 上实际运行模块验证代码风格PowerShell 代码遵循 PowerSploit 风格指南。6.5 混淆支持数据库配置中默认OBFUSCATE 0、OBFUSCATE_COMMAND Token\All\1。混淆依赖随安装脚本部署的 lib/powershell/Invoke-Obfuscation 框架stager 侧也可通过Obfuscate/ObfuscateCommand选项默认Token\All\1,Launcher\STDIN\12467对 launcher 的 PowerShell 代码进行混淆。七、RESTful API入口脚本 empire 内置一套基于 Flask 的 RESTful API默认端口1337服务以 TLS 加密加载data/empire-chain.pem/data/empire-priv.key。除/api/admin/login外所有请求都必须携带有效的token参数当前 token 或永久 token均为 40 位小写字母数字登录接口内置 2 秒延迟以减缓暴力破解响应头带Access-Control-Allow-Origin: *便于跨域集成。核心端点一览源码注释 empire 中完整列出方法URI作用GET/api/version返回当前版本GET/api/config返回配置staging_key、IP 黑白名单、API 账号等GET / POST/api/stagers[/X]列出 stagerPOST 生成 stager需StagerNameListenerGET / POST/api/modules[/name]列出模块POST 以指定选项执行模块POST/api/modules/search[/modulename|description|comments|author]按字段搜索模块GET / POST / DELETE/api/listeners[/Y]列出/启动/终止监听器GET / DELETE/api/agents[/Y]列出/删除 Agent/api/agents/stale处理失联 AgentGET / DELETE/api/agents/Y/results获取/清空 Agent 结果缓冲POST/api/agents/Y/shell下发 shell 命令POST/api/agents/Y/rename重命名 AgentGET/POST/api/agents/Y/kill终止 AgentPOST/api/agents/Y/download//upload文件上传下载上传限制 1 MBGET / POST/api/creds读取/写入凭据credtype 仅允许hash或plaintextGET/api/reporting[/agent/X|type/Y|msg/Z]查询事件日志checkin/task/result/renameGET/api/admin/login用账号密码换取 tokenGET/api/admin/permanenttoken获取永久 tokenGET/api/admin/restart//api/admin/shutdown重启/关闭服务启动方式./empire --rest保留交互界面或./empire --headless --restport 1337纯无界面模式。八、数据库结构setup/setup_database.py 定义了完整的 SQLite 表结构data/empire.dbconfigstaging_key、install_path、ip_whitelist/ip_blacklist格式如192.168.1.1,192.168.1.10-192.168.1.100,10.0.0.0/8、autorun_command/authorun_data、rootuser、api_username/api_password/api_current_token/api_permanent_token、obfuscate/obfuscate_commandagentssession_id、listener、language/language_version、delay、jitter、内外网 IP、username、high_integrity、进程信息、session_key、nonce、checkin/lastseen 时间、父子关系、servers、profile、functions、kill_date、working_hours、lost_limit、taskings、resultslistenersname、module、listener_type、listener_category、enabled、optionspickle 序列化的选项快照credentialscredtypehash/plaintext/token、domain、username、password、host、os、sid、notestaskings / results以(id, agent)为联合主键分别存储下发的任务与回传的结果reporting事件日志表event_type 取值 checkin、task、result、rename。Agent 的session_key等敏感字段在 empire 的 API 输出中会进行编码转换处理凭据表则面向模块抓取到的各类凭据包括 Mimikatz 类模块的结果。九、项目状态与使用前提最后需要再次强调 README 中的两点项目已不再维护This project is no longer supported学习时应将其作为历史技术参考而非持续更新的工具自2.4 版本起仅支持 Kali、Debian、Ubuntu其他平台建议改用 Docker 镜像运行。结合本仓库源码可以确认服务端依赖 Python 2.7 环境Dockerfile 显式安装python2.7并软链为pythonAgent 侧 Windows 需要 PowerShell 2.0 兼容环境、Linux/OS X 需要 Python 2.6/2.7。若要在当前环境实际运行请先确认满足上述版本前提再按本文第三部分的脚本或 Docker 方式完成安装与数据库初始化。延伸阅读路径主控逻辑 lib/common/empire.py → Agent 实现 data/agent/agent.py 与 data/agent/agent.ps1 → 通信模板 data/agent/stagers/http.py → 加密原语 lib/common/encryption.py → 模块模板 lib/modules/powershell_template.py / lib/modules/python_template.py。赞分享网络安全应用安全【免费下载链接】EmpireEmpire is a PowerShell and Python post-exploitation agent.项目地址https://gitcode.com/gh_mirrors/em/Empire点击查看免费下载相关推荐Empire 框架深度解析Python 后渗透与对手模拟框架的服务端架构、加密 C2 与自动化能力指南Empire 框架深度解析Python 后渗透与对手模拟框架的服务端架构、加密 C2 与自动化能力指南 Empire 是一款面向 Red Team 与渗透测试渗透测试网络安全应用安全Empire 6.x 版本演进与架构深度解析从 CHANGELOG 看后渗透框架的技术变迁Empire 6.x 版本演进与架构深度解析从 CHANGELOG 看后渗透框架的技术变迁 本文以 Empire 官方仓库根目录下的 CHANGELOG.md渗透测试网络安全应用安全Pupy C2 框架完全指南安装部署、Payload 生成与全内存后渗透实践Pupy C2 框架完全指南安装部署、Payload 生成与全内存后渗透实践 Pupy 是一个用 Python 与 C 编写的开源跨平台Windows、Li网络安全上一篇Hermes IR 类型系统 Primitive-Bitmask 快速路径设计TypeContext 类型运算的位掩码加速方案下一篇Noctalia 完全指南基于 Wayland 与 OpenGL ES 的原生桌面 Shell 架构、构建与配置实战创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考