Nginx 配置错误导致漏洞

Nginx 配置错误导致漏洞

运行成功后,Nginx将会监听8080/8081/8082三个端口,分别对应三种漏洞。

Mistake 1. CRLF注入漏洞

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

错误的配置文件示例(原本的目的是为了让http的请求跳转到https上):

1
2
3
location / {
return 302 https://$host$uri;
}

Payload: http://192.168.44.132:8080/%0a%0dSet-Cookie:%20a=1,可注入Set-Cookie头。

image-20211102151604040

利用《Bottle HTTP 头注入漏洞探究》中的技巧,即可构造一个XSS漏洞:

image-20211102154940189

Mistake 2. 目录穿越漏洞

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

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

1
2
3
location /files {
alias /home/;
}

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

image-20211102160014979

Mistake 3. add_header被覆盖

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

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

1
2
3
4
5
6
7
8
9
10
11
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;
}

查看/test1的响应回显

image-20211102161924226

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

image-20211102162044429

XSS可被触发:

image-20211102165522990

0%