浅析Nginx文件解析漏洞
浅析Nginx文件解析漏洞
本文章将从五个维度对Nginx文件解析漏洞进行剖析——原理、危害、检测、防御、复现
1、原理
Nginx文件解析漏洞的产生原因是由于Nginx配置文件default.conf以及PHP配置文件php.ini的错误配置。
引发该漏洞的错误配置分别如下:
-
Nginx 在/etc/nginx/conf.d/default.conf文件下,有如下配置
location ~ \.php$ { fastcgi_index index.php; include fastcgi_params; fastcgi_params REDIRECT_STATUS 200; fastcgi_params SCRIPT_FILENAME $DOCUMENT_ROOT/$fastcgi_script_name; fastcgi_params DOCUMENT_ROOT /var/www/html; fastcgi_pass php:9000; }
其中引发Nginx文件解析漏洞的不正确配置,就包括
fastcgi_params SCRIPT_FILENAME $DOCUMENT_ROOT/$fastcgi_script_name
这一行配置,该配置的作用是将上层路径写入PATH_INFO变量中,以告知PHP上层路径是什么
-
PHP 在PHP的配置文件php.ini中,有cgi.fix_pathinfo变量,默认值为1,表示开启。该变量会对文件路径进行美化。举个例子,如果文件的上层路径为 /test.png/not_exist.php;当启用cgi.fix_pathinfo时,php检测到 “not_exist.php” 文件并不存在,则会向上寻找存在的文件,最终会找到test.png文件并将其当作 .php文件执行
- (上层路径:若url为http://123.168.38.160/nginx.png/not_exist.php ,则此时上层路径为/nginx.png/not_exist.php)
-
当然,如若要实现上述将test.png文件当作 .php的操作,还离不开 security.limit_extensions 属性的设置,该属性位于/etc/php-fpm.d/www.conf目录下,其作用是设置可以被当作php文件解析的文件后缀 如 security.limit_extensions .png .php 就代表着只有.png 和 . php结尾的文件才能被当作php文件执行。所以,实现Nginx文件解析漏洞的必要因素之一就是要把 security.limit_extensions 属性的属性值设为空,这才能让我们上述中的test.png 文件被当成 .php文件执行
2、危害
该漏洞的存在可让攻击者绕过文件上传时的检测,将含有危险代码的合法文件上传至服务器;之后再利用文件解析漏洞执行上述文件,从而容易让攻击者留下后门,导致机密数据被窃取、核心业务数据被篡改、网页被篡改、数据库所在服务器被攻击变为傀儡主机,导致局域网(内网)被入侵等。
3、检测
由于该漏洞的产生原因位于服务端,除非通过信息收集等手段获取被攻击方的配置文件,否则其配置文件的信息一般不可见,最通用的检测方式是依靠模糊测试来实现。
4、防御
该漏洞产生的原因是Nginx以及PHP服务器的配置不合理所致,最好的防御方法就是使用规范化、模板化、经由安全测试的配置文件。当然,在系统上线之前对敏感配置文件进行检查,也是一个非常有效的防御手段。
5、漏洞复现
cd /etc/nginx/
cd nginx.conf|more
cd conf.d/
cat default.conf
复现环境:该复现过程借助vulhub的docker环境进行测试
vulhub:https://github.com/vulhub/vulhub.git (环境搭建过程见GitHub仓库)
启动容器后,查看nginx的配置文件default.conf(路径为/etc/nginx/conf.d/default.conf)
可见fastcgi_param SCRIPT_FILENAME 选项已指定值
现打开web网站,进行漏洞测试
上传含POC的图片马后,打开网站的存储路径,发现图片正常显示
此时在原有路径下,加入“ /not_exist.php”,则发现该图片马被当作PHP文件执行,漏洞复现成功
与此同时,也可以看到cgi.fix_pathinfo属性显示为On(在配置文件中设置为1时会显示为On)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码