点击一张图片背后的风险
* 本文原创作者:mscb,本文属FreeBuf原创奖励计划,未经许可禁止转载
你相信吗?仅仅是因为你点击了某个你一只在访问网站里的一张图片,导致你的用户名、密码泄漏,甚至电脑被植入病毒。这一切可不仅仅是危言耸听。
利用的方法来源于一个算不上漏洞的漏洞 。
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,本文属FreeBuf原创奖励计划,未经许可禁止转载
- Stanford机器学习笔记-3.Bayesian statistics and Regularization
- 在R中使用支持向量机(SVM)进行数据挖掘
- 【你问我答】你与Java大牛的距离,只差这24个问题
- Android漏洞扫描工具Code Arbiter
- Huawei HG532 系列路由器远程命令执行漏洞分析
- postMessage与postMessage跨域
- 【手把手教你做项目】自然语言处理:单词抽取/统计
- D-Link系列路由器漏洞挖掘入门
- 大家一直在谈的领域驱动设计(DDD),我们在互联网业务系统是这么实践的
- 在Atom中设置Python开发环境
- Kaggle赛题解析:逻辑回归预测模型实现
- Shield:支撑美团点评品类最丰富业务的移动端模块化框架开源了
- 点击块,让小块动起来 - 函数封装
- 玩玩文本挖掘-wordcloud、主题模型与文本分类
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Google Earth Engine(GEE)-谷歌地球引擎的大致Python入门
- 谷歌地球引擎(Google Earth Engine)之数据初探(栅格和矢量)
- Python-gdal离线文档下载
- 利用python把shp文件写入PostgresSQL数据库
- python调用cmd运行GDAL报错解决:ERROR 1: PROJ
- Tungsten Fabric知识库丨测试2000个vRouter节点部署
- 一行代码快速图像识别~一排代码搞定视频识别
- Python测试开发django5.urls.py参数name与<a>标签的引用
- Pytest配置文件pytest.ini
- 移植uc/OS-III最新版到小熊派开发板(STM32L431)
- phpStudy默认配置致Nginx解析漏洞复现
- HW|蓝队实战溯源反制手册分享
- 工具开发|Burp插件Unexpected_information
- 爱了!安利一个相见恨晚的可视化学习网站
- pandas+PyQt5轻松制作数据处理工具