终于搞明白了 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/..;/
会有什么结果呢
跨目录读取