【免费下载链接】Relapse-ExploitExploit chain for PS5 7.00 - 13.60项目地址https://gitcode.com/gh_mirrors/re/Relapse-Exploit点击查看免费下载Relapse-Exploit 是覆盖 PS5 7.0013.60 固件的浏览器漏洞利用链它在拿到初步内核权限后先用sysctl oid 窗口建立慢读写再通过pipe 交叉技术把内核读写加速为一次搬运整块内存的快读写。这篇文章带你理解这次内核读写加速的设计思路为什么要加速、慢通道怎么工作、pipe 交叉快读写如何建立以及它在整条 PS5 exploit 攻击链中的位置。 瓶颈在哪sysctl oid 慢读写有多慢拿到内核读写能力后Relapse-Exploit 并没有立刻去搬运载荷。原因很简单——此时的通道太慢每读/写 4 字节都要通过 ROP 链发起一次完整的sysctl系统调用还要经过 Worker 线程往返一次读一个 8 字节指针需要 2 次这样的往返kread64拆成两次kread32后续要把约 18KB 的 kexp 壳代码写入可执行内存若走这条慢通道意味着上万像素级的往返开销。慢读写的封装在 src/relapse_exploit.js 中sysctl()把 MIB 数组写进内核内存、调用SYS___SYSCTL再用sysctlReadInt/sysctlWriteInt包装成 32 位读写。 慢通道原理oid 窗口如何指向内核地址利用链的核心机关是三个 sysctl oid以 13.60 固件为例偏移定义见 offsets/13.60.jsoid对应 MIB作用akern.smp.cpus写入低 32 位充当窗口地址bkern.smp.maxcpus被翻转 kind 后成为数据读写端口c[9, 8]翻转后充当高 32 位写入端口具体流程由 armKernelReadWrite() 编排先用 AIOaio_multi_waitUAF 竞态回收等待者数组把 oid a 的 kind 从0x80048002翻转为可写的0x70048002makeOidWritableflipOidKind再把 oid b 的arg1指针拐弯到可读位置steerOidWindow最后用prepareHighWriter把地址高 32 位固定在内核段0xffffffff。于是得到一个内核指针 32 位窗口aimWindow(目标地址) → 写低 32 位到 oid a kread32 / kwrite32 → 经 oid b 读/写该地址的 4 字节这就是 kread32() / kwrite32()正确但缓慢只够完成自我验证、定位当前进程、找到文件描述符表这些小件操作。⚡ 快通道建立pipe 交叉快读写如何工作真正的高速通道由pipe2创建的两对管道master与victim交叉改造而成代码在 locatePipes() 与 crossPipes()。第一步定位并自检两条 pipelocatePipes先pipe2建出 master/victim再顺着curproc → filedesc → file → pipe的内核结构走一遍找到两条 pipe 的内核对象并往管道里写一个0x5a探测字节、从内核侧回读count字段确认找到的确实是自己的 pipe。第二步交叉——让 master 的缓冲区指向 victim 结构crossPipes用慢读写改写 master pipe 的关键字段count 0、in 0、out 0清空状态size 0x400016KB即 PIPE.defaultSizebuffer victim pipe 的内核地址pipe 的buffer本来是数据缓冲区现在被指到 victim pipe 结构体本身。这意味着对 master 写 fd 写入的数据会直接落到 victim pipe 结构体的字段上——等于多了一条用普通 write 系统调用写内核任意结构体的通道。第三步瞄准 整块搬运之后每次读写内核地址只需两步kreadFast / kwriteFastaimVictim(地址, count, size)向 master 写 0x18 字节的字段块把 victim 的buffer指向目标内核地址、out/in归零再从 master 读端把数据抽走避免污染对 victim 读/写 fd 执行普通SYS_READ/SYS_WRITE——内核的 pipe 路径会把victim-buffer即任意内核地址与用户缓冲区之间一次性拷贝最多 16KB。对比慢通道每次 4 字节 一次 ROP 往返快通道是一次 syscall 搬 16KB这就是内核读写加速的全部来源。建立后代码会用内核只读段里的字符串_aio_submit_cmd\0_aio_multi_waitrodataProbe做一次端到端校验读对文本才算快通道就绪。对上层暴露的统一接口是 readKernel32/64、writeKernel32/64它们内部全部走快通道。 快通道在攻击链中的位置run()主流程src/relapse_exploit.js的顺序非常清晰KASLR 泄漏 单核绑核固定竞态条件慢通道就绪AIO UAF oid 翻转完成读/写自测切换到快通道findCurrentProcess→locatePipes→crossPipesdefuseAioGroups先把武装过的 AIO 组拆弹再escalate完成 uid0 与沙箱逃逸批量写ucred全靠快通道把read8 / write4 / write8即快读写打包成krw交给 runKexp() 装载壳代码、经jitshm建可执行页并注入 ELF 载荷。值得注意的是kexp 壳代码内部复用了同一个交叉技巧prepareShellcodePipes() 在用户态线程里再次把 master 的buffer指向 victim让壳代码内的 ELF 拷贝也能借 pipe 路径提速。最后restorePipes/ restoreOids 会把管道字段与 oid kind 全部还原把系统状态收拾干净。 关键源码速查模块位置说明sysctl 封装慢通道src/relapse_exploit.js#L148-L167oid 窗口读写pipe 交叉与自检src/relapse_exploit.js#L834-L883快通道建立核心快读写接口src/relapse_exploit.js#L797-L832aim read/writeoid / pipe 偏移offsets/13.60.js#L401-L433各固件版本见 offsets/ 目录壳代码装载与复用src/kexp.js#L249-L325krw 快读写注入ROP 链执行器src/rop.js#L76-L107Worker 中的 syscall 通道总结Relapse-Exploit 的内核读写加速是一个典型的两级通道设计sysctl oid 慢读写负责从 0 到 1——借助 oid kind 翻转拿到首个内核 4 字节读写能力pipe 交叉快读写负责从 1 到 N——把 master pipe 的缓冲区指到 victim pipe 上用普通 pipe read/write 就能按 16KB 粒度搬运任意内核内存。正是这次加速让后续的提权写、壳代码装载与 ELF 注入得以在合理的时间内完成。赞分享【免费下载链接】Relapse-ExploitExploit chain for PS5 7.00 - 13.60项目地址https://gitcode.com/gh_mirrors/re/Relapse-Exploit点击查看免费下载相关推荐Relapse-Exploit 的任意内存读写原语从信息泄露到 read/write 原语的升级之路Relapse Exploit 的任意内存读写原语从信息泄露到 read/write 原语的升级之路 Relapse Exploit 是覆盖 PS5 7.00PS5 内核利用指南Relapse-Exploit 如何用 AIO_MULTI_WAIT 释放后使用UAF竞态建立内核读写PS5 内核利用指南Relapse Exploit 如何用 AIO_MULTI_WAIT 释放后使用UAF竞态建立内核读写 Relapse ExploitCortex.js实战案例构建一个完整的React电商应用Cortex.js实战案例构建一个完整的React电商应用 Cortex.js是一个专为React设计的不可变数据存储库能够高效管理深度嵌套的数据结构。本文前端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考