我RCE了,但是发现了别的黑阔
事情很朴素:手里有台 Next.js 15.5.2 的站要做安全测试,CVE-2025-55182(React Server Components 反序列化 RCE,CVSS 10.0)披露大半年了,公开 PoC 满天飞。本着“报告要留证据”的原则,我决定亲手验一遍。
十分钟。真的就十分钟。公开 PoC 一发,execSync 的输出乖乖从重定向头里爬回来,容器内 root。
我当时的心情:嘿嘿,我就是这条街最靓的黑阔。
直到我开始勘察。
屋里好像有人
第一眼看到进程表我就笑不出来了:
一个叫 XXxxxxxx 的随机乱码进程,实时吃掉 67% CPU,虚拟内存 2.4GB——熟悉 RandomX 的朋友已经知道这是什么了:Monero 矿机的数据集就这个体积
70 多个短命 worker 进程一茬一茬地冒,干几分钟活就死,爹全是 PID 1——真正的孵化者躲在暗处,只发尸体
我 RCE 的是这台站,但明显还有别人住在这。
顺着电线摸到墙洞
挖持久化的时候,我在 crontab 里看到了这辈子最勤快的一行:
*/30 * * * * id pakchoi || (useradd -m pakchoi; chpasswd; sudoers ...)
每 30 分钟检查一次后门账号还在不在。你删了他就补,比你妈提醒你穿秋裤还准时。更绝的是这个 pakchoi 账号 uid=0——不是“能 sudo 的普通用户”,是内核认证的第二个 root。人家直接在 /etc/passwd 里焊了把钥匙。
再往下挖,/etc/ld.so.preload 里躺着一个伪装成正经库的 rootkit(9 月 24 日就进场了),cron 里还有两行 docker start ——在我这个没有 docker 命令的容器里。翻译一下:他给我的容器写了只对宿主机生效的命令,相当于在阳台上贴了张隔壁楼栋的施工图。
盘点不速之客的家当
flooder(9.7MB Go) L7 洪水工具,bogdanfinn TLS 指纹伪装全家桶 + 搜索引擎 referer 表,主打一个"让 Cloudflare 认不出我是脚本"
px(537 字节) 8 组付费住宅代理凭据——Bright Data、Webshare、Luminati、DataImpulse。这年头黑阔都正经付费买流量了,比我订阅期满不续费的姿势体面多了
tcps(17.5KB C) 套件小工:翻目录、删文件、管孩子
矿机 Monero RandomX,节流挖。12 天平均 CPU 占用 14%——比我司程序员的饱和度都稳定。满血挖两天就被托管商扬了,人家选择苟一个月
所以这不是“变成矿机”那么简单。这是一套矿机 + DDoS 跳板 + 住宅代理出口的三合一精装肉鸡,还带每 30 分钟自检一次的智能门锁。
这个黑阔到底是谁
翻 tcps 的时候挖到一个 base64 编码的字符串,解出来:bongripz4jezuz。
拿去一查——OrBit rootkit 的公开感染标记。每次感染前查一下这个标记,防止重复感染。人家连“别把同一台机器薅两遍”都有工程化考虑。
时间线也顺出来了:
9/24 rootkit 落地,当天建了 uid=0 的 pakchoi
10/3 洪水套件 + 8 组代理凭据投放
10/6 测试当天早上,他还在更新 cron
对,我打进去的那天早上,人家还在上班。我睡觉的时候他在 CPU 里打工,我醒来他把排班表都更新好了。
震惊是真的震惊:
我以为自己是第一个进门的黑阔,开门才发现屋里早住满了一窝:矿工、打手、配钥匙的,水电费全记在这台站头上
root 读不到的东西就是线索。/proc/*/exe 一次 readlink 失败,价值顶得上一晚上 fuzz
单请求“执行+回显”的 RCE 通道足够做完整勘察,不用非要交互 shell
容器失陷从来不只是容器的事——cron 里给宿主机写的两行命令,就是边界已经被穿透的墓志铭
标题是真没骗人:震惊。

温馨提示:本文内容仅用于合法授权的安全学习与研究交流,严禁用于未授权渗透测试、漏洞利用或任何违法行为。
涉及企业或平台的未公开漏洞信息,请遵循负责任披露原则,勿公开传播可直接复现的敏感细节。
如存在侵权、错误信息或不当内容,请联系站方处理,我们将及时核实并删除。邮箱:admin@baimaojianghu.com。
