. 概述
上段时间一直忙于处理大会安全保障与应急,借助公司云悉情报平台,发现并处置几十起网站被劫持的情况。对黑客SEO技术颇有感觉。正好这段时间有时间,把以前遇到比较有趣的案例和大家分享一下。里面很多技术其实早已被玩透,只是网上搜了一下并无太多这方面的介绍。所以在这里共享一下相关的案例,案例主要分享一下思路。
1.1 原理
网站劫持是一个相对古老的技术,主要是黑帽用来做SEO用。实现网站劫持如果以下步骤:
1. 入侵相关网站2. 然后在网站中插入JS或修改其配置文件,增加相应的劫持代码。另外一般会加入判断条件,判断条件一般会根据user-agent或referer进行判断。大多数判断条件会判断是爬虫还是人工,如果是人工会返回正常的网站;如果是爬虫,会返回相关博彩、娱乐类等黑客设置好的网站3. 人工访问时,会显示正常网站。但是爬虫去访问时,返回是相关博彩、娱乐类网站,导致收录的却是黑客精心准备好的网站4. 黑帽SEO基本上都是给爬虫收录的,对于正常的人工访问会返回正常的内容,所以导致这种网站很难发现、并且其存留时间相对较长 1.2 跳转判断
下面通过在实际工作中遇到的JS脚本来阐述JS劫持来实现跳转的方法。该JS脚本综合运用了判断IP归属地、UA、referer来进行跳转判断。
1.2.1 判断IP归属地
判断远程IP的归属地,如果远程IP为安徽省或北京,则会直接跳转到http://www.anhui365.net/404.html这个页面;归属地不为安徽或北京的话则会跳转到博彩站点http://m.an888.top/
var jump_myt=setInterval(function(){ if(remote_ip_info) { clearInterval(jump_myt); if(remote_ip_info.province=='安徽' ||remote_ip_info.province=='\u5b89\u5fbd'||remote_ip_info.city=='\u5317\u4eac'||remote_ip_info.city=='北京') { window.location.href='http://www.anhui365.net/404.html'; } else{ window.location='http://m.an888.top/'; } }
1.2.2 判断referer
若referer关键字为:baidu、google、yahoo、bing、soso、360等搜索引擎爬虫,当爬虫去访问时会调用browserRedirect()函数。browserRedirect()函数主要用来实现跳转判断。
function go_bots_url(){ var init_flag="93989", bct=document.referrer, bot=['baidu', 'google', 'yahoo', 'bing', 'soso', 'sogou', '360.cn', 'so.com','youdao', 'anquan', 'sm.cn', 'haosou']; for (var iin bot) { if(bct.indexOf(bot[i]) !=-1) { init_flag="1245"; browserRedirect(); } } if(init_flag=="93989"){ call_init_error(); }
1.2.3 判断user-agent
如果相应的user-agent匹配关键字ipad、iphone os、midp、ucweb、android等移动端设备时则会跳转到http://m.an888.top/这个博彩站点
function browserRedirect() { var sUserAgent=navigator.userAgent.toLowerCase(); var bIsIpad=sUserAgent.match(/ipad/i)=="ipad"; varbIsIphoneOs=sUserAgent.match(/iphone os/i)=="iphone os"; var bIsMidp=sUserAgent.match(/midp/i)=="midp"; var bIsUc7=sUserAgent.match(/rv:1.2.3.4/i)=="rv:1.2.3.4"; var bIsUc=sUserAgent.match(/ucweb/i)=="ucweb"; var bIsAndroid=sUserAgent.match(/android/i)=="android"; var bIsCE=sUserAgent.match(/windows ce/i)=="windows ce"; var bIsWM=sUserAgent.match(/windows mobile/i)=="windows mobile"; if (bIsIpad ||bIsIphoneOs || bIsMidp || bIsUc7 || bIsUc || bIsAndroid || bIsCE || bIsWM) { window.location.href='http://m.an888.top/'; } else { window.location='http://m.an888.top/'; } }
这是一个比较经典的JS判断条件,综合判断IP地址、user-agent、referer。黑客入侵相应的网站后只需要把在网站中加入引用的JS相关网站即可,一般都是直接在相关调用页面,如index.php这种页面中直接插入下面的代码
1.3 表现
当网站被黑客入侵并作为SEO使用时,一般的表现是通过人工访问并无法直接打开,需要通过改变浏览器的user-agent及referer时才可以重现相应的劫持页面。页面被劫持一般表现是下面这样子的:
劫持案例-1(植入寄生虫程序)
劫持案例-2(插入推广内容)
劫持案例-3(打开页面跳转到博彩网站)
2. 前端劫持案例
2.1 原理
前端劫持一般都是在网站的相应页面中插入JS脚本,通过JS来进行跳转劫持。
2.2 表现与检测
前端劫持的话浏览器会执行相应的JS脚本,因此我们可以通过抓包来进行检测相应的JS脚本。可以使用burpsuite、fiddler、wireshark等工具来抓包进行分析与检测。另外也可以打开相应的页面分析其源码来进行判断,通过源码找出所有加载的JS脚本,然后再对JS脚本进行分析。
2.3 案例
一网站发现其打开时会跳转到博彩网站,对其源码进行分析,发现其页面被插入一段JS代码,导致其打开时会跳转到博彩站点。
3. 服务器端劫持案例
3.1 原理
服务器端劫持也称为后端劫持,其是通过修改网站动态语言文件,如global.asax、global.asa、conn.asp、conn.php这种文件。这些文件是动态脚本每次加载时都会加载的配置文件,如访问x.php时会加载conn.php。这样的话,只需要修改这些全局的动态脚本文件(如global.asax),访问所有的aspx文件时都会加载这个global.asax文件,可以达到全局劫持的效果。
3.2 表现与检测
因为这种文件是在服务器上执行的,因此不像前端劫持那样可以分析加载的恶意JS脚本。其需要在服务器上进行分析。一般检测都是要检测全局脚本文件,分析其是否被恶意修改。这种文件一般情况下不会经常修改,因此可以使用文件完整性进行检测。初次配置好了以后生成其MD5或HASH值,并且周期性对比其MD5值是否变化。若变化则进行变化内容的分析与检测。
3.3 案例
发现一政府网站上存在较多博彩类链接。但是对其源码与抓包分析,都没发现可疑JS脚本。这样的话肯定是在服务器端做劫持的。
于是远程连接其服务器,其网站使用aspx开发,找到其aspx全局加载的文件global.asax。分析其源码,发现存在被修改,增加了爬虫判断条件,若为爬虫访问,则直接跳转到相应的博彩网站。
针对服务器端的劫持,找到相应的插入的代码。直接将其删除,或者使用备份的文件进行覆盖。但是这样并不能真正解决问题,一般情况下global.asax这种文件被修改,基本上说明黑客已经入侵到相应服务器。因此需要做全面的应急响应,分析日志、查杀webshll、系统层、应用层全面的安全检查。找到黑客是如何入侵进来的并且修复相应的漏洞这样才能真正解决此类问题。
4. 比较奇葩的服务器劫持案例
一般情况下,如果是服务器端的劫持通过上面的方法基本上可以找到黑客插入或修改的源码部分。但是昨天遇到一起比较奇葩的服务器劫持案例。通过源码与抓包分析判断黑客是在服务器端做的劫持,但是相应的分析全局文件找了很长时间就是没有找到黑客在什么地方插入劫持代码的。
一政府站使用爬虫UA打开就是相应的寄生虫模板,直接分析其index.php文件,发现其只是调用了另外一个文件。文件的路径为:/phpcms/base.php
找到base.php,由于其源码比较多。分析其源码找了好久就是没有找到劫持所用的代码,后来经同事协助,花了好长时间才找到黑客进行劫持所有的代码。base.php其中直接加载了公用的函数库,其加载了如下函数:
@include(PACK(‘H*’,’443A5C7765625C6C79715C75706C6F616466696C655C323031375C303232315C31′));
Php的pack函数功能如下:
@include(PACK(‘H*’,’443A5C7765625C6C79715C75706C6F616466696C655C323031375C303232315C31′));其中:
H代表16进制
443A5C7765625C6C79715C75706C6F616466696C655C323031375C303232315C31表示相应的参数,需要将其进行转换。
转换后,其内容为\web\lyq\uploadfile1721,也就是说base.php使用include的Pack函数调用了\web\lyq\uploadfile1721这个文件。找到这个文件,分析其源码,果然找到了黑客用户进行劫持所调用的文件。
这个案例还是比较奇葩的,其实实现方法也是在服务器端进行劫持的,只是其使用函数来加载相应的劫持脚本。并且这个劫持的脚本放在一个上传的目录上,所以导致分析起来中间有些麻烦。针对这种劫持的情况个人感觉相对较好的处置方法就是对关键性的文件,如index.php、global.asax、conn.php等生成基线MD5及HASH值,然后周期性的对比这些文件完整性,如发现文件完整性发生变化,将其与基线文件进行比较。分析是否为正常变化。
目前黑帽做SEO除了上面的外,还有植入JS来挖矿的。不过挖矿在实际工作中只在服务器上遇到被植入挖矿程序,自己并没有遇到过在网站中植入JS来挖矿。网上看到有遇到过植入JS来进行挖矿的,所以网站页面代码中的JS也是网站安全分析的重点。后期云悉情报平台会加入恶意JS的识别与分析,遇到相关案例时再和大家分享。
日,就河南林州农民工讨薪而引发的暴力冲突事件,当地政府部门给本网传来信息称,所拖欠农民工工资已几乎全额发放,引发本起事件的相关责任人均受到相关惩处。绿能天然气公司与林州“二建”的矛盾正在逐步化解。当记者就此结果向当地知情者寻求印证时,却听到了不同的声音。是林州“二建”的李志生倾其家产在为农民工发放工资。迄今为止,绿能天然气公司所欠林州“二建”的70万元工程款仍遥遥无期。为此,深受其害的李志生倾家荡产,整日精神恍惚,在亲人的误解责骂声中痛不欲生!
因为事关重大,记者对此事再度进行了解,经过几天的明察暗访,一些不为人知的真相渐渐浮出水面。据林州当地百姓反映,绿能天然气有限公司的实际当家人“徐某”,其麾下有着很多颇有名气,却不见有任何经营业绩的公司。这些公司的主要功能就是用来融资,然后用融来的资做些见效更快的投资项目。在林州一地可谓是谈“徐”色变。徐某本人旗下公司多次因拖欠工程款而发生纠纷,而每次均能化险为夷,类似于李志生这样的小包工队欠款现象更属司空见惯。采访中了解到,徐某多处圈占土地,并将以各种名目租来的耕地随意使用,肆无忌惮地为己所用。本起暴力冲突发生所在地,即为徐圈占后闲置不用的一处库房。一旦因经济纠纷发生了冲突,徐即派遣长期雇佣的社会闲散人员大打出手。然后徐利用其本人特殊的社会地位上下打点,力求自保。久而久之,林州市民听到徐某后都会胆颤心寒,用徐某本人的话来说,“林州敢动我的人还没生出来呢,就是在安阳也没人能奈何得了我!”气焰之盛,可窥一斑。
据林州市宣传部高某说,最终当地警方将本起暴力冲突定性为“互殴”。可一位现场目击者反映,事发当场,首先发难的人均手持没有捋掉塑料套的臂力健身棒,而且均是外地口音。而据另一位讨薪者说,我们当时手无寸铁,可他们却是手持械具,显然是有备而来呀,再说了,一个仓库有卸健身棒的吗?而且用得着二十多个人吗?!更多安阳林州姚村镇的人则说,徐某就是本镇人,纯粹一个“坐地虎”,连他们本家亲属朋友都不愿意搭理。因为徐某本人蛮横不讲理已到了人人惊惧的地步。
当记者就徐某多处非法圈占土地,并随意更改土地使用性质一节向林州市委宣传部高科长寻求合理性答复时,高说要向领导汇报后予以答复。截至记者发稿时,林州政府官方仍音讯全无。就此事件,记者将作更进一步的落实与报道。本网纯属转载 转载来源http://www.myxxg.net/html/news/view8302.html
译 | 朱先忠、诺亚
日前,微软推出了.NET 7的生产版本。据悉,.NET 7基础设施现在可用于Windows、macOS和Linux,这次版本的更新带来了性能增强、C#语言升级以及一系列基于容器的云原生开发功能。
本次发行的关键主题包括让开发人员能够编写高性能的Web API,构建云原生应用程序并在Linux上进行部署,还特别强调提升开发人员的生产力和项目的容器化支持,以及在GitHub操作中设置CI/CD工作流等等。
从11月8日起,全球程序员即可从地址(https://dotnet.microsoft.com/en-us/download/dotnet/7.0)处获取分别针对Windows、Linux和macOS的.NET 7的生产版本。
截图@微软官网
.Net 7是微软.Net统一之旅中的第三个主要发行版本。借助.NET 7,开发人员可以通过一次性学习一个SDK、一个运行时和一组基础库实现技能重用,从而开发出包括云端、Web、桌面、移动、人工智能和物联网等多平台的各类应用程序。
对于C#11语言而言,其目标是使开发人员能够编写更少的代码。.NET 7在通过对象初始化增强、支持原始字符串字面量和其他功能简化编码的同时,实现了泛型数学等新特性。
此外,其他亮点还包括:
另外值得注意的是, .NET 7与ASP.NET Core、Entity Framework,以及 .NET MAUI(多平台应用程序UI)、Windows Forms、Windows Presentation Foundation和用于构建分布式应用程序的Orleans 7框架等一起发行。同时,对于Blazor Web应用程序开发工具,.NET 7改进了WebAssembly调试体验,并支持针对位置改变这种事件的处理。
其中,.NET MAUI被视为 .NET跨平台原生UI的未来,于9月初次亮相。但彼时曾有一部分开发者对此表示不满,因为他们不相信该技术已经完全成熟。而在.NET 7中,可以看到,.NET MAUI在桌?应?的?持有了进一步改善,对手势、桌?菜单、?标?持、右键菜单、窗体缩放都有了很好的?持。在开发体验上.NET MAUI已经可以?持iOS 16和Android 13。
在.NET 7版本正式发布之前,微软.NET团队开发者Stephen Toub专门就.NET 7的效能改进做了详细说明。微软在每个.NET版本都强调效能改进,因此也有开发者质疑,如果说 .NET 6的效能已经提升到一个程度,.NET 7是否还有效能提升的空间。
对此,Stephen Toub强调:.NET 7的速度“非常快”,Runtime和核心函数库加入了1,000个效能相关的拉取请求,而且在ASP.NET Core、Windows Forms和Entity Framework也有各种改进。他表示,这一版本将是有史以来最快的.NET。他甚至提到,当开发者被经理问到为什么要升级到.NET 7,可以直接回答“.NET 7 is super fast.”
伴随着.NET 7的发行,目前微软正在发布Visual Studio 2022 17.4 IDE。Visual Studio 2022为当前的集成开发环境引入了64位功能。在此产品发布之前,.NET 7经历了广泛的预览和发布候选阶段。.NET 8很可能会在一年内问世,预计将专注类似如现代工作负载、Web API以及更多的有关无缝云原生开发这样的主题。
新版本发布后,知乎论坛出现了这样一则问题:“.NET 7发布之后,C#有没有可能超过Java?”对此,不少开发者留下了各自的见解。
观点1:在国外.NET已经足够繁荣,但国内,很多人对C#、.NET有很大的偏见。.NET能否吃掉Java的一部分市场依旧有待商榷。从个体角度看,人均薪酬上.NET不如Java,人均就业机会上.NET大于Java。
截图@知乎
观点2:从性能上看.NET超越了Java,但是从生态上来看,Java远胜.NET,这种局面长期不会有很大改变。
观点3:自己觉得好的话就用,不用纠结超不超过的问题。这些流行语言选哪种学到一定深度, 都碾压语言差异带来的优势。
参考链接:
?https://www.infoworld.com/article/3679328/microsoft-net-7-makes-its-official-debut.html??
来源: 51CTO技术栈
*请认真填写需求信息,我们会在24小时内与您取得联系。