0x00 简介

前几天安全研究者Jaime Blasco发现了在中国某些特定主题的网站被进行了水坑攻击,攻击方法有一定多样性,其中存在一些比较少见于此类型攻击中的技术,不过其实是比较早的技术了,国内猥琐流已经玩了很久的玩意。攻击类型的多样性在于,该安全公司并非追踪到了某个攻击组织的多次活动,而是某个特定主题网站的多次攻击。

比如参考1,发送Microsoft Office .doc利用MS09-027来打苹果电脑,虽然我认为他们可能没打到啥东西。除此之外的攻击事件还可以参考23

这次的攻击方式总结起来就是 当受害者访问网站a时会处罚恶意代码,之后恶意代码会去访问某些存在可获取私人信息接口的网站,获取信息后再上传至c2。下面是该安全公司统计的恶意代码获取信息的网站,总的来说应该是以中国地区的用户为目标的一次行动,这年头会上这些网站的老外不多了。

至于提到的玩烂了,乌云上有记录的分析最早是剑心boss 2012年发布的 《Json hijacking/Json劫持漏洞》参考文献4 以及2014 年zone社区的两篇相关文章以及利用文章。可看参考56

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 修复 & 防御 方案


  1. 尽量避免跨域的数据传输,对于同域的数据传输使用xmlhttp的方式作为数据获取的方式,依赖于javascript在浏览器域里的安全性保护数据。
  2. referer的来源限制,利用前端referer的不可伪造性来保障请求数据的应用来源于可信的地方,此种方式力度较稀,完全依赖于referer,某些情况下(如存在xss)可能导致被绕过。
  3. token的加入,严格来说,这种利用javascript hijacking的方式获取数据是CSRF的一种,不过较之传统的CSRF不能获取数据只能提交而言,这种方式利用javascript可以获取一些敏感信息而已。如果我们能让攻击者对接口未知,就可以实现json hijacking的防御了。利用token对调用者的身份进行认证,这种方式对于调用者的身份会要求力度较细,但是一旦出现xss也可能导致前端Token的泄露,从而导致保护失效。
  4. 对于同域的json使用情况下,可以在数据的输出头部加入while(1);的方式避免数据被script标签的方式引用,这可以防止一些比较有特性的浏览器里导致的数据泄漏。

此外老外还提到了

  1. 使用CORS代替jsonp
  2. 不要在使用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进行水坑攻击的更多相关文章

  1. Red Team 工具集之网络钓鱼和水坑攻击

    来自:信安之路(微信号:xazlsec),作者:myh0st 参考项目:https://github.com/infosecn1nja/Red-Teaming-Toolkit 上图是一个 Red Te ...

  2. 在ASP.NET MVC3 中利用Jsonp跨域访问

    在ASP.NET MVC3 中利用Jsonp跨域访问 在信息系统开发的时,根据相关业务逻辑难免会多系统之间互相登录.一般情况下我们需要在多系统之间使用多个用户名和密码.这样客户就需要在多个系统之间重复 ...

  3. 解决AJAX跨域:1、利用JSONP;2、JS设置Header

    一.利用JSONP: 首先来看看在页面中如何使用jQuery的ajax解决跨域问题的简单版: $(document).ready(function(){ var url='http://localho ...

  4. MDNS的漏洞报告——mdns的最大问题是允许广域网的mdns单播查询,这会暴露设备信息,或者被利用用于dns放大攻击

    Vulnerability Note VU#550620 Multicast DNS (mDNS) implementations may respond to unicast queries ori ...

  5. 风炫安全web安全学习第三十三节课 文件包含漏洞基础以及利用伪协议进行攻击

    风炫安全web安全学习第三十三节课 文件包含漏洞基础以及利用伪协议进行攻击 文件包含漏洞 参考文章:https://chybeta.github.io/2017/10/08/php文件包含漏洞/ 分类 ...

  6. 利用JSONP实现跨域请求

    前言:有时候一忙起来就没了时间观念,原来我已经有十多天没写博客了.一直想做跨域方面的尝试,无奈最近准备校招没时间动动手.今天就先讲讲JSONP吧,昨晚还在研究QQ空间日志里面网络图片的问题呢,我发现日 ...

  7. jQuery中利用JSONP解决AJAX跨域问题

    写在前面 跨域的解决方案有多种,其中最常见的是使用同一服务器下的代理来获取远端数据,再通过ajax进行读取,而在这期间经过了两次请求过程,使得获取数据的效率大大降低,这篇文章蓝飞就为大家介绍一下解决跨 ...

  8. 利用Jsonp实现跨域请求,spring MVC+JQuery

    1 什么是Jsonp? JSONP(JSON with Padding)是数据格式JSON的一种"使用模式",可以让网页从别的网域要数据.另一个解决这个问题的新方法是跨来源资源共享 ...

  9. Web前端安全之利用Flash进行csrf攻击

    整理于<XSS跨站脚本攻击剖析与防御>—第6章 Flash在客户端提供了两个控制属性: allowScriptAccess属性和allowNetworking属性,其中AllowScrip ...

随机推荐

  1. linux命令(3):复制,剪切(文件和文件夹)

    一:文件命令:cp,mv linux 怎么样复制文件夹内所有文件到另一个文件夹?   cp -Rf /home/user1/* /root/temp/ 将 /home/user1目录下的所有东西拷到/ ...

  2. [物理学与PDEs]第3章 磁流体力学

    [物理学与PDEs]第3章第1节 等离子体 [物理学与PDEs]第3章第2节 磁流体力学方程组 2.1 考虑到导电媒质 (等离子体) 的运动对 Maxwell 方程组的修正 [物理学与PDEs]第3章 ...

  3. mapreduce执行流程

    角色描述:JobClient:执行任务的客户端JobTracker:任务调度器TaskTracker:任务跟踪器Task:具体的任务(Map OR Reduce) 从生命周期的角度来看,mapredu ...

  4. android之ExpandableListActivity

    MainActivity.java package com.example.mars_2300_expandablelist; import java.util.ArrayList; import j ...

  5. Android 开发中常用 ADB 命令总结

    adb 的全称为 Android Debug Bridge,就是起到调试桥的作用.通过 adb 我们可以在 Eclipse 中方便通过 DDMS 来调试 Android 程序,说白了就是 debug ...

  6. Mysql设置字符编码及varchar宽度问题

    ubuntu16.04通过仓库安装的mysql5.7的配置文件在 /etc/mysql/mysql.conf.d/mysqld.cnf 修改字符只需要 在[mysqld] character-set- ...

  7. C# 导出 Excel 和相关打印设置

    源地址:http://blog.csdn.net/wanmingtom/article/details/6125599 Excel.Application myExcel = new Excel.Ap ...

  8. Android应用框架浅析

    http://blog.csdn.net/yanbober/article/category/3206943 Android应用层View绘制流程与源码分析   http://blog.csdn.ne ...

  9. 页面设计--Label

    页面设计功能是实现可视化的拖拉方式来设计业务单据页面,同时支持主从表单功能. 包含经常用到的控件:Label.TestBox.Button.ComboBox下拉框.CheckBox复选框.RadioB ...

  10. java 倒序输出

    输入五句话,用数组存储起来,然后逆序输出这五句话. import java.util.Scanner; class  work1{ public static void main(String[] a ...