Nginx错误配置alias导致目录遍历漏洞
本文转自BlackWolf 并作补充
0x00 前言
nginx错误配置alias,导致存在目录遍历,可跳出限制读取上一层目录及其任意子目录的文件的任意文件。
0x01 环境搭建
使用richarvey/nginx-php-fpm镜像
1 docker run -d -p 80:80 richarvey/nginx-php-fpm配置nginx,添加配置test路由解析到/var/www/html/路径(注意:/test没有结尾的/)
1
2
3
4 # /etc/nginx/sites-available/default.conf
location /test {
alias /var/www/html/;
}对应Web服务的文件结构,目标是目录遍历获取flag.txt的内容
1
2
3
4
5
6 |--var
|--www
|--flag.txt
|--html
|--index.php
|--test.txt
0x02 漏洞利用
通过访问http://127.0.0.1/test/test.txt
可以成功访问到test的内容如下(/test/test.txt路由请求,经处理后转换成:/var/www/html/test.txt):
this is a test
you get me, hahaha
0x03 小结
只能跳到上一层目录,读取上一层目录及其任意子目录的文件,不能任意目录遍历读取任意文件,有局限性。
需要nginx配置缺陷,实战情况比较有限,但是真实存在(如:参考链接3)。
一种场景是:很多网站会把备份文件放置在网页目录的上一层路径下,利用遍历读取备份文件;另一种场景是:路由限制到上传或静态图片路径,利用遍历读取上一层路径下的配置文件等。
0x04 参考链接
https://github.com/yandex/gixy/blob/master/docs/en/plugins/aliastraversal.md
https://hackerone.com/reports/317201
https://hackerone.com/reports/312510