环境搭建
下载之后上传到虚拟机并解压
进入这个路径
(root?kali)-[~/vulhub-master/nginx/nginx_parsing_vulnerability]
就能看到有docker-compose.yml
启动环境
正常显示
增加/.php
后缀,被解析成PHP文件:
漏洞原因:开启了cgi.fix_pathinfo选项后,本身是一个png文件,但是加上/.php后会把整个文件当中php文件来执行。
安全后缀限制为空
意思是php的匹配规则是:先解析最后一个文件名称,它是会解析最后一个文件的名称是什么意思呢?就比如说现在目前呢,你是写了一个这样的东西(111111.php)这样的东西,很明显的一点是现在你的系统就没有.php结尾的这个文件,很明显没有对吧,所以说这就是为什么我随便出为什么他都可以解析到前头呢,因为平时的解析规则是这样的,首先他解析他的是php的对吧,这个文件他没有,没有他会直接跳到上一个继续解析,但是此时呢,它会把上一个目录的所有文件都当成php文件去解析,它的解析规则是这样的,就是你第1次先解析它是一个php文件,但你发现这个批文件没有,那它就会往上找,他发现,唉,这个文件是有的,那我不管它是php、png我都把它当成php文件去解析,所以这样一来呢。你没有填写一个安全后缀,你没有填写一个安全后缀,如果你在安全后缀里面写一个.php结尾,明显就是在限制你解析的后缀对吧,但是正因为这东西不是空的,可能他会去判断说这个东西的后缀是不是.php,他一看他发现不是.php,他就直接403他就不解析了,这是你个人的配置问题,这不是php和安全问题。
访问http://your-ip/index.php
可以测试上传功能,上传代码不存在漏洞,但利用解析漏洞即可getshell:
由此可知,该漏洞与Nginx、php版本无关,属于用户配置不当造成的解析漏洞
修复方案
- 将php.ini文件中的cgi.fix_pathinfo的值设为0