漏洞复现----Nginx解析漏洞

Nginx解析漏洞

一、版本信息

  • Nginx 1.x 最新版
  • PHP 7.x 最新版

二、复现

  • 环境:Ubuntu18(靶机),Win10(攻击机)
  • Ubuntu中进入到Nginx文件夹中,docker-compose up -d启动环境
  • 在攻击机中访问靶机地址1.1.1.1/index.php

image-20230225190826953

  • 选择一个图片,使用文本编辑器在打开图片,最后一行加入一句话木马(图片不宜过大)

image-20230225190956432

  • 选择上传后,访问图片地址,并在图片地址http://IP/uploadfiles/图片名称.jpg后面拼上/.php或者一个不存在的php文件。

image-20230225191218679

  • 删除镜像docker-compose down

三、分析

  • 该漏洞是由于配置不当引起。
  • 由于错误配置,Nginx首先会把.php 结尾的文件交给fastcgi处理,所以才能在图片路径后面拼接一个不存在的php文件。
  • 但是fastcgi在处理这个不存在的文件时,会受到php.ini配置文件中cgi.fix_pathinfo=1这个选项的影响(这项配置用于修复路径,如果当前路径不存在则采用上层路径),到上一级中执行解析(也就是在靶机中/uploadfiles/d9d99c01b2d14ca7b00c65362f88c7b7.png/aa.phpfastcgi发现aa.php文件不存在会对/uploadfiles/d9d99c01b2d14ca7b00c65362f88c7b7.png进行解析,d9d99c01b2d14ca7b00c65362f88c7b7.png文件是真实存在的),但是解析时候又受到php-fpm.conf中的配置选项security.limit_extensions的影响,只有在此选项为空的时候才能指定.png等其他文件转为代码解析,如果此选项后面设置参数,那么解析的时候就按设置的参数进行解析,比如:
1
2
security.limit_extensions = .php .php3 .php4 .php5 
#为了安全,限制能执行的脚本后缀

参考链接:


漏洞复现----Nginx解析漏洞
https://rofgd.github.io/2022/10/14/漏洞复现---Nginx解析漏洞/
作者
ReadPond
发布于
2022年10月14日
许可协议