渗透测试之地基服务篇:服务攻防之中间件Nginx(总)
字数 2451 2025-08-13 21:33:29
Nginx中间件安全攻防详解
一、Nginx简介
1. 什么是Nginx
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。由俄罗斯程序员Igor Sysoev开发,第一个公开版本0.1.0发布于2004年10月4日。
特点:
- 轻量级Web服务器/反向代理服务器/电子邮件代理服务器
- 占有内存少,并发能力强
- 中国大陆使用nginx的知名网站:百度、京东、新浪、网易、腾讯、淘宝
2. Nginx主要功能
- 静态HTTP服务:高效处理静态文件(HTML、图片等)
- 反向代理服务器:
- 客户端请求Nginx,Nginx请求应用服务器,返回结果给客户端
- 保护原始服务器资源
- 负载均衡:
- 将用户请求分配给多台服务器处理
- 支持自带3种负载均衡策略,还有2种常用第三方策略
- 虚拟主机:
- 多个网站部署在同一台服务器上
- 不同域名解析到同一IP但访问不同网站内容
- 正向代理:
- 位于客户端和原始服务器之间
- 提供访问Internet途径,隐藏客户端自身
3. Nginx vs Apache对比
相同点:
- 都是HTTP服务器软件
- 模块化结构设计
- 支持PHP、Perl、Python等语言接口
- 支持正向/反向代理、虚拟主机、URL重写、压缩传输、SSL加密
不同点:
- Apache处理速度慢,占用内存多;Nginx高效低耗
- Apache模块支持动静态编译;Nginx模块静态编译
- Nginx对Fcgi支持更好
- Nginx支持epoll模型,Apache不支持
- Nginx安装包仅几百KB
Nginx优势:
- 静态文件处理效率高
- 支持更多并发连接(可达5万)
- 内存占用极低(1万非活动连接仅占2.5MB)
- 高稳定性,支持热部署
- 抗DoS攻击能力强
二、Nginx环境安装
1. 安装方式
2. 配置文件路径
Windows环境:C:\phpStudy\nginx\conf\nginx.conf
三、Nginx安全漏洞与攻防
1. 文件解析漏洞
漏洞描述:
对于任意文件名,在后面添加/xxx.php(xxx为任意字符)后,可将文件作为php解析。
漏洞配置:
server {
location ~ \.php$ {
root /work/www/test;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_pass unix:/tmp/php-fpm.sock;
}
}
漏洞原理:
- 访问
/1.jpg/xxx.php时,Nginx看到.php结尾,将路径传递给PHP - PHP寻找
xxx.php不存在 cgi.fix_pathinfo默认开启,PHP继续检查路径中存在的文件- 找到
.jpg文件并以PHP形式执行
复现步骤:
- 上传包含PHP代码的图片(如
1.jpg) - 访问
http://target/1.jpg/xxx.php
修复方案:
- 设置
php.ini中cgi.fix_pathinfo=0 - 禁止上传目录执行脚本权限
- 站库分离
- 高版本PHP设置
security.limit_extensions = .php
2. 目录遍历漏洞
漏洞描述:
错误配置导致可遍历服务器目录结构。
漏洞配置:
在nginx.conf中添加autoindex on
复现步骤:
- 修改配置添加
autoindex on - 访问目录URL即可看到目录列表
修复方案:
将autoindex on改为autoindex off
3. 空字节任意代码执行漏洞
影响版本:
- Nginx 0.5.*
- Nginx 0.6.*
- Nginx 0.7 <= 0.7.65
- Nginx 0.8 <= 0.8.37
漏洞描述:
Nginx遇到%00空字节时与后端FastCGI处理不一致,可通过xxx.jpg%00.php执行图片中的PHP代码。
复现步骤:
- 创建包含PHP代码的
1.jpg文件 - 访问
1.jpg%00.php - 或通过抓包修改请求为
info.jpg..php,在Hex中将.改为00
修复方案:
升级Nginx到更高版本(测试1.11.5已修复)
4. CRLF注入漏洞
漏洞描述:
Nginx会将$uri进行解码,传入%0a%0d可引入换行符,造成CRLF注入。
漏洞配置:
location / {
return 302 https://$host$uri;
}
漏洞危害:
- 会话固定攻击
- 设置恶意Cookie
- HTTP响应头注入
- 与XSS结合攻击
复现示例:
http://127.0.0.1/%0ASet-cookie:JSPSESSID%3D36
http://127.0.0.1/%0D%0A%0D%0A%3Cimg%20src=1%20onerror=alert(/xss/)%3E
修复方案:
- 过滤
%0a%0d等特殊字符 - 正确配置跳转规则
5. 文件名逻辑漏洞(CVE-2013-4547)
影响版本:
- Nginx 0.8.41 ~ 1.4.3
- Nginx 1.5.0 ~ 1.5.7
漏洞描述:
错误解析请求URI,导致可绕过限制执行非PHP文件中的代码。
复现步骤:
- 上传包含空格的文件名(如
1.jpg) - 访问
/uploadfiles/2.jpg..php - 在Hex中将
2e改为20 00
漏洞原理:
Nginx匹配.php$将请求发送给fastcgi,但错误解析文件名,将1.jpg[0x20]当作SCRIPT_FILENAME发送给fastcgi。
修复方案:
- 去除配置中的
$符号 - 升级Nginx版本
四、安全加固建议
- 及时更新:保持Nginx版本最新
- 配置安全:
- 关闭不必要的目录列表功能
- 限制上传目录执行权限
- 正确设置PATH_INFO相关参数
- 权限控制:
- 实现最小权限原则
- 站库分离
- 输入过滤:
- 过滤特殊字符(%00, %0a, %0d等)
- 验证文件上传内容
- 日志监控:
- 开启详细日志记录
- 监控异常访问模式
五、总结
Nginx作为高性能Web服务器,在互联网中广泛应用,但其配置不当会导致多种安全风险。安全人员应:
- 深入理解Nginx工作原理
- 掌握常见漏洞原理及利用方式
- 实施有效的安全配置和防护措施
- 定期进行安全审计和漏洞扫描
通过合理配置和安全开发实践,可以充分发挥Nginx的高性能优势,同时有效防范安全威胁。