环境条件:ubuntu14,已安装docker,docker pull ubuntu:14.04.5
一、Nginx配置
1、使用docker启动容器:
docker run -itd --name ubuntu -p 8088:80 ubuntu:14.04.5
2、进入容器:
docker exec -it ubuntu /bin/bash
3、然后使用以下语句安装相关环境:(注意是在容器中执行)
①apt-get update # 更新源
②apt-get install vim #安装vim
③apt-get install nginx#安装nginx
④service nginx start#启动nginx服务
⑤apt-get install php5-fpm#安装php5-fpm
配置方法:
刚安装好的Nginx是不能解析php的,需要修改配置文件:/etc/nginx/sites-available/default:
①cd /etc/nginx/sites-available/
②vim default
修改以下四项(不要忘记loaction也要打开)
Nginx的两种启动方式
第五行如果打开,就是使用tcp方式启动,php-fpm将会本地监听9000端口如果倒数第三行打开,则
是使用套接字方式启动。
现在使用/etc/init.d/php5-fpm start启动web服务然后到web目录中写一个测试的php文件,重启
nginx服务:尝试访问,如果可以解析,则环境配置成功。
③/etc/init.d/php5-fpm start
④cd /usr/share/nginx/html 进入web目录
创建测试程序
⑤vim info.php
<?php phpinfo();?>
重启nginx服务
⑥service nginx restart
访问:192.168.129.136:8088/info.php
相关目录
/usr/share/nginx/html#默认web目录
/etc/nginx/# 配置文件目录
/etc/php5/fpm # php配置文件目录
/var/log/nginx/access.log #访问日志
/var/log/nginx/error.log # 错误日志
原理
1、对任意文件名,在后面添加/任意文件名.php的解析漏洞,比如原本文件名是test.jpg,可以添加
为test.jpg/x.php 进行解析攻击。
2、对低版本的Nginx 可以在任意文件名后面添加%00.php 进行解析攻击。
3、Nginx下,请求文件/shell.gif时在后面加个*.php,即/shell.gif/1.php,可能会被当作PHP代码执行。
4、和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存在,便把/1jpg当成要执行的文件
了,又因为后缀为jpg,php认为这不是php文件,于是返回“Access denied.
从宿主机上传图片到容器
5、 docker cp /root/桌面/202405241631779.png 071eeea207dd:/usr/share/nginx/html
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,不需要修改
在vim编辑器中/ 查找关键词
配置/etc/php5/fpm/pool.d/www.conf中security.limit_extensions允许解析其他格式文件为PHP
改为空
注意:把注意去掉
测试
再次访问1.png/1.php
这应该是尝试解析成php失败
文件解析漏洞修复方法:
1.将php.ini文件中的cgi.fix _pathinfo的值设为0。这样php在解析1jpg/1.php这样的目录时,只要
1.php不存在就会显示404。
2.将/etc/php5/fpm/pool.d/www.conf中security.limit extensions后面的值设为.php。
Nginx配置
配置方法:
相关目录
原理
配置:
文件解析漏洞修复方法: