一个用于研究 EDK II / OVMF 中 PXE 网络启动漏洞的教学实验室。它会构建一个固定版本的 EDK II 修订版,在 QEMU 中启动 UEFI 虚拟机,并包含用于调查拒绝服务(DoS)和内存损坏的 Python 概念验证脚本。
参考资料: EDK II 安全公告 · 上游修复
dnsmasq、ip/tc(通常来自 iproute2 或 iproute),以及 sudo/root 权限。从解压后的归档目录中执行:
cd pxe-lab-public
chmod +x *.sh
./start.sh
启动器会检查依赖项,提示安装缺失的软件包,在需要时构建 edk2-stable202608(提交 2970e5699ba6267f3384ffab20f96647578aebc8),并打开虚拟机控制菜单。请勿使用 sudo 运行 start.sh 或固件构建。
常用命令:
./start.sh --check # 检查环境
./start.sh --build-only # 仅构建固定版本固件,不启动 QEMU
./start.sh --system # 改用系统 OVMF(不适用于验证固定版本漏洞)
./lab_run.sh --help # 显示网络、抓包和 QEMU 选项
默认的 QEMU 用户模式网络是隔离的,不需要 root 权限。要记录数据包捕获,请在构建固件后运行 ./lab_run.sh --pcap session.pcap。
PoC 脚本需要桥接模式;它们无法向默认的 QEMU 用户模式网络注入数据包。
首先,以普通用户身份使用 ./start.sh --build-only 构建固件。然后,在一个终端中执行:
cd pxe-lab-public
sudo ./lab.sh --network bridge --namespace pxelab
在菜单中选择 1(Start)。在另一个终端中,从解压归档的根目录运行以下其中一项:
cd PoC-DoS
sudo bash ./start_dos.sh
或者,对于实验性的内存损坏 / RCE 尝试:
cd PoC-RCE
sudo bash ./start_rce.sh
这些实验会向隔离的虚拟 PXE 环境发送构造的流量,可能导致固件挂起、崩溃或异常。崩溃或寄存器值损坏并不能证明任意代码执行成功。 RCE 脚本是一次实验性尝试,并非经过验证的 RCE 漏洞利用。结果可能因系统和固件构建而异。
实验室基础设施(安装、构建和虚拟机管理代码)是在大型语言模型(LLM)的协助下生成的,并由作者进行了测试。DoS 和 RCE 概念验证脚本由作者亲自编写,并在 LLM 助手的协助下进行了测试。 测试并不保证正确性、安全性、可复现性或与其他系统的兼容性。
请仅在您拥有并控制的设备上、在隔离的测试环境中使用此代码。 请勿将其用于第三方系统、网络或设备。
所有代码和脚本均**“按原样”提供,不附带任何形式的保证**。在适用法律允许的最大范围内,作者对因使用本仓库而产生的错误、故障、损坏、数据丢失或后果不承担责任。用户对其自身行为及遵守适用法律负全部责任。