首页 > 系统相关 >浅析Nginx文件解析漏洞

浅析Nginx文件解析漏洞

时间:2023-03-26 16:46:29浏览次数:57  
标签:文件 漏洞 Nginx conf php 浅析 fastcgi

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

标签:文件,漏洞,Nginx,conf,php,浅析,fastcgi
From: https://www.cnblogs.com/ykyu/p/17258905.html

相关文章

  • k8s集群安装nginx-ingress报错解决
    可能是因为之前集群内安装过nginx-ingress,没有删除彻底,再次安装nginx-ingress的时候就提示有资源存在。报错如下:Error:INSTALLATIONFAILED:renderedmanifestscontaina......
  • Handler消息传递机制浅析
    本节给大家讲解的是Activity中UI组件中的信息传递Handler,相信很多朋友都知道,Android为了线程安全,并不允许我们在UI线程外操作UI;很多时候我们做界面刷新都需要通过Handler来......
  • Nginx快速入门与详解
    一、Nginx简介1.概念 Nginx是一款高性能的HTTP和反向代理服务器,常用于静态资源的访问、负载均衡、HTTP缓存和反向代理等。以下是Nginx的常用功能和配置介绍:以下是常用......
  • Nginx企业级优化与防盗链
    一、配置Nginx隐藏版本号在生产环境中,需要隐藏Nginx等服务的版本信息,以避免安全风险实验前提前默认安装nginx-1.14.2[[email protected]]#curl -I 192.168.2......
  • DC-8(sql注入漏洞)
    信息收集扫描ip和端口:通过nmap扫描ip和端口发现:ip为192.168.6.152,开放端口号为80和22扫描目录:dirb和desearch,发现了疑似登录界面查看框架:Drupal7漏洞扫描:searchsploitDru......
  • Windows下Nginx的启动、停止、重启等命令
    假设安装在C:\server\nginx-1.0.2目录:1、启动:C:\server\nginx-1.0.2>startnginx 或者 C:\server\nginx-1.0.2>nginx.exe注:建议使用第一种,第二种会使cmd窗口一直处......
  • Linux 普通用户启动nginx
    现象nginx配置的user为www用户,root启动之后主进程显示root,子进程显示是www,但是切换到www用户之后执行nginx-t等报错services@pts/0$/usr/local/nginx/sbin/n......
  • 架构师学习--常见系统的性能最大量级,nginx,kafka,4个9等
    1、nginx负载均衡性能是3万左右,2、一般的Linux服务器上装一个Nginx大概能到5万/秒;3、LVS的性能是十万级,据说可达到80万/秒;4、而F5性能是百万级,从200万/......
  • 【转】浅析审核流
    导语在我们的日常工作中有很多业务场景都会涉及到审批,例如报销、请假、加班、采购、离职等等,既然有这么多业务都会涉及到审批,那么我们把审核做成一个公共服务给各个业务方......
  • Centos + Django + Nginx + uwsgi 部署项目-rpm包安装 Mysql 5
    笔者发觉下面这个方法可能有些缺陷,适合自己的就看下,如果是新开的虚拟机有可能不适用下面的方法,云服务器开的LinuxCentos系统应该可以。虚拟机安装Mysql的具体方法,可以看......