路径差异化可能引发一些安全问题

Posted by bfpiaoran on April 24, 2019

终于搞明白了 xx有些机器是 jetty容器+nginx做反向代理

jetty容器webapps目录下有n个目录或者n个war服务

然后通过nginx解析域名 映射到对应的目录下
根据中间件解析的差异化 nginx不解析 /..;/ 但是jetty 可以利用/..;/ 来进行跨目录

所以导致产生一种情况 test.xxxx.com/..;/ 可以访问到nginx后面jetty的根目录 从而访问其他服务

先模拟场景复现

 

nginx配置

 

 38 upstream jettyserver2 {
 39     server 127.0.0.1:8080;
 40         }
 41 
 42 
 43     server {
 44         listen       80 ;
 45         #listen       [::]:80 default_server;
 46         server_name  test.cuijianxiong.top;
 47 #root         /root/tool/jetty-distribution-9.4.17.v20190418/webapps/test/ttt;
 48 
 49         # Load configuration files for the default server block.
 50         include /etc/nginx/default.d/*.conf;
 51 
 52         location / {
 53             proxy_pass http://jettyserver2/test/bug/ ;
 54         }
 55 
 56 
 57         }

默认路由访问http://test.cuijianxiong.top  会映射到  http://127.0.0.1:8080/test/bug这个目录  如果我想访问上一层目录的话是没办法的 如果nginx配置没问题的话

 

 

这里就出现了个问题  nginx是不解析 /..;/的 但是jetty默认解析/..;/造成路径遍历

那么完全可以构造一个请求  http://test.cuijianxiong.top/..;/

会有什么结果呢

 

跨目录读取