五个案例“熄灭”Nginx漏洞隐患

Nginx从2004年10月发布至今 , 已经趋于成熟和完善 。
在连接高并发的情况下 , Nginx是Apache服务不错的替代品 , 作为一款分布式轻量级的中间件Nginx也是存在大量的漏洞的 。
下面我们针对常见的漏洞来进行探讨 。
01
目录遍历漏洞
漏洞介绍
Nginx的目录遍历漏洞属于配置不当导致的漏洞 , 错误的配置使得目录被遍历与源码泄露‘ 。该漏洞的产生与nginx.conf文件中的autoindex(目录浏览功能)参数设置有关 , 默认是关闭的状态 , 即autoindex off 。例如打开test文件夹 , 出现403 , 如下图所示:

五个案例“熄灭”Nginx漏洞隐患

文章插图
 
修改配置文件 , 该文件位置如下:
五个案例“熄灭”Nginx漏洞隐患

文章插图
 
在如下图所示的位置添加autoindex on , 重启Nginx:
五个案例“熄灭”Nginx漏洞隐患

文章插图
 
 
再次访问 , 即可访问到目录:
五个案例“熄灭”Nginx漏洞隐患

文章插图
 
 
漏洞修复
? 将/etc/nginx/sites-avaliable/default里的autoindex on改为autoindex off 。
 
02
目录穿越漏洞 
漏洞介绍
Nginx经常被做为反向代理 , 动态的部分被proxy_pass传递给后端端口 , 而静态文件需要nginx来处理 。如果静态文件存储在/home/目录下 , 而该目录在url中名字为files , 那么就需要用设置目录的别名 , 如下所示:
location /files { alias /home/;}此时 , 访问http:// xxx.xx.xx /files/readme.txt , 就可以获取/home/readme.txt文件 。但我们注意到 , url上/files没有加后缀“/” , 而alias设置的/home/是有后缀“/”的 , 这个/就导致我们可以从/home/目录穿越到他的上层目录 , 进而我们获得了一个任意文件下载漏洞:
 
五个案例“熄灭”Nginx漏洞隐患

文章插图
 
 
漏洞修复
? location 和 alias 的值要不都加“/” ,  要不都加 , 统一即可 。
 
03
服务端请求伪造漏洞
 
漏洞介绍
一般情况下 , 服务端请求伪造的目标是从外网无法访问的内部系统 , 服务端请求是利用存在缺陷的web应用作为代理的远程和本地的服务器 , 常出现在反向代理的配置中 , 反向代理的语法如下:proxy_pass http ://IP 。正是因为它是由服务端发起的 , 所以它能够请求到与它相连而与外网隔离的内部系统 。
这里将nginx里的相关配置展示一下:
五个案例“熄灭”Nginx漏洞隐患

文章插图
 
如果利用者可以操控IP, 将其修改成内网IP地址即可造成服务端请求伪造漏洞 。例如对外网、内网、本地进行端口扫描 , 某些情况下端口的Banner会显出来(比如3306) , 我们可通过返回banner的差异值来猜测内网IP , 从而拿到内网IP信息 。
漏洞修复
? 过滤返回信息 , 验证远程服务器对请求的响应是比较容易的方法 。如果web应用是去获取某一种类型的文件 。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准 。
? 统一错误信息 , 避免用户可以根据错误信息来判断远端服务器的端口状态 。
? 限制请求的端口为http常用的端口 , 比如 , 80,443,8080,8090 。
? 黑名单内网ip 。避免应用被用来获取获取内网数据 , 破坏内网 。
? 禁用不需要的协议 。仅仅允许http和https请求 。可以防止类似于file:///, gopher://, ftp:// 等引起的问题 。
 
04
版本泄露
 
漏洞介绍
对于nginx服务器 , 之前曾爆出过不同版本的解析漏洞 , 比如nginx 0.7.65以下(0.5., 0.6., 0.7. )全版本系列和0.8.37(0.8.)以下8系列受影响 。
假设在存在漏洞的站点上有一张图片url地址为:http://x.x.x.x/logo.jpg  ,  当正常访问图片时 , nginx会把这个当作非脚本语言直接读取传送会客户端(也就是浏览器) , 但是存在解析漏洞的nginx会把如下连接解析并且当作php文件执行 , 也就是前面介绍过的文件解析漏洞:


推荐阅读