目录
漏洞描述
Nginx的目录遍历与apache一样,属于配置方面的问题,错误的配置可导致目录遍历与源码泄露。
Nginx是一个高性能的HTTP和反向代理服务器,经常被做为反向代理,动态的部分被proxy_pass传递给后端端口,而静态文件需要Nginx来处理。漏洞出现在服务器的静态文件中。如果静态文件存储在/home/目录下,而该目录在url中名字为files,那么就需要用alias设置目录的别名。
Nginx在配置别名(Alias)的时候,如果忘记加/,将造成一个目录穿越漏洞。
漏洞原理
在配置子网站时,修改nginx.conf,在如下图位置添加如下配置
在如下配置中设置目录别名时/files配置为/home/的别名,那么当我们访问/files/…时,nginx实际处理的路径时/home/…,从而实现了穿越目录。
漏洞复现
环境搭建
在ubuntu 安装nginx
# 获得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目录下载到vulhub这个目录里了,不过对过程和结果不影响)
在使用make安装nginx时会报错(第一个坑):
解决方法如下:
输入下面这段命令代替make
make CFLAGS='-Wno-implicit-fallthrough'
发现还是报错:
出现这个问题一般不是Nginx的版本高就是服务器版本高的问题
解决办法:
在nginx安装文件夹下输入
vim src/os/unix/ngx_user.c
进去编辑找到红框中的代码段,如图将它注释保存退出
重新输入:
make CFLAGS='-Wno-implicit-fallthrough'即可,不会再有报错(输入make的话还是报错)
输入
make install
也没有报错
启动nginx
查看网页:
这样说明环境起来了
攻击复现
1、搭建子网站,使用home目录
修改/usr/local/nginx/conf/nginx.conf
在这里删除其他,添加上下面两段
保存退出后,重启nginx
cd /usr/local/nginx
./sbin/nginx -s reload
浏览器访问
2、搭建子网站,使用根目录
修改/usr/local/nginx/conf/nginx.conf
方法同上,在这里删除其他,添加上下面两段
重启nginx后浏览器访问
注意,不要用systemctl时会报错!(第二个坑)
如果kill掉nginx所占用的80端口,重新启动nginx后会发现,环境没了!
参考:
#不全
https://blog.csdn.net/qq_48985780/article/details/121401646
#推荐
Nginx漏洞修复之目录穿越(目录遍历)漏洞复现及修复_Charles Yan的博客-CSDN博客_目录遍历漏洞如何修复
#报错分析
https://blog.csdn.net/zhangpeterx/article/details/97156314
声明
严禁读者利用以上介绍知识点对网站进行非法操作 , 本文仅用于技术交流和学习 , 如果您利用文章中介绍的知识对他人造成损失 , 后果由您自行承担 , 如果您不能同意该约定 , 请您务必不要阅读该文章 , 感谢您的配合 !