突破 Next.js 边界与利用 Chrome DevTools 斩获 Root 权限
字数 1731
更新时间 2026-07-12 00:07:15

突破 Next.js 边界与利用 Chrome DevTools 斩获 Root 权限 — 教学文档

一、环境概述

目标IP:10.129.245.214

开放端口:

  • 22/tcp — SSH
  • 3000/tcp — PPP(实际为Web服务)

二、信息收集

2.1 端口扫描

sudo nmap 10.129.245.214

结果发现目标主机开放22端口(SSH)和3000端口(Web服务)。

2.2 Web指纹识别

访问3000端口,发现是一个名为 ReactorWatch | Core Monitoring System 的核心监控系统。

使用 whatweb 进行指纹探测:

whatweb http://10.129.245.214:3000/

返回关键信息:

  • HTTP状态码:200 OK
  • 页面标题:ReactorWatch | Core Monitoring System
  • 服务器技术:Next.js
  • 响应头特征:X-Powered-By[Next.js]
  • 特殊头部:x-nextjs-cachex-nextjs-prerenderx-nextjs-stale-time

三、漏洞利用 — Next.js RCE

3.1 利用工具

使用开源工具 NextRce 进行漏洞利用:

  • GitHub仓库:https://github.com/ynsmroztas/NextRce

3.2 执行利用

通过 NextRce 工具成功触发远程代码执行,获得初始访问权限。

3.3 反弹Shell

在目标机器上执行反弹Shell命令,建立稳定的交互式会话。

四、横向移动

4.1 发现数据库文件

在当前工作目录下发现一个数据库文件(未明确说明文件名,推测为 SQLite 或其他轻量级数据库文件)。

4.2 连接数据库并查询用户

成功连接数据库后,执行用户表查询操作,获取用户凭证信息。

查询到的用户列表:

用户名 密码哈希
engineer reactor1(MD5哈希)
admin 未查到

4.3 破解密码哈希

engineer 用户的密码哈希为 MD5 格式,使用在线工具或本地字典进行破解,成功还原明文密码。

4.4 SSH连接

使用 engineer 用户的凭据通过 SSH 登录目标主机:

ssh engineer@10.129.245.214

五、权限提升 — Node Inspect 提权

5.1 进程枚举

在目标主机上执行进程查看命令:

ps aux

发现一个关键服务进程:

  • 监听地址:localhost:9229
  • 运行用户:root
  • 技术栈:Node.js(可通过 node inspect 调试)

5.2 端口转发

由于9229端口只监听本地回环地址,需要将远程端口转发到本地攻击机:

# 示例命令(原文未给出具体参数)
ssh -L 9229:127.0.0.1:9229 engineer@10.129.245.214

5.3 Chrome DevTools 连接

在本地浏览器中打开 Chrome DevTools 调试页面:

chrome://inspect

配置远程目标,连接到转发的 localhost:9229 端口。

5.4 执行任意代码

在 Chrome DevTools 的 Console 面板中,连接到目标 Node.js 调试会话后,执行系统命令:

require('child_process').execSync('id').toString()

返回结果确认已获得 root 权限(uid=0)。

5.5 验证提权结果

执行其他特权命令进一步确认:

require('child_process').execSync('whoami').toString()
// 返回: root

六、攻击链总结

信息收集 → Next.js RCE利用 → 反弹Shell → 数据库凭据提取 → SSH横向移动 → Node Inspect提权 → Root权限

关键技术点

阶段 关键技术 工具/方法
信息收集 端口扫描、指纹识别 nmap、whatweb
初始入侵 Next.js RCE漏洞 NextRce工具
横向移动 数据库凭据提取、SSH复用 SQLite客户端、MD5破解
权限提升 Node.js Inspector调试接口 Chrome DevTools、端口转发

防御建议

  1. 及时更新 Next.js 版本,修复已知RCE漏洞
  2. 避免以 root 用户运行 Node.js 应用
  3. 生产环境禁用 Node.js Inspector 调试接口--inspect 标志)
  4. 数据库密码应使用强哈希算法(如 bcrypt),避免使用 MD5
  5. 实施最小权限原则,限制数据库文件的可读范围
相似文章
相似文章
 全屏