一、典型的解析漏洞(配置类)

解析漏洞的核心是Nginx 配置不当,导致服务器错误解析文件类型(如将非脚本文件当作 PHP 执行),属于配置类漏洞的子类,也是最易被忽视的风险之一。

1. 文件名截断解析漏洞(最常见)

  • 原理:Nginx 默认会忽略文件路径中;之后的内容(受 FastCGI 配置影响)。若服务器同时存在 “允许上传图片” 和 “PHP 解析” 的配置,攻击者可构造类似test.jpg;.php的文件名,Nginx 会将其当作test.jpg.php解析为 PHP 脚本。
  • 触发条件
    1. Nginx 配置中启用了 FastCGI(如对接 PHP-FPM);
    2. FastCGI 参数fastcgi_split_path_info配置不当(未过滤特殊字符;);
    3. 服务器允许用户上传文件,且上传目录被配置为可解析 PHP。

2. 目录级解析漏洞

  • 原理:若 Nginx 配置中,将某目录(如/upload/)的.php文件交给 FastCGI 解析,但未限制该目录下的子目录,攻击者可构造路径/upload/test.jpg/1.php。此时 Nginx 会认为1.php是目标文件,但实际1.php不存在,FastCGI 可能回退解析父目录的test.jpg为 PHP(取决于cgi.fix_pathinfo配置,PHP 默认开启该选项)。

二、其他常见的 Nginx 漏洞(非解析漏洞)

除了解析漏洞,Nginx 的安全风险更多集中在配置、协议和软件缺陷上,以下是高频漏洞类别:

(一)配置类漏洞(除解析外)

这类漏洞均由 “错误的 Nginx 配置” 导致,是生产环境中最常见的风险来源。

漏洞类型原理危害案例
目录遍历漏洞开启autoindex on(自动目录索引),且root/alias配置路径不当,导致服务器暴露目录结构和敏感文件(如/etc/passwd、源代码)。若配置location /files { autoindex on; root /var/; },访问/files/../etc/可遍历/etc目录。
CORS 配置不当跨域资源共享(CORS)配置中,Access-Control-Allow-Origin设为*(允许所有域名跨域),且同时开启Access-Control-Allow-Credentials on(允许携带 Cookie),导致敏感 Cookie 被第三方网站窃取。攻击者可通过恶意网站,利用跨域请求获取用户在目标网站的登录 Cookie,实现身份伪造。
HTTPS 配置漏洞1. 使用弱加密算法(如 RC4、3DES)或低版本 TLS(SSLv3、TLS 1.0);
2. 未配置HSTS(HTTP Strict Transport Security),导致用户可能被劫持到 HTTP 明文站点;
3. 证书链不完整,导致浏览器提示 “不安全”。
攻击者可通过中间人攻击(MITM)破解弱加密流量,窃取 HTTPS 传输的敏感数据(如密码)。
反向代理越权反向代理配置中,proxy_pass路径未加限制,攻击者可构造请求绕过代理规则,访问后端内网服务(如数据库、管理后台)。若配置location /api { proxy_pass http://backend:8080; },访问/api/../admin可绕过/api限制,访问后端/admin管理页。

(二)HTTP 协议相关漏洞

Nginx 作为 HTTP 服务器,可能因 “对 HTTP 协议的处理逻辑缺陷” 被攻击,典型漏洞包括:

  1. CRLF 注入漏洞

    • 原理:HTTP 请求头(如RefererUser-Agent)中的\r\n(CRLF)是 HTTP 协议的 “行分隔符”。若 Nginx 未过滤请求头中的\r\n,攻击者可注入该字符,篡改响应头(如添加Set-Cookie: session=hacker)或注入 HTML 内容(XSS)。
    • 案例:构造Referer: http://attacker.com\r\nSet-Cookie: evil=1,若 Nginx 未过滤,响应头会被注入恶意Set-Cookie
  2. Slowloris(慢连接)攻击

    • 原理:HTTP 协议要求 “客户端发送完整请求后,服务器才处理”。Slowloris 攻击通过 “缓慢发送请求头”(如每秒发 1 个字符),占用 Nginx 的连接数(默认worker_connections有限),导致服务器无法处理正常请求,属于 DoS(拒绝服务)攻击。
    • 防御:配置client_header_timeout(如 10 秒),超时断开慢连接。

(三)Nginx 自身缺陷(CVE 漏洞)

这类漏洞是 Nginx 软件代码层面的 bug,需通过升级版本修复,典型案例包括:

CVE 编号漏洞类型影响版本危害
CVE-2017-7529缓冲区溢出Nginx 0.5.6 ~ 1.13.2攻击者通过发送特制的 Chunked 编码请求,触发缓冲区溢出,可远程执行代码(RCE)或导致服务崩溃。
CVE-2021-23017整数溢出Nginx 1.19.0 ~ 1.20.0处理range请求时(断点续传),整数溢出导致内存破坏,可远程执行代码或 DoS。
CVE-2022-41741路径遍历Nginx 0.7.69 ~ 1.21.5当 Nginx 使用merge_slashes off(关闭路径斜杠合并)且配置alias时,攻击者可通过//../绕过路径限制,访问敏感文件。

(四)第三方模块漏洞

Nginx 支持扩展模块(如ngx_http_lua_modulengx_http_addition_module),若模块版本老旧或存在逻辑缺陷,会引入安全风险:

  • 案例 1ngx_http_lua_module(Lua 脚本模块)的旧版本(<0.10.15)存在 “沙箱逃逸” 漏洞,攻击者可通过特制 Lua 脚本执行系统命令。
  • 案例 2ngx_http_image_filter_module(图片处理模块)的某些版本存在 “内存泄漏”,长期使用可能导致 Nginx 内存耗尽,触发 DoS。

三、漏洞防护核心建议

  1. 及时升级 Nginx 版本:修复已知的 CVE 漏洞(如避免使用 CVE-2017-7529、CVE-2021-23017 影响的版本),优先使用稳定版(如 1.24.x、1.26.x)。
  2. 优化核心配置(规避配置类漏洞)
    • 禁用autoindex on(除非必要),避免目录遍历;
    • 解析 PHP 时,严格配置fastcgi_split_path_info,过滤;等特殊字符(如fastcgi_split_path_info ^(.+\.php)(/.+)$;);
    • CORS 配置中,避免Access-Control-Allow-Origin: *Credentials: on同时启用;
    • HTTPS 配置:禁用 SSLv3/TLS 1.0,使用 TLS 1.2+,启用 HSTS,确保证书链完整。
  3. 限制危险功能
    • 禁用不必要的第三方模块;
    • 上传目录单独配置,禁止解析 PHP(如location /upload { types { image/jpeg jpg; } });
    • 配置client_header_timeout(10 秒内)、client_body_timeout,防御 Slowloris 攻击。
  4. 监控与审计:开启 Nginx 访问日志和错误日志,定期审计异常请求(如;.php//../等特征路径)。
文章作者: QiaoShen
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 QiaoShen-World
漏洞详解 实景渗透基础 中间件 渗透 姿势
喜欢就支持一下吧