Web中间件漏洞总结之Nginx漏洞
字数 1578 2025-08-26 22:12:01
Nginx中间件漏洞分析与防护指南
一、Nginx解析漏洞
漏洞简介
Nginx解析漏洞是由于用户配置不当造成的安全缺陷,允许攻击者通过特定方式使非PHP文件以PHP格式执行。具体表现为:对于任意文件名,在后面加上/任意文件名.php后,该文件会被当作PHP文件解析。
漏洞复现步骤
- 在网站根目录创建
test.jpg文件,内容为<?php phpinfo(); ?> - 访问
http://example.com/test.jpg/x.php - 在低版本PHP环境下,
test.jpg会被当作PHP文件执行
核心配置分析
1. cgi.fix_pathinfo
- 位置:
php.ini配置文件 - 默认值:
1(开启) - 作用机制:
- 当访问路径如
/aaa.xxx/bbb.yyy/ccc.zzz时:- 若
/aaa.xxx/bbb.yyy/ccc.zzz不存在,则去掉最后的/ccc.zzz - 检查
/aaa.xxx/bbb.yyy是否存在 - 若存在,则将
/aaa.xxx/bbb.yyy当作/aaa.xxx/bbb.yyy/ccc.zzz解析 - 递归执行此过程直到找到存在的文件
- 若
- 当访问路径如
2. security.limit_extensions
- 位置:
/etc/php-fpm.d/www.conf - 默认配置:被注释,仅允许执行
.php文件 - 修改影响:
- 添加
.jpg后缀:.jpg文件可被当作PHP执行 - 留空:允许任意格式文件执行
- 添加
修复方案
- 将
php.ini中的cgi.fix_pathinfo设为0 - 确保
security.limit_extensions仅包含.php
二、目录遍历漏洞
漏洞简介
由于配置错误导致攻击者能够查看服务器目录结构和文件列表,可能导致源码泄露等安全问题。
漏洞复现
- 修改
nginx.conf,在相应位置添加autoindex on - 访问目标目录即可看到文件列表
核心配置
- 配置项:
autoindex on - 默认状态:未设置(通常为关闭状态)
修复方案
将autoindex on改为autoindex off
三、目录穿越漏洞
漏洞简介
在配置别名(Alias)时,若忘记添加结尾的/,可能导致目录穿越漏洞。
漏洞原理
示例错误配置:
location /test {
alias /home/;
}
访问/test../时,Nginx实际处理路径为/home/../,实现目录穿越。
修复方案
确保别名配置闭合,将/test改为/test/
四、CRLF注入漏洞
漏洞简介
CRLF(Carriage Return Line Feed)指回车(\r, 0x0d)和换行(\n, 0x0a)字符。HTTP协议中,header与body通过两个CRLF分隔。攻击者可通过注入恶意换行符实现会话固定或XSS攻击。
漏洞利用方式
1. 构造会话固定漏洞
- 示例攻击链接:
http://example.com%0aSet-Cookie:sessionid=ghtwf01 - 攻击流程:
- 攻击者注册账户前记录Session ID
- 注册后发现Session ID未变化
- 构造恶意链接诱使管理员点击
- 攻击者账户权限提升
2. 反射型XSS攻击
- 示例攻击链接:
http://example.com%0d%0a%0d%0a<script>alert(/xss/);</script>
修复方案
过滤请求中的\r、\n等换行符
五、综合防护建议
-
解析漏洞防护:
- 禁用
cgi.fix_pathinfo - 严格限制
security.limit_extensions
- 禁用
-
目录安全:
- 禁用目录列表功能
- 检查所有别名配置是否闭合
-
输入过滤:
- 对所有用户输入进行CRLF字符过滤
- 实施严格的HTTP头验证
-
版本维护:
- 保持Nginx和PHP版本更新
- 定期审查服务器配置
-
最小权限原则:
- Web服务器进程使用低权限用户运行
- 限制Web目录的访问权限
通过以上措施的综合实施,可有效防范Nginx常见的中间件安全漏洞,保障Web应用的安全运行。