› NGINX
› NGINX Trac
› 3rd Party Modules
› Security Advisories
› CHANGES
› OpenResty
› ngx_lua
› Tengine
在线学习资源
› NGINX 开发从入门到精通
NGINX Modules
› ngx_echo
FONG2
V2EX  ›  NGINX

nginx 反代 tomcat 后, url 带斜杠出现源码下载漏洞

  •  
  •   FONG2 · Feb 8, 2022 via iPhone · 7813 views
    This topic created in 1729 days ago, the information mentioned may be changed or developed.

    百度搜了一遍,tomcat 有类似的漏洞,但是我的版本已经修复。 实测直接访问 tomcat 地址 xxx.jsp/报 404 , 访问 nginx 地址 xxx.jsp/弹出下载请求,能把这个 jsp 源码下回来, 怎么破? 百度没找到相应漏洞说明, 我尝试用 rewire 屏蔽后斜杠,但是导致 xxx.com/aa/打不开了。

    Supplement 1  ·  Feb 8, 2022
    追加内容 5 ,8 ,9 ,11 楼
    44 replies  •  2022-02-11 01:01:24 +08:00
    learningman
    learningman
    Feb 8, 2022
    1
    把你 nginx 配置发出来吧
    themostlazyman
    themostlazyman
    Feb 8, 2022
    2
    贴下 nginx 配置吧,感觉没配置对。
    julyclyde
    julyclyde
    Feb 8, 2022❤️1
    3
    你确定是反代?是不是 nginx 直接 root 到同一个目录去了?
    undeflife
    undeflife
    Feb 8, 2022
    4
    看起来是直接把 root 设置到了 tomcat 的 webapps 目录
    FONG2
    FONG2
    OP
    Feb 8, 2022
    5
    location /abc {
    proxy_set_header CLIENTIP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://1.1.1.1:8080/abc;
    }
    learningman
    learningman
    Feb 8, 2022
    7
    不是这里,问题可能处在上面的 root 那里
    FONG2
    FONG2
    OP
    Feb 8, 2022
    8
    访问 nginx http://host/abc/a.jsp/ 弹下载提示 能下载源码
    访问 tomcat http://host:8080/abc/a.jsp/ 显示 404
    nginx 版本 1.21.6
    tomcat 8.5.63
    FONG2
    FONG2
    OP
    Feb 8, 2022
    9
    @learningman 这个 Server 没有配 root
    server {
    listen 80;
    server_name localhost;
    client_body_timeout 60s;
    client_header_timeout 60s;
    send_timeout 600s;
    location / {
    proxy_set_header MyClientIP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://1.1.1.1:8080/abc/;
    }
    ThirdFlame
    ThirdFlame
    Feb 8, 2022
    10
    能下到 a.jsp 的源代码? 你确实不是 html 而是源代码?
    FONG2
    FONG2
    OP
    Feb 8, 2022 via iPhone
    11
    @ThirdFlame yes
    <%@ page...
    <% request.setxxxxx%>
    都能看到,就是 jsp 源码
    skiy
    skiy
    Feb 8, 2022
    12
    在服务器直接 curl 一下看看是 404 ,还是下载?按理不应该出现这个问题才对。

    我有个配置

    index index.html index.htm default.htm default.html;
    root /data/wwwroot/default;

    location / {
    log_not_found on;
    proxy_pass http://127.0.0.1:8081/api/;

    proxy_read_timeout 300;
    proxy_connect_timeout 300;
    proxy_redirect off;

    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
    }
    FONG2
    FONG2
    OP
    Feb 8, 2022 via iPhone
    13
    @skiy curl 是下载 也可以看到<%代码%>
    eason1874
    eason1874
    Feb 8, 2022
    14
    a.jsp 是文件名?如果是,这种情况应该是 Nginx 没把 a.jsp/ 请求转发给 Tomcat 处理,而是当作文件下载请求返回文件内容
    FONG2
    FONG2
    OP
    Feb 8, 2022 via iPhone
    15
    @eason1874 那怎么解决?而且我在 access.log localhost_xxlog 查不到访问记录
    qq1340691923
    qq1340691923
    Feb 8, 2022
    16
    jsp 而已,有什么慌的
    skiy
    skiy
    Feb 8, 2022
    17
    @FONG2 若在你服务器中 CURL 实际地址也是下载,那就不是 NGINX 的问题了吧。若是只有反代的地址是下载,才是 NGINX 的问题。反代没涉及到下载的,是不是你 NGINX 的配置问题?可以试试的上面发的那串(需要重启 NGINX )
    eason1874
    eason1874
    Feb 8, 2022
    18
    @FONG2 让后端给请求打日志,然后访问了看日志就知道请求有没有到后端了。请求没有到后端就是反代配置问题
    Chism
    Chism
    Feb 8, 2022
    19
    我的 nginx 把版本从 1.21 换到 1.19 ,竟然导致 domain 前端调用 domain/的 api 报跨域
    gengchun
    gengchun
    Feb 8, 2022
    20
    见过太多离谱的部署了,不评价 OP 。

    @Chism 确认一下 ngx 编译参数,可能是配置路径问题导致用了不正确的配置。
    keepeye
    keepeye
    Feb 8, 2022
    21
    location / {
    return 403;
    }

    测一下有没有走到里面
    adoal
    adoal
    Feb 8, 2022
    22
    nginx 没配 root 也有个默认 root 的,也许就是跟 tomcat 一起了呢
    jptx
    jptx
    Feb 8, 2022
    23
    强烈怀疑问题出在 Tomcat 及应用里,可能某个配置导致 Tomcat 直接按普通资源文件来处理 jsp 文件了,并没有走 jsp 的解析逻辑
    lower
    lower
    Feb 8, 2022
    24
    你 tomcat 里面跑了多少项目啊?反代到 tomcat 根路径就好,简简单单的最不容易出问题,否则相对路径映射来映射去的就会出莫名其妙的问题
    项目多就跑多个 tomcat 进程,用端口来区分明明白白的
    zanelee
    zanelee
    Feb 8, 2022
    25
    为什么要 location /abc {};然后再 http://1.1.1.1:8080/abc;
    直接这样不行吗?那个 abc
    location ^~ /abc {
    ...
    proxy_pass http://1.1.1.1:8080;
    }
    FONG2
    FONG2
    OP
    Feb 8, 2022 via iPhone
    26
    @skiy curl ng 地址是下载 curl tomcat 地址是 404
    FONG2
    FONG2
    OP
    Feb 8, 2022 via iPhone
    27
    @jptx 直接访问 tomcat 地址没有问题呢 a.jsp/报 404
    FONG2
    FONG2
    OP
    Feb 8, 2022 via iPhone
    28
    @zanelee
    @lower tomcat 就一个应用,abc.war
    tomcat 访问地址就是 1.1.1.1:8080/abc
    FONG2
    FONG2
    OP
    Feb 8, 2022 via iPhone
    29
    @adoal 那我明天配个 root 看看
    FONG2
    FONG2
    OP
    Feb 8, 2022
    30
    @eason1874 怎么打日志?访问 nginx 地址 http://host/abc/a.jsp/ 弹下载提示 是否下载 a.jsp_ 保存后就是 a.jsp 源码,名字多了个下划线
    nginx 的日志 access.log tomcat 的日志 localhost_access_xx.txt 都没有日志记录
    要在 jsp 里面用 java 代码输出 System.out.print? 我估计也不会打日志
    itechify
    itechify
    Feb 8, 2022 via Android
    31
    先 curl 到 1.1.1.1:8080/abc/a.jsp/ 看是 404 还是下载源码。如果 404 ,tomcat 不背这个锅。下载源码的话,nginx 配置错了,上层 root 静态资源配置到 tomcat 去了?
    FONG2
    FONG2
    OP
    Feb 8, 2022 via iPhone
    32
    @oneisall8955 先 curl 到 1.1.1.1:8080/abc/a.jsp/ 这个是 404
    nginx Server 没配 root 地址,准备明天配一个看看
    GuuJiang
    GuuJiang
    Feb 9, 2022 via iPhone
    33
    最简单的排查方法,让 tomcat 和 nginx 跑在不同的机器上,如果不能复现,说明就是 nginx 把 jsp 当成静态资源了,与反代无关
    skiy
    skiy
    Feb 9, 2022 via iPhone
    34
    @FONG2 看我 12 楼的例子。这是我能跑的反代。另外,我记得 root 好像要必配的。你配置好时,有尝试 nginx -t 了没?有 reload 或者 restart nginx 了没?

    感觉你配置得有问题。
    xiaoDevil
    xiaoDevil
    Feb 9, 2022
    35
    @FONG2 可以试试把 tomcat 关了,请求 nginx/a.jsp/ 看看能不能下载, 还能下载就说明不是 tomcat 的事,nginx 配置的有问题,然后再依次检查 nginx 的配置
    ipwx
    ipwx
    Feb 9, 2022❤️1
    36
    35L 的方法好,先把 tomcat 关了看能不能访问 .jsp 的代码
    Beebird
    Beebird
    Feb 9, 2022
    37
    赞同 25 楼说的,http://1.1.1.1:8080/abc 这样不对,可能会导致 uri (/abc/a.jsp) append 到 /abc 后面
    lolizeppelin
    lolizeppelin
    Feb 9, 2022
    38
    nginx rpm 版的默认 root 是 /usr/share/nginx
    elevioux
    elevioux
    Feb 9, 2022❤️1
    39
    很可能只是配置错了,nginx 根本没有把请求给到后端,直接当作静态文件给下载了
    lupohan44
    lupohan44
    Feb 9, 2022
    40
    @FONG2 #26 清除浏览器缓存试试?
    encro
    encro
    Feb 9, 2022
    41
    能下载源码,就是因为 nginx 规则没有匹配上,走了其他规则了,应该是你的 root 设置错了,将 root 设置到 public 目录上试试。
    encro
    encro
    Feb 9, 2022
    42
    nginx 配置好后重启(-s reload )前,
    需要 -t 测试一遍,
    否则会走上次成功的配置!!!
    FONG2
    FONG2
    OP
    Feb 10, 2022 via iPhone
    43
    @xiaoDevil
    @ipwx
    @lolizeppelin
    @elevioux
    @encro
    最新发现,关了 tomcat 还能下载!页面访问不了,后面加斜杠还是可以下载!
    root 加上了,nginx 重启过了
    无效…
    ipwx
    ipwx
    Feb 11, 2022
    44
    换个 http 服务器比如 caddy 如何
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5072 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 69ms · UTC 08:33 · PVG 16:33 · LAX 00:33 · JFK 03:33
    ♥ Do have faith in what you're doing.