Nginx文件解析漏洞
实验目的:掌握Nginx环境配置的方法理解Nginx文件解析漏洞实验环境:在centos7或者kali虚拟机上需要安装好docker和ubuntu141. Docker 要求 CentOS 系统的内核版本高于 3.10,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。通过 uname -r 命令查看你当前的内核版本2. 如果安装过请先卸载yum remove docker
实验目的:
掌握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
更多推荐
所有评论(0)