nginx配置错误导致的目录穿越漏洞

背景

nginx之前被发现alias配置指令使用不当,会导致目录穿越漏洞,参考:https://github.com/yandex/gixy/blob/master/docs/en/plugins/aliastraversal.md

本文针对对此问题进行分析

 

复现及分析

版本信息:nginx/1.17.10 (Ubuntu)

nginx配置文件增加内容:

location /hd {
    alias /var/www/html/dd/;
}

然后访问http://test.com/hd../sql.conf,会返回服务器上/var/www/html/sql.conf的内容

 

原因分析:

nginx对request_uri中的/hd进行替换,替换之后为[http://test.com]/var/www/html/dd/../sql.conf,于是发生了目录穿越

若改为alias /var/www/html/dd,删除了最后的斜杠,替换之后为[http://test.com]/var/www/html/dd../sql.conf,访问会出错,不会出现穿越漏洞

 

危害程度:

1、实测发现仅能向上穿越一级目录,且可能跳出文档根目录(取决于alias是否指向根目录)

访问/hd../..%2f..%2ft.txt会出现400 error

2、文件内容会先解析一遍然后返回,不会出现譬如php源码泄露的问题。主要会泄露敏感的配置信息

 

意外发现

测试过程发现rewrite规则编写不当,也会导致目录穿越,如下,规则的本意是为了去掉sectest目录(与使用alias类似)

rewrite ^/sectest/?(.*)?$ /$1 last;

访问http://test.com/sectest../sql.conf,会返回服务器上/var/www/html/../sql.conf的内容

 

原因分析:

^/sectest/?(.*)?$ 匹配之后$1 = ../sql.conf,拼接之后为/var/www/html/../sql.conf(rewrite使用相对路径,从文档根目录),出现穿越

若改为^/sectest/(.*)?$  匹配/sectest/,访问会出现404,不会出现穿越漏洞

 

其他错误配置

location / { try_files $uri$args $uri$args/ /index.html; }

同样会出现目录穿越

 

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值