ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

如何用PPPwn在PS4上实现内核级远程代码执行?固件7.00-11.00完整实操教程

如何用PPPwn在PS4上实现内核级远程代码执行?固件7.00-11.00完整实操教程

如何用PPPwn在PS4上实现内核级远程代码执行?固件7.00-11.00完整实操教程

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

如果你有一台固件在 7.00 到 11.00 之间的 PS4,想在不改固件的前提下体验内核级远程代码执行(RCE,即让系统在内核态运行你提供的代码),PPPwn 就是为此设计的开源工具:它利用 PPPoE 网络协议中的漏洞(CVE-2006-4304,一个老牌的缓冲区溢出问题)向主机注入两段式载荷。整个过程需要一台 Linux 电脑、一根网线,以及最后一次的"同步按键"。

🚀 能力速览:PPPwn 能做到什么

PPPwn 的利用链分两半:stage1/ 编译出的stage1.bin负责在内核里站稳脚跟并绕过 KASLR(内核地址随机化,一种让攻击者猜不到内核地址的保护机制),stage2/ 编译出的stage2.bin则负责执行任意代码。默认载荷只在 PS4 屏幕上打出PPPwned字样来验证成功;想启动 Mira 等自制软件环境,需要自行替换stage2.bin。

方式难度适用版本持久性风险
PPPwn(默认 PoC 载荷)中(需同步操作、核对固件参数)FW 7.00–11.00临时,重启失效中低,不写入固件
PPPwn(自改 stage2 载荷)高(需逆向基础)FW 7.00–11.00临时较高,可能崩溃
老固件的传统越狱方式低不适用于 7.00 及以上持久中,影响保修

📦 动手之前:先核对这张清单

  1. PS4 固件版本在 7.00–11.00 区间内("设置 → 系统 → 系统软件版本"里查),并记住具体小版本号
  2. 一台装好python3和gcc的 Linux 电脑(物理机或 VirtualBox 桥接网络的虚拟机均可)
  3. 电脑需有以太网口(USB 转以太网也支持),一根网线直连 PS4
  4. 用ifconfig确认直连 PS4 的接口名,后文以enp0s3为例
  5. Apple Silicon 的 Mac 无法直接编译载荷(需要 AMD64 架构),仓库自带的Dockerfile可在容器内构建出.bin文件

🔧 三阶段实操

阶段一:搭建环境并编译载荷

先克隆仓库、进入目录并安装依赖(主要是 scapy 这个封包库):

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

再按你的固件号编译两段载荷,FW参数决定用哪套偏移量:

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

📌FW=1100必须换成与主机一致的数字,完整对照见文末兼容矩阵;编译产物stage1/stage1.bin与stage2/stage2.bin会被主脚本默认读取。

阶段二:在 PS4 上配置 PPPoE 网络

PPPoE 是 PS4 支持的一种拨号上网协议,相当于它取快递的窗口;本工具会冒充"快递站"应答这个窗口,所以账密内容无关紧要:

  1. "设置 → 网络 → 设定互联网连接",选择"使用LAN连接线"
  2. 选"自定义",IP 地址设置改为"PPPoE"
  3. 用户 ID 和密码任意填写(如test/test)
  4. DNS 设置、MTU 设置均选"自动",代理服务器选"不使用"

阶段三:同步执行的时序技巧与成功判定

在 PS4 上进入"测试互联网连接"界面,电脑上把命令敲好但先不回车:

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

📌 关键时序:手指按住手柄 X 键(开始联网测试)的同时按下电脑回车,两端必须同时触发,误差控制在半秒内,心里默数 3-2-1 再一起按最稳。

看到什么算成功:终端日志依次推进 STAGE 0(初始化)到 STAGE 4(任意载荷执行),最后输出[+] Done!;PS4 屏幕会先出现或随后出现 "Cannot connect to network: (NW-31274-7)",接着打出PPPwned。重试有讲究:每次都要等 NW-31274-7 错误出现后再发起下一轮注入;如果 PS4 崩了,重启后跳过联网设置直接点"测试互联网连接",电脑端杀掉脚本重新运行,依然两端同步触发。

🩺 排错速查:从症状到解法

症状可能原因解决方案
卡在 "Waiting for PADI" 无反应PS4 未发出拨号请求,或接口名错误核对--interface是否直连 PS4 的接口,并同步按手柄 X 键触发联网
屏幕提示 NW-31274-7 后无后续这是 PPPoE 拨号失败的正常中间状态等该错误完全出现再发起下一轮,不要短间隔反复点击
输出 "Error leak is invalid. Wrong firmware?"实际固件与--fw参数不符按真实固件号重新编译两个 stage 并重跑
LCP/IPCP 协商反复失败两端时序漂移或上一次会话未结束等待 NW-31274-7 再次出现后,两端重新同步触发
PS4 崩溃或卡死载荷执行异常重启主机,删除.bin重新编译,再按阶段三重试

兼容矩阵:固件版本与参数对照

编译时的FW=与运行时的--fw=必须一致,且都要等于主机真实固件号(小数点去掉)。偏移量数据在offsets.py中按固件分好类:

PS4 固件编译参数(FW=)运行参数(--fw=)
7.00 / 7.01 / 7.02700 / 701 / 702700 / 701 / 702
7.50 / 7.51 / 7.55750 / 751 / 755750 / 751 / 755
8.00 / 8.01 / 8.03800 / 801 / 803800 / 801 / 803
8.50 / 8.52850 / 852850 / 852
9.00900900
9.03 / 9.04903 / 904903 / 904
9.50 / 9.51 / 9.60950 / 951 / 960950 / 951 / 960
10.00 / 10.011000 / 10011000 / 1001
10.50 / 10.70 / 10.711050 / 1070 / 10711050 / 1070 / 1071
11.0011001100

风险与合规

⚠️ 操作前请确认以下事项:

  • 默认载荷只打印PPPwned,但自行替换stage2.bin后可能影响系统状态,先备份重要数据
  • 仅限学习与漏洞研究用途,遵守当地法律法规,勿用于未授权设备
  • 系统处于被利用状态时登录 PSN 在线,存在账号处罚风险,建议全程离线
  • 同步失败或载荷异常可能导致 PS4 崩溃,需重启恢复,操作前预留时间
  • 效果不持久,重启即恢复,这既是特性也是安全边界

延伸方向:越过 "PPPwned" 之后

下一步通常是把stage2.bin替换为能启动 Mira 等自制软件环境的载荷,可以参考 stage2/stage2.c 的结构;想深入理解每个固件为什么参数不同,可以阅读offsets.py里的偏移定义与 stage1/ 的内核利用代码。

把流程跑通之后,换一台固件不同的机器,只是改两个参数的事。

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

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

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进