nginx配置错误会导致很多安全问题,当nginx作为反向代理服务器时,错误的配置往往会导致访问全县被绕过,本文将分享4个 经典/新颖 案例,从实战出发,学习nginx配置不当导致的权限绕过问题。
系列分为 上/下篇,本文为上篇,下篇内容更加精彩,关注我们不迷路。
https://github.com/cckuailong/nginx_vultarget
1. 环境搭建
cd weblogic1/docker-compose up --build -d
2. 环境中的nginx配置
location /console/ { deny all; return 403;}
location /test { proxy_pass http://backend:7001/hello/;}
可以看到,禁止访问 /console,访问 /test 会转发到后端的weblogic服务器
P.S. 此环境weblogic未部署web服务,所以后端的 /hello 会返回404,是正常现象
3. 绕过解析
服务器配置的规则为 location /test,即/test是作为后面添加字符的前缀。因此,/test,/test/,/test_anything(包括特殊符号)都可以通过该规则。并且,/test 后面的字符将被提取并与 proxy_pass 联合(解析)起来。
Nginx处理完 /test_anything 后,其转发(到后端服务器)的请求格式为
http://server/hello/_anything
构造
GET /test../other_path HTTP/1.1
可以遍历后端服务器的所有位置
首先 /test 与Nginx规则相匹配,然后Nginx提取出 ../other_path,与proxy_pass的/hello/相结合,最终转发的请求为:
http://server/hello/../other_path
则可访问到其他目录
4. 复现
访问 /console,返回404
访问 /test,可以访问(这里没部署web服务,所以也返回404,但这个404是weblogic返回的,实际已经过了nginx转发)
Poc
/test../console
成功访问到 weblogic的console页
P.S. 使用alias配置别名目录时也会存在这个漏洞,错误配置如下
location /test { alias /hello/;}
nginx < 1.21.1
1. 环境搭建
cd gunicorn/docker-compose up --build -d
2. 环境中的nginx配置
location /public { proxy_pass http://backend:8000;}
3. 绕过解析
nginx会将传入的路径进行翻译,如传入
/aaa/bbb/../../ccc
nginx实际看到的是访问
/ccc
这个案例的Poc为
/private<TAB>HTTP/1.1/../../public
根据上面所述,nginx看到的是在访问
/public
然而gunicorn解析path时会解析成
/private<TAB>HTTP/1.1
从而访问到/private目录
4. 复现
访问/public会转发到后端的gunicorn
访问/private,由于nginx没有配置/private的转发规则,所以被nginx拦截
Poc
/private<TAB>HTTP/1.1/../../public
访问到 /private页面
https://daolgts.github.io/2019/04/08/nginx%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86/https://github.com/CHYbeta/OddProxyDemo/blob/master/nginx/demo2/nginx/project.conf
本公众号内的文章及工具仅提供学习用途,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本公众号及文章作者不为此承担任何责任。
今日关注福利
回复 “403bypass”,获取 自动化绕过401/403页面工具,包含316种bypass方式