前言
曾记得面试时被问到这个漏洞,当时没答上来,所以好好学习一下
原理
Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,Nginx经常被做为反向代理,动态的部分被proxy_pass传递给后端端口,而静态文件需要Nginx来处理。
漏洞出现在服务器的静态文件中。
如果静态文件存储在/home/目录下,而该目录在url中名字为files,那么就需要用alias设置目录的别名:
url上/files没有加后缀/,而alias设置的/home/是有后缀/的,这个/就导致我们可以从/home/目录穿越到他的上层目录(具体也不太理解,后续补上)
漏洞验证
复现漏洞
环境搭建
Ubuntu 16.04 + Nginx 1.11.3
获得root权限
sudo -i
安装nginx依赖库和gcc g++的依赖库
apt-get install build-essential
apt-get install libtool
安装pcre依赖库
apt-get install libpcre3 libpcre3-dev
安装zlib依赖库
apt-get install zlib1g-dev
安装ssl依赖库
apt-get install openssl
安装nginx
wget http://nginx.org/download/nginx-1.11.3.tar.gz
解压
tar -zxvf nginx-1.11.3.tar.gz
进入解压目录:
cd nginx-1.11.3
配置:
./configure --prefix=/usr/local/nginx
安装nginx:
make
启动nginx:
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
访问是否搭建成功
修改Nginx配置文件
apt-get install vim
vim /usr/local/nginx/conf/nginx.conf
效果如图
重启Nginx
cd /usr/local/nginx
./sbin/nginx -s reload
验证漏洞
正常访问
目录穿越
漏洞修复
重启Nginx
cd /usr/local/nginx
./sbin/nginx -s reload
参考: