前言 最近在搭建一个有关于宝塔的靶机,环境是利用docker并docker内安装最新的centos来模拟环境。由于下载了是根据网上的教程宝塔还有在维护的6.0版本,打开面版也阴差阳错的一键部署了推荐的lnmp环境即ngnix1.18.0,php5.6,MySQL 5.6.49,phpMyAdmin 4.4。
后来原计划是靶机已经找到上传漏洞点,但是在getshell方面却解析不了,于是反思到了可能是ngnix版本太高的缘故,但是在切换版本的时候意外重重。百度有的说是yum的问题,有的说是解析地址问题,更改了几次之后决定放弃更改版本,直接动手改配置。
在ngnix下的全版本的解析漏洞是因为配置的错误问题,跟ngnix服务器本身没有关系,主要有两点配置达到该条件:
1、是php.ini文件的配置中cgi.fix_pathinfo=1,该文件的配置主要是用于修复路径,如果当前路径不存在则采用上层路径
2、是php-fpm.conf中的security.limit_extensions配置项中限制了fastcgi解析文件的类型,指定什么文件可以解析什么不可以解析
当这两个文件同时存在并满足要求时则会触发ngnix服务器的解析漏洞。
首先查看一下php56的配置是否存在cgi.fix_pathinfo=1,
/www/server/php/56/etc的php-fpm.conf中,在security.limit_extensions添加.jpg可以被解析
在php中默认是开启这个功能,至于这个功能为啥要默认开启不做讨论。第一点条件已经达成,那么需要第二点也达成条件,问题就出现在ngnix1.18版本上,在宝塔中最新的ngnix版本中。先查看/www/server/ngnix/conf存在着这么些文件
打开ngnix.conf配置文件
在include包含的配置文件,原先是enable-php.conf,后来被我修改成为enable-php-56.conf,实际上有没有修改是无所谓的,因为在enable-php.conf中配置跟php56的配置是一样的(图中enable-php-56.conf被我改过)
这里需要注释到的文件是关键点,也是我搞了半天的原因。在高版本的ngnix中官方会添加include pathinfo.conf这个文件来防止因为php中cgi.fix_pathinfo=1的默认开启导致的解析漏洞。
注释掉以后,利用靶机写phpinfo的jpg后缀,再利用解析漏洞访问,得到
如何在Linux宝塔6.0下搭建一个nginx服务器的全版本解析漏洞
最新推荐文章于 2024-06-21 15:30:00 发布