news 2026/10/20 18:39:08

PPPwn 完整指南:PS4 7.00–11.00 固件的 PPPoE RCE 实操教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PPPwn 完整指南:PS4 7.00–11.00 固件的 PPPoE RCE 实操教程

PPPwn 完整指南:PS4 7.00–11.00 固件的 PPPoE RCE 实操教程

【免费下载链接】PPPwnPPPwn - PlayStation 4 PPPoE RCE项目地址: https://gitcode.com/GitHub_Trending/pp/PPPwn

PPPwn 是针对 PlayStation 4 内核 PPPoE 协议栈漏洞(CVE-2006-4304)的远程代码执行工具,适用于固件 7.00 至 11.00 的主机;操作完成后不写入固件,重启系统即恢复原状。先给出本次实操的摘要,再按「原理 → 检查 → 实施 → 排错 → 参数附录 → 边界」的顺序展开。

  • 能做什么:在以太网上伪造 PPPoE 协商报文,使 PS4 内核执行攻击者提供的载荷;默认stage2.bin仅在主机屏幕打印PPPwned(概念验证,proof-of-concept),不会自动运行自制软件。
  • 适用版本:固件 7.00/7.01/7.02、7.50/7.51/7.55、8.00/8.01/8.03、8.50/8.52、9.00、9.03/9.04、9.50/9.51/9.60、10.00/10.01、10.50/10.70/10.71、11.00,取值见文末附录。
  • 预计耗时:拉取代码、安装依赖、编译两个载荷合计约 10 分钟;单次触发从按键到出结果在数秒内。
  • 风险等级:中低。不修改任何系统文件,但注入过程中 PS4 可能短暂崩溃,失败后必须按「验证与排错」一节的规则等待重试。
  • 结束后状态:屏幕先出现Cannot connect to network,随后显示PPPwned(两者顺序可能相反);重启后一切复原。

原理速览:从 PPPoE 握手到内核执行的四段流水线

PS4 内核的 PPPoE 实现在处理 LCP/IPCP 配置报文时存在缓冲区溢出——CVE-2006-4304 最早披露于 FreeBSD 网络栈,该实现一直保留到 PS4 11.00。pppwn.py基于 scapy 在以太网上直接构造 PPPoE 会话,把 PS4 当作对端接入设备。整个注入分四段完成,与示例日志中的 STAGE 编号一一对应:

  1. STAGE 0 初始化:完成 PPPoE 发现(PADI/PADO/PADR/PADS)与 LCP/IPCP 协商,取得pppoe_softc结构体地址和对端 MAC,并做堆布局准备(日志中的Heap grooming)。
  2. STAGE 1 内存破坏:把注入进程钉在 CPU 0(Pinning to CPU 0)后发送恶意 LCP configure request,触发溢出,再扫描定位被污染的内存对象。
  3. STAGE 2 绕过 KASLR:读取pppoe_softc_list等内核符号地址,算出kaslr_offset,得到未随机化的内核基址。
  4. STAGE 3/4 代码执行:发送 LCP terminate 后重建 PPPoE 会话,触发已注入的代码,最后把编译好的stage2.bin作为任意载荷发送执行。

各固件版本的内核符号地址预置在stage1/offsets.h和 offsets.py 中,这是编译必须传FW参数的原因:载荷按固件版本生成,版本不匹配时地址全部失效。项目各部分分工如下:

  • pppwn.py:主控制脚本,负责报文构造与会话时序;
  • stage1/:第一阶段载荷,负责内存破坏与 KASLR 绕过,编译产物为stage1/stage1.bin;
  • stage2/:第二阶段载荷,负责任意代码执行,默认只打印PPPwned,编译产物为stage2/stage2.bin;
  • freebsd-headers/:编译时引用的 BSD 内核头文件。

实施前检查:硬件、系统与载荷编译

硬件与系统要求(对照 README 的 Requirements 一节):

  • 一台带以太网口的电脑,USB 转以太网适配器也可用;Wi-Fi 不可用,整个流程依赖网线直连。
  • 一根网线,连接电脑与 PS4。
  • Linux 环境:物理机,或把网络适配器设为 Bridged Adapter(桥接)的虚拟机,例如 VirtualBox 方案。
  • 已安装 Python3 与 gcc(Makefile 还依赖objcopy,通常随 build-essential 一并提供)。
  • PS4 固件在支持列表内,可在「设置 → 系统」中查看版本号。

获取代码并安装依赖,作用:拉取完整仓库(含freebsd-headers子模块)并安装唯一的 Python 依赖 scapy;通过信号:第二条命令无报错返回。

