学习日志5:web中间件漏洞-Nginx篇

Nginx漏洞

什么是Nginx:Nginx(engine x)是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务,特点是占有内存少, 并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好

漏洞:
1.文件解析
(1)版本:<8.03
(2)利用方式:上传a.jpg/x.php,则a.jpg被解析成x.php执行
(3)修复:
(1)将php.ini文件中的cgi.fix_pathinfo的值设为0.这样php在解析1.php/1.jpg这样的目录时,只要1.jpg不存在就会显示404
(2)将/etc/php5/fpm/pool.d/www.conf中security.limit_ectensions后面的值设为.php

2.目录遍历
修复:将/etc/nginx/sites-avaliable/default里的autoindex on改为autoindex off

3.CRLF注入
(1)原因:Nginx处理请求时常做如下30x跳转处理:
用户访问http://a.com/b,自动跳转到https://a.com/b
用户访问http://a.com/b,自动跳转到http://www.a.com/b
Nginx处理过程
location / {
return 302 https://$ host$ uri;
}
其中$uri是解码以后的请求路径,所以可能就会包含换行符,也就造成了一个CRLF注入漏洞。
CRLF注入漏洞可以导致会话固定漏洞、设置Cookie引发的CSRF漏洞或者XSS漏洞。
(2)案例:访问http//:www.a.com/%0d%0a%0d%0a< img src=1 οnerrοr=alert(/xss/)>
经过Nginx解析,跳转请求变成如下:
GET https://www.a.com
{此处为其他Nginx添加的请求头}

< img src=1 οnerrοr=alert(/xss/)>
(3)修复:
Nginx的配置文件/etc/nginx/conf.d/error1.conf修改为使用不解码的url跳转。
即跳转配置修改为:
location / {
return 302 https://$ host$ request_uri;
}
其中$ request_uri是不解码的$ uri

4.目录穿越漏洞
(1)原因
Nginx做反向代理时,动态的部分被proxy_pass传递给后端端口,而静态文件需要Nginx来处理。
假设静态文件存储在/home/目录下,而该目录在url中名字为files,那么就需要用alias设置目录的别名:
location /files {
alias /home/;
}
即Nginx将请求中的/files修改为/home/,如访问http://a.com/files变成http://a.com/home/
从而导致目录遍历,可以访问http://a.com/files…/etc/passwd

(2)修复
Nginx的配置文件/etc/nginx/conf.d/error2.conf的/files使用/闭合。
即别名:
location /files/ {
alias /home/;
}

location /files {
alias /home;
}

你可能感兴趣的:(学习笔记)