目录
首先有Nginx环境
docker环境搭建
安装docker
yum install docker.io
2.下载并解压docker环境Nginx配置漏洞安装包
cd到对应目录下,docker启容器
unzip vulhub-master.zip
cd /root/vulhub-master/nginx/insecure-configuration
docker-compose up -d
unzip vulhub-master.zip
cd /root/vulhub-master/nginx/insecure-configuration
docker-compose up -d
安装好后,用docker ps -a查看容器运行情况
nginx的两个常见的配置漏洞
CRLF换行符注入漏洞
怎么产生:
由于用户可以控制request_header头部,可以往里面插入数据,并且用户可以控制,导致用户可以通过换行符输入危险代码。
Nginx会将$url进行解码,导致传入%0d%0a即可引入换行符,造成CRLF注入漏洞。
错误的配置文件示例(原本的目的是为了让http的请求跳转到https上):
payload: http://your-ip:8080//%0d%0aSet-Cookie:%20a=1,可注入Set-Cookie头
%0d%0a:换行符\r\n
连接查看到Set-Cookie被换到了下一行,导致莫名其妙给头部增加了一个数据。
换行符漏洞可以执行反射性的Xss,所以控制了HTTP的header头,我们就可以构造一些危险代码。但是这样的危害并不够,不能对系统进行影响。
换行符应当配合是ssrf的服务端请求伪造和被授权访问配合在一起才能发挥它的最大威力
扩展:
redis:未授权访问漏洞 Redis默认情况下,会绑定在0.0.0.0:6379,如果没有采用相关的策略,如配置防火墙规则避免其他非信任来源的IP访问,就会将Redis服务暴露在公网上;并且Redis默认情况是空密码连接,这导致任意用户可以访问目标服务器下未授权访问Redis以及读取Redis数据。 当nmap扫描发现靶机开启redis服务后,则可直接连接靶机,使用本地Redis客户端获取敏感数据。
redis-cli -h 靶机ip
怎么解决换行符漏洞
首先我们来看两个场景:
-
用户访问http://example.com/aabbcc,自动跳转到http://example.com/aabbcc
-
用户访问http://example.com/aabbcc,自动跳转到http://www.example.com/aabbcc
第二个场景主要是为了统一用户访问的域名,更加有益于SEO优化,
在跳转过程中,我们需要保证访问的页面不变,所以需要从Nginx获取用户请求的文件路径,查看Nginx文件档,可以发现三个表示url的变量:
-
$url
-
$document_url
-
$request_url
注:1和2表示解码以后的请求路径,不带参数;3表示的是完整的URL(没有解码)。所以当我们遇到运维配置以下代码
解决办法:只需要将$url换成$request_url。
原因:换成$request_url后%0d和%0a解不了码,换行就不能生效
目录穿越漏洞
这个常见于Nginx做反向代理的情况,动态的部分被proxy_pass传递给后端端口,而静态文件需要Nginx来处理,假设静态文件储存在/home/目录下,而该目录在URL中的名字为files,那么就需要用alias设置目录的别名。
location /files{
alias /home/;
}
分析:www.dadsadd.com/files,这个实际上是我们的一个静态文件的一个目录,但是真正的静态文件的目录是存储在我们的/home/目录下,所以我们就需要在Nginx下给files设置一个别名,设置home这个文件夹,所以这样以来我们访问的这个files,他就会找到别名home文件夹去,然后找到files,如果不设置别名就找不到。
问题:
如果我们这样访问,在配置我们以上的文件,就会实现我们的路径穿越,就可以下载它的文件,包括服务器上的一些敏感信息都可以下载。
为什么出现这样的问题:
第一步
、
第二步
由于现在我们需要在url里面匹配files,但真的静态文件是放在home目录下,所以现在通过location匹配到了url访问files的网址下,最终真正访问的文件是home这个文件夹,
也就相当于我们在www.dadsadd.com/files这里访问files就访问到了系统上的/home文件夹下,但是我们也可以写成www.dadsadd.com/files../所以我们可以根据这个路径穿越到根目录。
原因:
url上/files没有加后缀/,而alias设置的/home/是有后缀的,这个/就导致我们可以通过/files../从/home/目录穿越到他的上层目录。
分析:当我们写成/files../时他访问的并不是home,而是访问的home/..,这样的就会让我们本身进入了home目录下后又重新跳转到根路径下。
解决方法:将配置文件改为以下后就算输入/files../也不会匹配上/files/
后缀/要么都加,要么都不加。