git clone --recursive https://gitcode.com/GitHub_Trending/pp/PPPwn cd PPPwn sudo pip install -r requirements.txt

编译两个载荷,作用:FW决定编译时选用的内核符号地址;通过信号:分别生成stage1/stage1.bin与stage2/stage2.bin。以 11.00 固件为例:

make -C stage1 FW=1100 clean && make -C stage1 FW=1100 make -C stage2 FW=1100 clean && make -C stage2 FW=1100

其他固件把1100换成附录中的对应取值,例如 9.00 固件用FW=900。若目标固件不在offsets.h覆盖范围内,编译会因缺少地址而失败,不要自行猜测地址补齐。

注:Apple Silicon(M 系列)Mac 无法直接编译,仓库提供./build-macarm.sh脚本在 Docker 中构建 amd64 二进制,例如./build-macarm.sh 900生成 9.00 固件对应的 bin 文件,再把结果拷回 Linux 环境使用。

分步实施:PS4 网络配置与同步触发

第 1 步:配置 PS4 的 PPPoE 连接

按以下顺序操作,通过信号:连接设置保存成功,「测试互联网连接」选项可点击。

  1. PS4「设置」→「网络」。
  2. 「设定互联网连接」→「使用 LAN 连接线」。
  3. 选择「自定义」。
  4. IP 地址设置选「PPPoE」。
  5. PPPoE 用户 ID 与密码任意填写,内容无意义,攻击端不校验。
  6. DNS 设置与 MTU 设置都选「自动」。
  7. 代理服务器选「不使用」。

第 2 步:在电脑上准备注入命令

先用ifconfig或ip link确认直连 PS4 的物理接口名,再把命令输入提示符但不执行,通过信号:光标停在命令末尾,终端尚未开始输出。

sudo python3 pppwn.py --interface=enp0s3 --fw=1100

--interface必须填直连 PS4 的接口;--fw与编译参数保持一致。脚本启动后打印Waiting for PADI...,表示已进入监听状态,等待 PS4 发出的 PPPoE 发现报文。

第 3 步:同步触发

这是唯一有实时性要求的环节。PS4 端停在「测试互联网连接」界面,手指放在手柄 X 键上;电脑端命令已就绪。PS4 发起测试的一瞬间,同时按下手柄 X 键与电脑回车键。原因很直接:PADI 报文只在 PS4 发起测试的极短窗口内出现,脚本必须在那之前进入监听,差一拍 PADI 就会被系统丢弃,本次注入作废。

通过信号:终端依次打印 STAGE 0 至 STAGE 4 的日志,最后出现Done!。

第 4 步:确认主机端结果

成功时 PS4 屏幕先显示Cannot connect to network,数秒后出现PPPwned(两者顺序可能相反);失败时主机长时间停在连接界面或直接崩溃。两种情况都进入下一节处理。

验证与排错:连接失败、卡 PADI 与重试规则

⚠️ 重试前必须遵守一条硬规则:每次重试前,都要等 PS4 显示Cannot connect to network: (NW-31274-7)提示后,再发起下一次注入。上一轮的内核pppoe_softc对象未清理时重复注入,地址扫描会读到脏数据。

快速重试通道:一次注入失败或 PS4 崩溃后,不必重走网络设置——终止电脑上的pppwn.py,重新运行命令,然后在 PS4 主界面直接点击「测试互联网连接」,两端仍然同时操作。

按症状排查:

  • 终端一直停在Waiting for PADI...:接口名填错、PS4 未真正发起 PPPoE 测试,或本机防火墙拦截。核对--interface与ifconfig输出,必要时临时关闭防火墙。
  • PS4 报「无法获取 IP 地址」或停留在设置界面:PPPoE 参数未按第 1 步配置,重新确认 IP 设置是否为 PPPoE、用户名和密码非空。
  • 编译阶段报错:确认FW取值在附录范围内;M 系列 Mac 上改用./build-macarm.sh或 Docker 构建。
  • 日志在 STAGE 1 的Scanning for corrupted object之后卡住:溢出未命中,通常是固件版本与FW参数不匹配,重新核对版本、重新编译后再试。

排除环境因素的顺序:重启 PS4 与电脑 → 清理两个载荷目录下的中间产物重新编译(make -C stage1 clean同理适用于stage2)→ 更换网线。

固件参数对照(附录)

编译参数FW与运行参数--fw的取值必须一致,且都要对应 PS4 的实际固件。offsets.h中每个小版本都有独立分支,下表给出各组的常用代表值:

