点击一张图片背后的风险

你相信吗?仅仅是因为你点击了某个你一只在访问网站里的一张图片,导致你的用户名、密码泄漏,甚至电脑被植入病毒。这一切可不仅仅是危言耸听。

利用的方法来源于一个算不上漏洞的漏洞 。Freebuf 曾经也报道过(链接地址中的target=”_blank”属性,为钓鱼攻击打开了大门),但这个“漏洞”至今还是可以利用。这篇文章,让我们实际运用一下这个漏洞,来实现钓鱼。

攻击原理

我们先来看看这一攻击是如何实现的,主要的原因是带有target=”_blank”属性的标签,如下面的代码
<a target="_blank" href="http://XX.XX "> HELLO</a>

看起来没什么问题,实际上,如果用户打开该网站,而该网站又正好有一段这样的代码

那当你打开,并且载入后,原来的网站将会自动跳转到Google。

思路

众所周知,目前很多网站,包括一些个人博客。都有提供评论,或者留言的功能,有一些还支持调用外部图片在本站显示。我们正好可以利用这一点来实现我们所希望的功能。

首先,我们要准备一张图片,这里用一段代码的图片来演示,但为了提高钓鱼的成功率,我们要做一点小修改,比如修改下它的大小。

 

Fs06HrEdenLg3kz8iGGJXP1An3B6.png
 

Fs06HrEdenLg3kz8iGGJXP1An3B6.png
看起来非常模糊,很多时候都会忍不住,点击打开查看。毕竟,“点击查看大图”这一功能已经深入人心了!评论区显示图片的代码如以下的样子。

 
html2.PNG
在评论区里看到的图片应该是下面这个样子

 
1.PNG
但当你忍不住打开图片的时候,就会发生神奇的事情

201610110910405
 

当你打开后,确实能看到原来那张图片的放大版。但与此同时,原来那个网页却正在悄悄的改变……

这里为了更加直观,我们使用Google来演示。在实际运用中,也许我们可以转到一个与原来网站一模一样的页面,提示用户登陆,我们甚至可以完全模拟该网站,仅仅把网站的内的下载链接篡改成自己的病毒软件。

原理实现

要实现这样的一个钓鱼图片,我们首先需要一个网络空间,这里使用php来完成这一切(世界上最好的语言,哼!)

这里的逻辑主要是判断页面请求。这些请求信息都在$_SERVER系统变量里面,所以我们首先需要找到不同方式下请求头会有什么不同。我们可以通过这一小段函数来收集一些信息,这里的意思是把$_SERVER内的内容保存至log.txt内。

file_put_contents("log.txt",print_r($_SERVER,true),FILE_APPEND);

通过对输出的log.txt进行对比,发现其中一个请求头有可以利用的地方

[HTTP_ACCEPT] => image/webp,image/*,*/*;q=0.8

[HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

通过img标签访问的是第一个,而直接通过浏览器访问的是第二个。由此可以想到通过$_SERVER[‘HTTP_ACCEPT’]来判断是否是浏览器访问。

接下来,只需要几行简单的代码,就能把这个功能写出来

 

2.PNG
 

 

2.PNG
 

第一步,判断$_SERVER[‘HTTP_ACCEPT’]前5个字符,是否为image,如果是,则跳转到freebuf-test-l.png这个图片,如果不是则说明是通过浏览器访问,那就执行我们之前说的JS代码。

好啦!用几行简单的代码,一个钓鱼图片就建立起来了。我们接下来要优化一下URL。毕竟你外链一个XX.XX/index.php 肯定会引起别人怀疑。一般来讲我们可以用一下伪静态来实现访问/XX.jpg但实际上却是访问/XX.php的功能。但是我这里是用一个免费空间来测试,而这个空间并不支持伪静态。那不如让我们转个弯——用文件夹来实行“伪静态”。

在程序目录建立一个/t.jpg 的目录

 

t.PNG
 

 

t.PNG
 

新建一个index.php 文件

 

t2.PNG
 

 

t2.PNG
 

OK!现在就能用XX.XX/t.jpg 来访问。

接下来我们要在跳转的网页上做文章了。既然要实现钓鱼的功能,那最重要的就是不能让用户发现这个网站有问题,否则怎么会乖乖的把他的用户名和密码输入进去了?同时,还要考虑到一个问题,我们来利用这个进行钓鱼并不是只针对个别的网站,对不同的网站都要适用。对此一般有以下几种思路:

1.将要跳转之前的URL通过GET传输到服务端,通过服务端对源网页进行拉取、渲染。

这样的好处有很多,比如你可以控制输出的EMAIL内容、支付信息、甚至直接替换显示的资源,给用户返回一个替换过的exe文件、pdf文档等等。缺点也不能忽视,明显能感觉到的是,速显变慢了(从目标服务器拉取到你的服务器,再从你的服务器传给客户端),尤其是2台服务器处在不同的国家。

2.同样是通过get传递url信息,但不同的是直接用HTML的iframe 。

首先用php构建html页面,在HTML里用iframe 把网页地址嵌入。然后弹窗提示用户登陆……是不是看起来很眼熟?没错就是运营商搞的那一套。这样也有好处和坏处,好处是实现简单,速度较快。坏处是控制能力不强。而且你对iframe里的内容也无可奈何,只能眼睁睁的盼望着用户乖乖的输入密码登陆。

如何避免该漏洞

对于该漏洞,网络上的报道很多,基本也都给了修复方式,我在此也不必多说,只提供几点小建议。

对网站:对每一个需要使用target=”_blank”的链接都加上 rel=”noopener noreferrer” 这个属性。同时要关注用户上传的图片,或许你应该像关注xss一样关注一下外链图片的问题。

对用户:小心!小心!再小心!关注一下你点开的链接。使用右键->在新标签中打开链接 来打开新的连接!

小结

这篇文章并不是技术文,涉及到的技术点也很少,主要在于分享一个我自己的小思路,如果有说的不对的地方还请见谅。

对于上面的一点,也许有人会有疑问。就是为什么不用HTTP_REFERER来判断来源地址,其实我最开始也是使用这个,但由于浏览器的一些安全策略,在一些浏览器(列如我的CHROME下)该值为空,也就是说浏览器不会发送该头信息。

这个漏洞,每个网站管理员都应该给予重视。就拿该图片钓鱼来讲,攻击者完全可以在各大WP博客等网站批量的尝试,可控性、隐蔽程度都非常高。并且,这个漏洞甚至可以运用来做显示广告赚取佣金,不仅能批量发,还能避免被发现。

点赞

发表回复

在发表评论前请确认您的言论中没有违反中国各项法律、法规和违背社会道德的内容。任何无意义的留言内容都会被直接删除。