浅析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)

posted @   煜见yk  阅读(2448)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
点击右上角即可分享
微信分享提示