对应固件make 参数(FW=)脚本参数(--fw=)
11.0011001100
10.50 / 10.70 / 10.711050 / 1070 / 1071同左
10.00 / 10.0110001000
9.50 / 9.51 / 9.60950950
9.03 / 9.04903903
9.00900900
8.50 / 8.52850850
8.00 / 8.01 / 8.03800800
7.50 / 7.51 / 7.55750750
7.00 / 7.01 / 7.02700700

固件 12.00 及以上不在支持范围内,offsets.h中没有对应分支;上游也接受为更多版本补充偏移量的 PR。

适用边界与合规

  • 只是概念验证:默认载荷只打印PPPwned。要启动 Mira 等自制软件启动器,需要自行改写stage2.c并重新编译stage2.bin,这属于逆向工程工作,不在本文范围。
  • 不持久:攻击全部发生在内存中,不写固件、不写磁盘,重启后系统状态复原。
  • 环境限制:需要真实以太网口(USB 适配器可),Wi-Fi、手机热点,或中间隔着路由器 NAT 的拓扑都不适用;注入窗口依赖「PS4 发起网络测试」这一动作,无法在主机之外远程触发。
  • 可能的故障:注入失败时 PS4 可能崩溃或停在错误提示,按 NW-31274-7 规则等待后重试;项目不提供数据保护机制,重要数据建议先备份。
  • 使用边界:仅建议在自己拥有的主机上用于研究目的;在系统状态被改变的会话中登录 PSN 等在线服务,后果由使用者自行承担,并遵守所在地法律法规。

下一步:确认屏幕打印PPPwned后,打开 stage2/stage2.c 阅读默认载荷如何接管执行流,并对照 offsets.py 中你固件版本对应的符号类,梳理把启动器引导逻辑替换进stage2.bin需要改动的位置。

【免费下载链接】PPPwnPPPwn - PlayStation 4 PPPoE RCE项目地址: https://gitcode.com/GitHub_Trending/pp/PPPwn

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/20 18:38:56

基于Spring Boot的网上蛋糕销售系统设计与实现

1. 从需求到系统:网上蛋糕销售系统的定位与整体拆解先把这个项目的本质说清楚。网上蛋糕销售系统,表面看是一个电商系统,但它的业务特性决定了它不能照搬通用商城的那套设计。蛋糕不是标品,它有尺寸、口味、奶油类型、配送时间这些…

作者头像 李华
网站建设 2026/10/20 18:38:35

pdfium静态库集成实战:从验证到渲染的避坑指南

简介:这份资源是已编译完成的PDFium静态库,面向需要在C/C项目中集成PDF解析、渲染与打印能力的开发者,尤其适合不愿从源码编译、希望快速接入PDF处理功能的中高级技术人员。压缩包共45个文件,约2.92MB,以24个h头文件为…

作者头像 李华
网站建设 2026/10/20 18:37:59

FX3U超音波三边封制袋机调试要点与PLC控制解析

做包装设备这些年,调试过的制袋机不算少,但FX3U超音波型三边封制袋机这个组合,确实值得单独拿出来聊一聊。三边封制袋机本身是包装行业里非常成熟的机型,加上三菱FX3U这颗老而弥坚的PLC做控制核心,再配上超音波焊接系统…

作者头像 李华
网站建设 2026/10/20 18:37:52

IMX335接RV1126调试全流程:从点亮到图像质量调优

刚把 imx335 接到 RV1126 开发板上的那一天,我就知道这不会是一次“改改 dts 就能出图”的活。RV1126 这颗 SoC 在中小型视频方案里很常见,imx335 又是一颗配套频率很高的 sensor,理论上系里的参考代码应该已经很完整,但实际调试时…

作者头像 李华
网站建设 2026/10/20 18:36:57

内部排序与外部排序实战:从算法选型到多路归并工程落地

1. 排序这件事,远没有课本上讲的那么简单很多人第一次接触排序,都是在数据结构课上。老师讲冒泡、插入、选择,然后快排、归并、堆排,最后来一句“实际工程中直接用库函数就行”。这话对,也不对。对的是,日常…

作者头像 李华
网站建设 2026/10/20 18:36:35

Masked Generative Transformer:少步数高质量图像生成新范式

1. 从"堆叠式生成"到"掩码式生成":这篇论文到底在解决什么问题文本到图像生成这个方向,过去几年几乎被扩散模型统治。你输入一句"一只戴着墨镜的柴犬在冲浪",模型就开始一步步去噪,从纯噪声里慢慢&…

作者头像 李华