点击一张图片背后的风险
作者:admin | 时间:2016-10-12 02:13:47 | 分类:黑客技术 隐藏侧边栏展开侧边栏
你相信吗?仅仅是因为你点击了某个你一只在访问网站里的一张图片,导致你的用户名、密码泄漏,甚至电脑被植入病毒。这一切可不仅仅是危言耸听。
利用的方法来源于一个算不上漏洞的漏洞 。Freebuf 曾经也报道过(链接地址中的target=”_blank”属性,为钓鱼攻击打开了大门),但这个“漏洞”至今还是可以利用。这篇文章,让我们实际运用一下这个漏洞,来实现钓鱼。
攻击原理
我们先来看看这一攻击是如何实现的,主要的原因是带有target=”_blank”属性的标签,如下面的代码
<a target="_blank" href="http://XX.XX "> HELLO</a>
看起来没什么问题,实际上,如果用户打开该网站,而该网站又正好有一段这样的代码
<script> if(window.opener){ window.opener.location = "http://google.com ";
} </script>
那当你打开,并且载入后,原来的网站将会自动跳转到Google。
思路
众所周知,目前很多网站,包括一些个人博客。都有提供评论,或者留言的功能,有一些还支持调用外部图片在本站显示。我们正好可以利用这一点来实现我们所希望的功能。
首先,我们要准备一张图片,这里用一段代码的图片来演示,但为了提高钓鱼的成功率,我们要做一点小修改,比如修改下它的大小。
看起来非常模糊,很多时候都会忍不住,点击打开查看。毕竟,“点击查看大图”这一功能已经深入人心了!评论区显示图片的代码如以下的样子。
在评论区里看到的图片应该是下面这个样子
但当你忍不住打开图片的时候,就会发生神奇的事情
当你打开后,确实能看到原来那张图片的放大版。但与此同时,原来那个网页却正在悄悄的改变……
这里为了更加直观,我们使用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’]来判断是否是浏览器访问。
接下来,只需要几行简单的代码,就能把这个功能写出来
第一步,判断$_SERVER[‘HTTP_ACCEPT’]前5个字符,是否为image,如果是,则跳转到freebuf-test-l.png这个图片,如果不是则说明是通过浏览器访问,那就执行我们之前说的JS代码。
好啦!用几行简单的代码,一个钓鱼图片就建立起来了。我们接下来要优化一下URL。毕竟你外链一个XX.XX/index.php 肯定会引起别人怀疑。一般来讲我们可以用一下伪静态来实现访问/XX.jpg但实际上却是访问/XX.php的功能。但是我这里是用一个免费空间来测试,而这个空间并不支持伪静态。那不如让我们转个弯——用文件夹来实行“伪静态”。
在程序目录建立一个/t.jpg 的目录
新建一个index.php 文件
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博客等网站批量的尝试,可控性、隐蔽程度都非常高。并且,这个漏洞甚至可以运用来做显示广告赚取佣金,不仅能批量发,还能避免被发现。
BTW,貌似freebuf后台的投稿界面里好像也可以添加外链图片 (逃
* 本文原创作者:mscb