利用JSONP进行水坑攻击
0x00 简介
前几天安全研究者Jaime Blasco发现了在中国某些特定主题的网站被进行了水坑攻击,攻击方法有一定多样性,其中存在一些比较少见于此类型攻击中的技术,不过其实是比较早的技术了,国内猥琐流已经玩了很久的玩意。攻击类型的多样性在于,该安全公司并非追踪到了某个攻击组织的多次活动,而是某个特定主题网站的多次攻击。
比如参考1,发送Microsoft Office .doc利用MS09-027来打苹果电脑,虽然我认为他们可能没打到啥东西。除此之外的攻击事件还可以参考2, 3。
这次的攻击方式总结起来就是 当受害者访问网站a时会处罚恶意代码,之后恶意代码会去访问某些存在可获取私人信息接口的网站,获取信息后再上传至c2。下面是该安全公司统计的恶意代码获取信息的网站,总的来说应该是以中国地区的用户为目标的一次行动,这年头会上这些网站的老外不多了。
至于提到的玩烂了,乌云上有记录的分析最早是剑心boss 2012年发布的 《Json hijacking/Json劫持漏洞》参考文献4 以及2014 年zone社区的两篇相关文章以及利用文章。可看参考5,6。
0x01 原理 & 攻击分析
总结来说js会通过某种方式获取数据来方便用户的交互,这种获取数据的方式有一些通用的格式,这里就是json or jsonp。一般js会通过两种方式获取数据。一种是xmlhttp还有一种是script的形式。
xmlhttp的数据获取方式只有在同一个域的情况下才可以获取,不然会遭受同源策略的限制,但是如果数据位于两个不同的域名,那么只有通过script的方式进行获取,通过script的方式先传入一个callback,那么数据就会被传入的函数执行。这样就不会遭到同源策略的限制。
<script>
function wooyun_callback(a){
alert(a);
}
</script>
<script src="http://www.wooyun.org/userdata.php?callback=wooyun_callback"></script>
这次其实就是在目标网站群上插入通过此类型的接口获取信息的代码,再获取目标的私人信息。老外给了几张恶意代码的截图。
1 利用代码,通过某种方式在受害者访问的网站嵌入
2 通过callback获取响应数据
3 解析响应数据
老外提到了一个中国安全博客 代码风格有点像。这里大概原理已经解释的差不多了。
0x02 利用代码 & 案例
关于这方面就是jacks写的《JSON探针—定位目标网络虚拟信息身份》参考5 和 xiaoxin在此之上扩展的 《jsonp探针callback地址收集帖》参考6。
案例方面 可以在乌云主站搜索到需要的案例 wooyun.org
比如 http://wooyun.org/bugs/wooyun-2010-0118732 可以获取用户的购买记录等大量的隐私信息。比较有代表性的还有剑心发布的 WooYun: QQMail邮件泄露漏洞 通过qqmail的特殊接口获取邮箱内容。
<script>
var Qmail={};
</script>
<script src="http://mail.qq.com/cgi-bin/login?fun=passport&target=MLIST&t=login.js&pagesize=10&resp_charset=gb2312&1=3"></script>
<script>
alert(Qmail.newMailsList.nextUrl);
alert(document.scripts[1].src=Qmail.newMailsList.nextUrl);
alert(Qmail.newMailsList.summary);
</script>
0x03 攻击原因分析
Jaime Blasco提到攻击原因的方面,攻击出现某些特定的主题的网站,以某些少数民族以及支持自由言论的非政府组织。攻击目标以小部分群体为主,攻击的目的应该在于收集其个人的资料,其中一个原因可能在于在中国一部分网站受到gfw的拦截,但是只要使用vpn以及tor就可以正常访问,在使用某种代理的前提下收集这一部分群体的信息存在难度,那么就可以通过水坑的方式,跨域收集个人信息。
0x04 修复 & 防御 方案
- 尽量避免跨域的数据传输,对于同域的数据传输使用xmlhttp的方式作为数据获取的方式,依赖于javascript在浏览器域里的安全性保护数据。
- referer的来源限制,利用前端referer的不可伪造性来保障请求数据的应用来源于可信的地方,此种方式力度较稀,完全依赖于referer,某些情况下(如存在xss)可能导致被绕过。
- token的加入,严格来说,这种利用javascript hijacking的方式获取数据是CSRF的一种,不过较之传统的CSRF不能获取数据只能提交而言,这种方式利用javascript可以获取一些敏感信息而已。如果我们能让攻击者对接口未知,就可以实现json hijacking的防御了。利用token对调用者的身份进行认证,这种方式对于调用者的身份会要求力度较细,但是一旦出现xss也可能导致前端Token的泄露,从而导致保护失效。
- 对于同域的json使用情况下,可以在数据的输出头部加入while(1);的方式避免数据被script标签的方式引用,这可以防止一些比较有特性的浏览器里导致的数据泄漏。
此外老外还提到了
- 使用CORS代替jsonp
- 不要在使用cookie的情况下使用jsonp交换数据
大概就这样,其中提到了独裁之类的玩意我就不说了。
参考文献
(1] https://www.alienvault.com/open-threat-exchange/blog/cyber-espionage-campaign-against-the-uyghur-community-targeting-macosx-syst#sthash.fHOjOceQ.dpuf
(2] https://www.alienvault.com/open-threat-exchange/blog/new-macontrol-variant-targeting-uyghur-users-the-windows-version-using-gh0s
(3] https://www.alienvault.com/open-threat-exchange/blog/latest-adobe-pdf-exploit-used-to-target-uyghur-and-tibetan-activists
(4] http://drops.wooyun.org/papers/42
(5] http://zone.wooyun.org/content/16828
(6] http://zone.wooyun.org/content/16309
(7] https://www.alienvault.com/open-threat-exchange/blog/watering-holes-exploiting-jsonp-hijacking-to-track-users-in-china
利用JSONP进行水坑攻击的更多相关文章
- Red Team 工具集之网络钓鱼和水坑攻击
来自:信安之路(微信号:xazlsec),作者:myh0st 参考项目:https://github.com/infosecn1nja/Red-Teaming-Toolkit 上图是一个 Red Te ...
- 在ASP.NET MVC3 中利用Jsonp跨域访问
在ASP.NET MVC3 中利用Jsonp跨域访问 在信息系统开发的时,根据相关业务逻辑难免会多系统之间互相登录.一般情况下我们需要在多系统之间使用多个用户名和密码.这样客户就需要在多个系统之间重复 ...
- 解决AJAX跨域:1、利用JSONP;2、JS设置Header
一.利用JSONP: 首先来看看在页面中如何使用jQuery的ajax解决跨域问题的简单版: $(document).ready(function(){ var url='http://localho ...
- MDNS的漏洞报告——mdns的最大问题是允许广域网的mdns单播查询,这会暴露设备信息,或者被利用用于dns放大攻击
Vulnerability Note VU#550620 Multicast DNS (mDNS) implementations may respond to unicast queries ori ...
- 风炫安全web安全学习第三十三节课 文件包含漏洞基础以及利用伪协议进行攻击
风炫安全web安全学习第三十三节课 文件包含漏洞基础以及利用伪协议进行攻击 文件包含漏洞 参考文章:https://chybeta.github.io/2017/10/08/php文件包含漏洞/ 分类 ...
- 利用JSONP实现跨域请求
前言:有时候一忙起来就没了时间观念,原来我已经有十多天没写博客了.一直想做跨域方面的尝试,无奈最近准备校招没时间动动手.今天就先讲讲JSONP吧,昨晚还在研究QQ空间日志里面网络图片的问题呢,我发现日 ...
- jQuery中利用JSONP解决AJAX跨域问题
写在前面 跨域的解决方案有多种,其中最常见的是使用同一服务器下的代理来获取远端数据,再通过ajax进行读取,而在这期间经过了两次请求过程,使得获取数据的效率大大降低,这篇文章蓝飞就为大家介绍一下解决跨 ...
- 利用Jsonp实现跨域请求,spring MVC+JQuery
1 什么是Jsonp? JSONP(JSON with Padding)是数据格式JSON的一种"使用模式",可以让网页从别的网域要数据.另一个解决这个问题的新方法是跨来源资源共享 ...
- Web前端安全之利用Flash进行csrf攻击
整理于<XSS跨站脚本攻击剖析与防御>—第6章 Flash在客户端提供了两个控制属性: allowScriptAccess属性和allowNetworking属性,其中AllowScrip ...
随机推荐
- python(4) 小程序-异步加载
注:处理异步加载需要模拟浏览器登陆,然后用import json,用loads解析 例如:
- SteamVR Unity工具包(VRTK)之概览和控制器事件
快速上手 · 克隆仓库 git clone https://github.com/thestonefox/SteamVR_Unity_Toolkit.git · 用Unity3d打开SteamVR_ ...
- laravel加入验证码类几种方法 && Laravel引入第三方库的方法
1,使用require , inlcude 的方法将验证码类文件包含进来,再进行new 2,将验证码类文件放于Http目录下面,也就是和控制器controller放在一个目录下面,在验证码类文件中加上 ...
- Java多线程之简单的线程同步实例
数据类: package Thread.MyCommon; public class Data { public int num = 0; public synchronized int getEve ...
- DSS 搭建手机流媒体服务器
最近研究了一下手机流媒体服务器的搭建,目的是实现通过3G手机看在线视频. 开始的时候研究了一下 Tudou手机版 ,可它哪并没有实现在线播放,因为视频地址是 http 协议的.参看了许多文章,终于了解 ...
- eclipse快速收缩展开代码
快速折叠所有代码和展开所有代码都是CTRL+SHIFT+/
- Hibernate注解:一对多外键关联
情形:两个表,cms_mode是主表,cms_model_field是子表,cms_model_field的model_id字段关联到cms_model的主键. # # Source for tabl ...
- WPF更新数据源
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windo ...
- Winista.Text.HtmlParser; 获取html
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...
- MySQL数据的主从复制、半同步复制和主主复制详解-转
一.MySQL复制概述 ⑴.MySQL数据的复制的基本介绍 目前MySQL数据库已经占去数据库市场上很大的份额,其一是由于MySQL数据的开源性和高性能,当然还有重要的一条就是免费~不过不知道还能免费 ...