服务器容器漏洞-nginx配置错误导致漏洞

Vulhub - Docker-Compose file for vulnerability environment

1、介绍

三种基于配置错误而发生的漏洞,CRLF注入漏洞,目录穿越漏洞,add_header被覆盖

靶场搭建,8080/8081/8082三个端口,分别对应三种漏洞。

2、CRLF漏洞

Nginx会将$uri进行解码,导致传入%0d%0a即可引入换行符,造成CRLF注入漏洞。

  • 所以关键在于nginx是否使用$uri参数
  • 常见的漏洞场景是配置http跳转到https
# 错误的配置文件示例
location / {
    return 302 https://$host$uri;
}

访问http://192.168.0.15:8080/%0d%0aSet-Cookie:%20a=2

  • 响应头部包括Set-Cookie字段,以及其值包括a=2

3、目录穿越漏洞

Nginx在配置别名(Alias)的时候,如果忘记加/,将造成一个目录穿越漏洞。

  • /files和/home/都是可以定义的,具体如何映射并不能确定。
  • 网站级别粗略测试时,可以请求/files/,判断响应中是否包含关键词index of /files/,以便进一步测试/files../
  • 站内测试时,如果请求/abc/时,响应中包含关键词index of /abc/,那么可以进一步测试/abc../

错误的配置文件示例(原本的目的是为了让用户访问到/home/目录下的文件):

location /files {
    alias /home/;
}

Payload: http://your-ip:8081/files../ ,成功穿越到根目录:

4、add_header被覆盖

Nginx配置文件子块(server、location、if)中的add_header,将会覆盖父块中的add_header添加的HTTP头,造成一些安全隐患。

如下列代码,整站(父块中)添加了CSP头:

add_header Content-Security-Policy "default-src 'self'";
add_header X-Frame-Options DENY;

location = /test1 {
    rewrite ^(.*)$ /xss.html break;
}

location = /test2 {
    add_header X-Content-Type-Options nosniff;
    rewrite ^(.*)$ /xss.html break;
}

/test2的location中又添加了X-Content-Type-Options头,导致父块中的add_header全部失效:

需要注意的是,location.hash获取的字符是会进行url编码的。

posted @ 2023-07-29 05:53  挖洞404  阅读(94)  评论(0编辑  收藏  举报