nginx 反代 tomcat 后, url 带斜杠出现源码下载漏洞 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
FONG2
V2EX    NGINX

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

  •  
  •   FONG2 2022-02-08 15:42:36 +08:00 via iPhone 6903 次点击
    这是一个创建于 1391 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    第 1 条附言    2022-02-08 16:31:34 +08:00
    追加内容 5 ,8 ,9 ,11 楼
    44 条回复    2022-02-11 01:01:24 +08:00
    learningman
        1
    learningman  
       2022-02-08 15:44:36 +08:00
    把你 nginx 配置发出来吧
    themostlazyman
        2
    themostlazyman  
       2022-02-08 15:44:39 +08:00
    贴下 nginx 配置吧,感觉没配置对。
    julyclyde
        3
    julyclyde  
       2022-02-08 15:48:27 +08:00   1
    你确定是反代?是不是 nginx 直接 root 到同一个目录去了?
    undeflife
        4
    undeflife  
       2022-02-08 15:50:36 +08:00
    看起来是直接把 root 设置到了 tomcat 的 webapps 目录
    FONG2
        5
    FONG2  
    OP
       2022-02-08 1:02:17 +08:00
    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;
    }
    FONG2
        6
    FONG2  
    OP
       2022-02-08 16:03:37 +08:00
    learningman
        7
    learningman  
       2022-02-08 16:05:12 +08:00
    不是这里,问题可能处在上面的 root 那里
    FONG2
        8
    FONG2  
    OP
       2022-02-08 16:06:43 +08:00
    访问 nginx http://host/abc/a.jsp/ 弹下载提示 能下载源码
    访问 tomcat http://host:8080/abc/a.jsp/ 显示 404
    nginx 版本 1.21.6
    tomcat 8.5.63
    FONG2
        9
    FONG2  
    OP
       2022-02-08 16:10:35 +08:00
    @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
        10
    ThirdFlame  
       2022-02-08 16:24:42 +08:00
    能下到 a.jsp 的源代码? 你确实不是 html 而是源代码?
    FONG2
        11
    FONG2  
    OP
       2022-02-08 16:28:47 +08:00 via iPhone
    @ThirdFlame yes
    <%@ page...
    <% request.setxxxxx%>
    都能看到,就是 jsp 源码
    skiy
        12
    skiy  
       2022-02-08 16:48:25 +08:00
    在服务器直接 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
        13
    FONG2  
    OP
       2022-02-08 17:07:35 +08:00 via iPhone
    @skiy curl 是下载 也可以看到<%代码%>
    eason1874
        14
    eason1874  
       2022-02-08 17:18:25 +08:00
    a.jsp 是文件名?如果是,这种情况应该是 Nginx 没把 a.jsp/ 请求转发给 Tomcat 处理,而是当作文件下载请求返回文件内容
    FONG2
        15
    FONG2  
    OP
       2022-02-08 17:22:31 +08:00 via iPhone
    @eason1874 那怎么解决?而且我在 access.log localhost_xxlog 查不到访问记录
    qq1340691923
        16
    qq1340691923  
       2022-02-08 17:26:04 +08:00
    jsp 而已,有什么慌的
    skiy
        17
    skiy  
       2022-02-08 17:41:08 +08:00
    @FONG2 若在你服务器中 CURL 实际地址也是下载,那就不是 NGINX 的问题了吧。若是只有反代的地址是下载,才是 NGINX 的问题。反代没涉及到下载的,是不是你 NGINX 的配置问题?可以试试的上面发的那串(需要重启 NGINX )
    eason1874
        18
    eason1874  
       2022-02-08 17:48:24 +08:00
    @FONG2 让后端给请求打日志,然后访问了看日志就知道请求有没有到后端了。请求没有到后端就是反代配置问题
    Chism
        19
    Chism  
       2022-02-08 17:50:14 +08:00
    我的 nginx 把版本从 1.21 换到 1.19 ,竟然导致 domain 前端调用 domain/的 api 报跨域
    gengchun
        20
    gengchun  
       2022-02-08 18:36:41 +08:00
    见过太多离谱的部署了,不评价 OP 。

    @Chism 确认一下 ngx 编译参数,可能是配置路径问题导致用了不正确的配置。
    keepeye
        21
    keepeye  
       2022-02-08 18:43:37 +08:00
    location / {
    return 403;
    }

    测一下有没有走到里面
    adoal
        22
    adoal  
       2022-02-08 18:49:12 +08:00
    nginx 没配 root 也有个默认 root 的,也许就是跟 tomcat 一起了呢
    jptx
        23
    jptx  
       2022-02-08 18:51:58 +08:00
    强烈怀疑问题出在 Tomcat 及应用里,可能某个配置导致 Tomcat 直接按普通资源文件来处理 jsp 文件了,并没有走 jsp 的解析逻辑
    lower
        24
    lower  
       2022-02-08 20:08:00 +08:00
    你 tomcat 里面跑了多少项目啊?反代到 tomcat 根路径就好,简简单单的最不容易出问题,否则相对路径映射来映射去的就会出莫名其妙的问题
    项目多就跑多个 tomcat 进程,用端口来区分明明白白的
    zanelee
        25
    zanelee  
       2022-02-08 21:02:02 +08:00
    为什么要 location /abc {};然后再 http://1.1.1.1:8080/abc;
    直接这样不行吗?那个 abc
    location ^~ /abc {
    ...
    proxy_pass http://1.1.1.1:8080;
    }
    FONG2
        26
    FONG2  
    OP
       2022-02-08 21:45:35 +08:00 via iPhone
    @skiy curl ng 地址是下载 curl tomcat 地址是 404
    FONG2
        27
    FONG2  
    OP
       2022-02-08 21:46:27 +08:00 via iPhone
    @jptx 直接访问 tomcat 地址没有问题呢 a.jsp/报 404
    FONG2
        28
    FONG2  
    OP
       2022-02-08 21:49:08 +08:00 via iPhone
    @zanelee
    @lower tomcat 就一个应用,abc.war
    tomcat 访问地址就是 1.1.1.1:8080/abc
    FONG2
        29
    FONG2  
    OP
       2022-02-08 21:51:07 +08:00 via iPhone
    @adoal 那我明天配个 root 看看
    FONG2
        30
    FONG2  
    OP
       2022-02-08 22:01:14 +08:00
    @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
        31
    itechify  
    PRO
       2022-02-08 22:37:53 +08:00 via Android
    先 curl 到 1.1.1.1:8080/abc/a.jsp/ 看是 404 还是下载源码。如果 404 ,tomcat 不背这个锅。下载源码的话,nginx 配置错了,上层 root 静态资源配置到 tomcat 去了?
    FONG2
        32
    FONG2  
    OP
       2022-02-08 23:27:24 +08:00 via iPhone
    @oneisall8955 先 curl 到 1.1.1.1:8080/abc/a.jsp/ 这个是 404
    nginx Server 没配 root 地址,准备明天配一个看看
    GuuJiang
        33
    GuuJiang  
       2022-02-09 00:08:37 +08:00 via iPhone
    最简单的排查方法,让 tomcat 和 nginx 跑在不同的机器上,如果不能复现,说明就是 nginx 把 jsp 当成静态资源了,与反代无关
    skiy
        34
    skiy  
       2022-02-09 00:16:06 +08:00 via iPhone
    @FONG2 看我 12 楼的例子。这是我能跑的反代。另外,我记得 root 好像要必配的。你配置好时,有尝试 nginx -t 了没?有 reload 或者 restart nginx 了没?

    感觉你配置得有问题。
    xiaoDevil
        35
    xiaoDevil  
       2022-02-09 00:29:31 +08:00
    @FONG2 可以试试把 tomcat 关了,请求 nginx/a.jsp/ 看看能不能下载, 还能下载就说明不是 tomcat 的事,nginx 配置的有问题,然后再依次检查 nginx 的配置
    ipwx
        36
    ipwx  
       2022-02-09 00:33:18 +08:00   1
    35L 的方法好,先把 tomcat 关了看能不能访问 .jsp 的代码
    Beebird
        37
    Beebird  
       2022-02-09 01:05:24 +08:00
    赞同 25 楼说的,http://1.1.1.1:8080/abc 这样不对,可能会导致 uri (/abc/a.jsp) append 到 /abc 后面
    lolizeppelin
        38
    lolizeppelin  
       2022-02-09 10:53:47 +08:00
    nginx rpm 版的默认 root 是 /usr/share/nginx
    elevioux
        39
    elevioux  
       2022-02-09 12:06:58 +08:00   1
    很可能只是配置错了,nginx 根本没有把请求给到后端,直接当作静态文件给下载了
    lupohan44     40
    lupohan44  
       2022-02-09 13:36:07 +08:00
    @FONG2 #26 清除浏览器缓存试试?
    encro
        41
    encro  
       2022-02-09 13:52:36 +08:00
    能下载源码,就是因为 nginx 规则没有匹配上,走了其他规则了,应该是你的 root 设置错了,将 root 设置到 public 目录上试试。
    encro
        42
    encro  
       2022-02-09 13:57:07 +08:00
    nginx 配置好后重启(-s reload )前,
    需要 -t 测试一遍,
    否则会走上次成功的配置!!!
    FONG2
        43
    FONG2  
    OP
       2022-02-10 16:14:19 +08:00 via iPhone
    @xiaoDevil
    @ipwx
    @lolizeppelin
    @elevioux
    @encro
    最新发现,关了 tomcat 还能下载!页面访问不了,后面加斜杠还是可以下载!
    root 加上了,nginx 重启过了
    无效…
    ipwx
        44
    ipwx  
       2022-02-11 01:01:24 +08:00
    换个 http 服务器比如 caddy 如何
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5316 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 41ms UTC 07:16 PVG 15:16 LAX 23:16 JFK 02:16
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86