实验目的:

掌握Nginx环境配置的方法

理解Nginx文件解析漏洞

实验环境:

在centos7或者kali虚拟机上需要安装好docker和ubuntu14

1. Docker 要求 CentOS 系统的内核版本高于 3.10,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。

通过 uname -r 命令查看你当前的内核版本

2.  如果安装过请先卸载

    yum remove docker \
               docker-client \
               docker-client-latest \
               docker-common \
               docker-latest \
               docker-latest-logrotate \
               docker-logrotate \
               docker-engine

3.安装依赖设置yum仓库

安装依赖:

    yum install -y yum-utils \
      device-mapper-persistent-data \
      lvm2

设置仓库:

    yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo

4. 安装docker

yum install docker-ce docker-ce-cli containerd.io

5. 启动并加入开机启动

systemctl start docker

systemctl enable docker

6.验证是否安装成功

docker version

docker run hello-world

显示如下即安装成功!

配置方法

进入ubuntu14系统中

使用docker run -d -it -p 本机端口:80 ubuntu:14.04.5 启动镜像

 查看容器ID   docker ps

 使用docker exec -it[容器ID]/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-fpm

/etc/init.d/php5-fpm start #启动web服务

然后访问一下

IP地址:端口号  出现下面这个页面证明安装没有问题

 由于是刚安装好的Nginx是不能解析php的,需要修改配置文件:/etc/nginx/sites-available/default :

先进入根目录

 cd /etc/nginx

find / -name default

进入修改文件中进行修改:vim /etc/nginx/sites-available/default

修改成功之后的样子(只需要删掉#即可,修改位置从54行开始)

先进入默认的web目录中

命令: cd /usr/share/nginx/html

再使用/etc/init.d/php5-fpm start启动web服务。

然后到web目录中写一个测试的php文件<?php   phpinfo();  ?> 

重启nginx服务。命令:service nginx restart

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

 

原理
创建一个2.jpg,然后访问2.jpg/4.php.显示:“Access denied."
为什么?

Nginx拿到文件路径/2.jpg/4.php后,一看后缀是.php,便认为该文件是php文件,转交给php去处理。php一看/2.jpg/4.php不存在,便删去最后的/4.php,又看/2.jpg存在,便把/2.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.fix_pathinfo这个配置在php.ini中可以修改,默认是开启的/etc/php5/fpm/php.ini
默认是1,不需要修改

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

(将其前面的;删掉)

再次访问2.jpg/4.php

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