nginx解析漏洞

发布时间 2023-10-17 16:42:44作者: lisenMiller

nginx解析漏洞

漏洞原理

1、 由于nginx.conf的如下配置导致nginx把以’.php’结尾的文件交给fastcgi处理,为此可以构造http://ip/uploadfiles/test.png/.php (url结尾不一定是‘.php’,任何服务器端不存在的php文件均可,比如’a.php’),其中test.png是我们上传的包含PHP代码的照片文件。

  

2、但是fastcgi在处理’.php’文件时发现文件并不存在,这时php.ini配置文件中cgi.fix_pathinfo=1 发挥作用,这项配置用于修复路径,如果当前路径不存在则采用上层路径。为此这里交由fastcgi处理的文件就变成了’/test.png’。

3、 最重要的一点是php-fpm.conf中的security.limit_extensions配置项限制了fastcgi解析文件的类型(即指定什么类型的文件当做代码解析),此项设置为空的时候才允许fastcgi将’.png’等文件当做代码解析。

  

注:限制fpm允许解析的脚本扩展名。此设置可以预防web服务器配置的错误。应当限制fpm仅仅解析.php扩展名,阻止恶意用户使用其他扩展名运行php代码。默认值:.php

 

漏洞利用 

上传图片马 webshell.jpg,页面返回了上传路径。

构造 http://192.168.1.103/uploadfiles/85bb6e49a1be4be02eefb660f9d8cf68.jpg/1.php 去访问它,发现其被当作 PHP 文件解析。

漏洞修复

1、 将 php.ini 文件中的配置项 cgi.fix_pathinfo 的值设置为 0,这样 PHP 解析 webshell.jpg/1.php 这样的目录时,只要 1.php 不存在就会显示404页面。

2、将 php-fpm.conf 中的 security.limit_extensions 后面的值设置为 .php,限制 fastcgi 解析文件的类型仅为 .php,无法解析其他类型。