Nginx文件解析漏洞

40 篇文章 35 订阅
32 篇文章 14 订阅

环境搭建

配置方法

安装docker

yum -y install docker

启动docker

systemctl start docker

使用docker拉取ubuntu:14.04.5镜像

docker pull ubuntu:14.04.5

使用docker启动镜像 ubuntu:14.04.5

docker run -d -it -p 本机端口:80 ubuntu:14.04.5

查看已开启的镜像

docker ps

 进入Ubuntu镜像

docker exec -it 【镜像名称】 /bin/bash

安装相关环境

apt-get update # 更新源
apt-get install vim # 安装vim
apt-get install nginx # 安装nginx
service nginx start # 启动nginx服务
apt-get install php5-fpm # 安装php5-fp

配置方法

刚装好的Nginx是不能解析php的,需要修改配置文件:

/etc/nginx/sites-available/default

Nginx的两种启动方式

  • 第五行如果打开,就是使用tcp方式启动,php-fpm将会本地监听9000端口。
  • 如果倒数第三行打开,则是使用套接字方式启动 

启动web服务

/etc/init.d/php5-fpm start

然后到web目录中写一个测试的php文件,重启nginx服务。

尝试访问,如果可以解析,则环境配置成功。

 相关目录

/usr/share/nginx/html # 默认web目录
/etc/nginx/ # 配置文件目录
/etc/php5/fpm #php配置文件目录
/var/log/nginx/access.log #访问日志
/var/log/nginx/error.log# 错误日志

原理

  • 对任意文件名,在后面添加/任意文件名.php的解析漏洞,比如原本文件名是test.jpg,可以添加为test.jpg/x.php 进行解析攻击。
  • 对低版本的Nginx可以在任意文件名后面添加%00.php进行解析攻击。
  • Nginx下,请求文件/shell.gif时在后面加个*.php,即/shell.gif/1.php,可能会被当作PHP代码执行。
  • 和Apache一样,Nginx也是通过mime.types识别文件。
  • 文件在/etc/nginx/mime.types

创建一个1.jpg,然后访问1.jpg/1.php.
显示:"Access denied.“

Nginx拿到文件路径/1.jpg/1.php后,一看后缀是.php,便认为该文件是php文件,转交给php去处理。php一看/1.jpg/1.php不存在,便删去最后的/1.php,又看/1.jpg存在,便把/1.jpg当成要执行的文件了,又因为后缀为.jpg,php认为这不是php文件,于是返回“Access denied.”

cgi.fix_pathinfo,该值默认为1,表示开启。

用途:对文件路径进行“修理”
当php遇到文件路径“/aaa.xxx/bbb.yyy/ccc.zzz" 时,若"/aaa.xxx/bbb.yyy/ccc.zzz" 不存在,则会去掉最后的“/ccc.zzz”,然后判断"/aaa.xxx/bbb.yyy”是否存在,若存在,则把“/aaa.xxx/bbb.yyy”当做文件“/aaa.xxx/bbb.yyy/ccc.zzz”,若“/aaa.xxx/bbb.yyy”仍不存在,则继续去掉“/bbb.yyy”,以此类推

配置

cgi.fixpathinfo这个配置在php.ini 中可以修改,默认是开启的

/etc/php5/fpm/php.ini

默认是1,不需要修改

 配置/etc/php5/fpm/pool.d/www.conf中的limit_extensions允许解析其他的格式文件

 

 再次访问1.jpg/1.php

 文件解析漏洞修复方法

  • 将php.ini文件中的cgi.fix_pathinfo的值设为0。这样php在解析1.jpg/1.php这样的目录时,只要1.php不存在就会显示404。
  • 将/etc/php5/fpm/pool.d/www.conf中security.limit_extensions后面的值设为.php。
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值