目录
一、nginx环境搭建
1.1搭建步骤
二、docker复现Nginx配置漏洞
2.1安装docker
2.2复现过程
2.1CRLF(carriage return/line feed)注入漏洞
2.2.目录穿越
一、nginx环境搭建
1.1搭建步骤
1.先创建Nginx
的目录并进入(命令如下)
mkdir /soft && mkdir /soft/nginx/
cd /soft/nginx/
2.下载Nginx
的安装包,可以通过FTP
工具上传离线环境包,也可通过wget
命令在线获取安装包:(命令如下)
wget https://nginx.org/download/nginx-1.21.6.tar.gz
3.解压Nginx
的压缩包:(命令如下)
tar -xvzf nginx-1.21.6.tar.gz
4.下载并安装Nginx
所需的依赖库和包:(命令如下)
yum install --downloadonly --downloaddir=/soft/nginx/ gcc-c++
yum install --downloadonly --downloaddir=/soft/nginx/ pcre pcre-devel4
yum install --downloadonly --downloaddir=/soft/nginx/ zlib zlib-devel
yum install --downloadonly --downloaddir=/soft/nginx/ openssl openssl-devel
5.通过rpm
命令安装所有依赖包:
rpm -ivh --nodeps *.rpm
6.进入解压后的nginx
目录,安装其他依赖库,然后执行Nginx
的配置脚本,为后续的安装提前配置好环境,默认位于/usr/local/nginx/
目录下(可自定义目录):
cd nginx-1.21.6
yum install pcre-devel
yum install zlib-devel
./configure --prefix=/soft/nginx/
7.编译并安装Nginx
:
make && make install
8.修改安装后生成的conf
目录下的nginx.conf
配置文件:(使用vim命令编辑)
server_name改成自己的ip
二、docker复现Nginx配置漏洞
2.1安装docker
1.这里以centos7为例
先更新一下 yum 包(这个命令不是必须执行的,看个人情况,后面出现不兼容的情况的话就必须update了)
注意
yum -y update:升级所有包同时也升级软件和系统内核;
yum -y upgrade:只升级所有包,不升级软件和系统内核
2.安装需要的软件包, yum-util 提供yum-config-manager功能,另两个是devicemapper驱动依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
3.设置 yum 源
yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo(中央仓库)yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo(阿里仓库)
4.选择docker版本并安装
(1)查看可用版本有哪些
yum list docker-ce --showduplicates | sort -r
(2)选择一个版本并安装即可:yum install docker-ce-版本号
2.2复现过程
2.1CRLF(carriage return/line feed)注入漏洞
这个漏洞产生的原因是请求重定向的错误配置,导致在url中输入回车换行符可以控制http响应头部
比如:
location / {return 302 https://$host$uri;
}
原本的目的是为了让http的请求跳转到https上,但是$uri参数是不包含查询参数的,于是当我们在url中输入%0d%0a时,$uri参数不会将回车换行符传入,这就导致用户可以控制http响应头部访问http://ip:8080,使用bp抓包,构造反射性xss
%0d%0a%0d%0a<img src=1 onerror=alert(1)>
修复方法:把$url改为$request-uri,这个参数会传入完整的原始url请求,也就是说用户输入的所有内容都会被当做参数传入Location字段
2.2.目录穿越
这个漏洞产生的原因是alias别名配置错误,导致在url中拼接目录获取敏感数据
location /files {alias /home/;}
原本的目的是想用户输入/files会跳转到/home目录下,但是/files并没有以"/"结尾,所以我们可以输入/files../,此时/files匹配上了,替换为/home/..,造成目录穿越
修复方法:将/files改为/files/,这样就算输入/files../也不会匹配上/files/
再次尝试访问就不会出现上面的情况