nginx漏洞大全
字数 1352 2025-08-14 12:04:09
Nginx漏洞大全教学文档
一、Nginx文件名逻辑漏洞 (CVE-2013-4547)
影响版本
- Nginx 0.8.41 ~ 1.4.3
- Nginx 1.5.0 ~ 1.5.7
漏洞原理
该漏洞源于Nginx错误地解析请求URI,导致错误获取用户请求的文件名,可能造成权限绕过和代码执行。
漏洞复现步骤
- 搭建Nginx 1.4.2环境并配置上传页面
- 上传一个名为"1.jpg"的木马文件
- 抓包修改,在文件名后添加空格 → "1.jpg "
- 访问上传文件地址
- 构造特殊URL:
http://target/uploadfiles/1.jpg aaaphp - 抓包修改二进制值:
- 将61 61 61(对应"aaa")改为20 00 2e(对应空格、空字节和点号)
二、用户配置不当导致的解析漏洞
影响范围
- 与Nginx和PHP版本无关
- 由PHP配置
cgi.fix_pathinfo默认开启导致
漏洞原理
当Nginx看到以.php结尾的文件就会交给PHP处理,类似于IIS7.5的解析漏洞。
漏洞复现
- 上传正常图片马(绕过检测)
- 访问时在URL后添加
/.php,如:upload/test.jpg/.php
三、%00截断解析漏洞
影响版本
- Nginx 0.5.x, 0.6.x
- Nginx 0.7.x ≤ 0.7.65
- Nginx 0.8.x ≤ 0.8.37
漏洞原理
PHP-FastCGI在处理URL中的%00空字节时与FastCGI处理不一致,导致可以在其他文件中插入PHP代码。
利用方式
访问URL格式:目标文件%00.php
四、Nginx越界读取缓存漏洞 (CVE-2017-7529)
影响版本
- Nginx 0.5.6 - 1.13.2
漏洞详情
当Nginx作为反向代理服务器且开启缓存时,攻击者可构造恶意range请求头,读取服务器缓存文件的头部信息,导致敏感信息泄露。
环境搭建
使用自动化脚本搭建漏洞环境进行测试。
五、CRLF注入漏洞
漏洞原理
CRLF是"回车+换行"(\r\n)的简称。HTTP Header与Body用两个CRLF分隔,攻击者可控制HTTP头中的字符注入恶意换行。
攻击方式
- 注入会话Cookie:
http://target/%0a%0d%0a%0dSet-cookie:JSPSESSID=xxx - 注入HTML/XSS:
http://target/?url=%0a%0d%0a%0d
测试payload
使用%0a%0d%0a%0d测试CRLF注入。
六、目录穿越漏洞
漏洞成因
Nginx配置别名(Alias)时忘记添加斜杠/导致。
错误配置示例
location /files {
alias /home/;
}
利用方式
访问:http://target/files../可穿越到根目录
防护建议
- 及时升级Nginx到最新版本
- 关闭PHP的
cgi.fix_pathinfo选项 - 对用户上传文件进行严格验证和限制
- 合理配置Nginx的alias和root指令,确保结尾有
/ - 限制Nginx缓存敏感信息
- 对用户输入进行严格过滤,防止CRLF注入
- 使用安全配置检查工具定期检查Nginx配置
漏洞修复版本
对于各漏洞,应升级到以下版本或更高:
- CVE-2013-4547:升级到Nginx 1.4.4或1.5.8+
- CVE-2017-7529:升级到Nginx 1.13.3+
- %00截断漏洞:升级到Nginx 0.7.66+或0.8.38+