搜索此博客

2017年1月19日星期四

JSONP注入实战

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
JSONP注入实战  阅读原文»

JSONP注入是一个鲜为人知的但是非常广泛和危险的漏洞。它在近几年才出现,由于JSON,web API和跨域通信的急需。

什么是JSONP

假设每个人都知道JSON是什么,让我们谈谈一下JSONP。 JSONP来自带有填充的JSON,被创建来绕过常见的限制,例如同源策略。

举个例子。 我们的网上银行应用程序,http://verysecurebank.ro,实现了一个返回当前用户的交易的API调用。
访问http://verysecurebank.ro/getAccountTransactions的HTTP请求向我们提供了当前用户的交易内容,JSON格式:

json-transactions

如果我们的报告应用程序,想访问http://reports.verysecurebank.ro获得交易详细信息,由于同源原则生效(不同的主机),将无法通过AJAX调用该页面。

sop-json

为了解决这个问题,JSONP发挥了作用。 由于跨域脚本包含(主要用于外部加载JavaScript库,如jQuery,AngularJS等)是允许但不推荐的,一个聪明的技巧显然解决了整个问题:在响应前加上回调。

注意:即使它可能是显而易见的,值得提及的是,当包括脚本跨域时,它将在包含应用程序的上下文中运行,而不是在源的上下文中运行。

添加一个回调到API响应,包裹JSON格式的数据,允许我们加载脚本标签之间的API响应,并通过定义我们自己的回调函数来处理它的内容。

怎么使用JSONP

这是你最容易遇到的情况:

  1. 回调函数在响应中硬编码
  • 基本函数调用
  • 对象方法调用

2.回调函数是动态的

  • 完全可控的URL(GET变量)
  • 部分可控的URL(GET变量),但附加一个数字
  • 可控的URL(GET变量),但最初不显示在请求中

基本函数调用

一个非常常见的示例,其中myCallback回调在响应中硬编码,包裹在JSON格式的数据上:

callback-example

我们可以通过首先定义myCallback函数,然后在脚本标签中引用API调用来轻松使用它:

callback-example-code

注意:确保在包含响应之前定义函数,否则将调用未定义的函数,并且不会获取任何数据。

当登录的受害者访问我们的恶意页面时,我们抓取他的数据。 为了简洁起见,我们在当前页面中显示整齐格式化了的数据。

callback-example-result

对象方法调用

这几乎与第一个示例相同,你可能会在ASP或ASP.NET Web应用程序中遇到它。 在我们的示例中,System.TransactionData.Fetch作为回调围绕JSON格式的数据被添加:

multiple-callback-example

我们只是为已经是System对象一部分的TransactionData对象创建Fetch方法。

multiple-callback-code

结果是相同的,所以没有截图。

完全可控的URL(GET变量)

这是你会遇到的最常见的情况。 回调函数在URL中指定,我们可以完全控制它。 回调URL参数允许我们更改回调的名称,因此我们将设置它来测试,并在响应中看它的改变:

specified-callback-example

我们基本上可以使用相同的代码,但是不要忘记在包含带有脚本标签的响应时添加回调参数。

specified-callback-code

部分可控的URL(GET变量),但附加一个数字

在这种情况下,回调函数名称附加了一些东西,通常是一个数字。 在大多数情况下,我们得到的东西像jQuery和一个附加到它的短号,像12345,回调成为jQuery12345。

appended-callback-example

逻辑上,代码保持不变,我们只需要将12345添加到我们的回调函数名称,而不是包含脚本时。

appended-callback-code

但如果数字不是硬编码怎么办? 如果是动态的、每个会话都不同怎么办? 如果它是一个相对较短的数字,我们可以用过编程预定义每个可能性的函数。 让我们假设附加的数字高达99999。 我们可以以编程方式创建所有这些函数,所以附加的数字,我们已经有一个回调函数。 这里是示例代码,我使用一个更简单的回调来说明结果:

appended-callback-code-generate

这里发生了什么:我们有硬编码的回调名称jQuery,我们为函数的数量设置了一个限制。 在第一个循环中,我们在callbackNames数组中生成回调函数名。 然后我们循环遍历数组,并将每个回调名称转换为全局函数。 请注意,为了缩短代码,我只提醒第一笔交易中发送的金额。 让我们看看它是如何工作的:

appended-callback-alert

在我的机器上,花了大约5秒钟显示警报,回调名称为jQuery12345。 这意味着Chrome在5秒内创建了超过10.000个功能,所以我大胆地说,这是一个很可行的方法。

可控的URL(GET变量),但最初不显示在请求中

最后一个场景涉及一个显然没有回调的API调用,因此没有可见的JSONP。 这可能发生在开发人员,为其他软件或代码留下隐藏的向后兼容性只是没有在重构时删除。 因此,当看到没有回调的API调用时,特别是如果JSON格式的数据已经在括号之间,手动添加回调到请求。

如果我们有以下API调用http://verysecurebank.ro/getAccountTransactions,我们可能会尝试猜测回调变量:

  • http://verysecurebank.ro/getAccountTransactions?callback=test
  • http://verysecurebank.ro/getAccountTransactions?cb=test
  • http://verysecurebank.ro/getAccountTransactions?jsonp=test
  • http://verysecurebank.ro/getAccountTransactions?jsonpcallback=test
  • h
    小米安全中心招聘  阅读原文»

    logo.png

    小米科技有限责任公司成立于2010年4月,是一家专注于智能硬件和电子产品研发的移动互联网公司。创立至今,在手机电商领域,小米依然保持第一。小米2017年目标力争收入破千亿。

    拥有强大数据积累与领先硬件安全技术的小米安全中心团队现因业务发展需要,诚招以下优秀人才:

    JAVA服务端开发工程师(帐号,安全,大数据)

    招聘人数:5人

    薪资范围:10k~不限

    岗位职责:

    1、帐号方向:负责小米云平台帐号服务端JAVA开发;负责亿级别用户系统的服务端架构设计、开发调优

    2、安全方向:负责小米企业安全项目服务器JAVA开发与维护,流量分析与威胁感知平台服务端开发

    3、大数据方向:负责风控系统的开发和维护,安全/电商大数据挖掘,数据建模,对机器学习算法有一定了解

    岗位要求:

    1、精通Java编程,熟悉常用web框架,对Java内存模型、多线程、垃圾回收、NIO等有一定研究 , 熟悉java线上调优以及故障排查

    2、熟悉mysql,能编写较复杂SQL,有一定的SQL性能调优经验

    3、熟悉zookeeper,memcache,redis,Kafka以及rpc框架的使用和原理 

    4、熟悉 storm/spark/hadoop/hive 其中之一

    5、需要有系统设计经验和大规模高并发业务线上业务经验

    6、熟悉http协议,了解基本的网络安全常识 

    7、重点高校计算机或相关专业本科及以上学历,3年及以上工作经验

    AI 风控师 / AI工程师(安全领域)

    我们正在寻找在信息安全/业务安全领域经验丰富的AI研究员/工程师,通过使用大量的数据来构建风险控制模型和架构&解决方案设计,来帮助小米建立智能安全基础设施和人工智能风险分析体系

    招聘人数:1人

    薪资范围:10k~不限

    岗位职责:

    1、与领域专家一起,通过机器学习/人工智能技术进行网络安全或业务风控分析。从数据中洞悉发生的事情,为什么发生和采取什么决策

    2、建立风险控制系统,帮助识别和预测潜在风险

    岗位要求:

    1、数学、EE、或计算机专业的BS或MS学位。在机器学习/人工智能研究和应用上有丰富的工作经验

    2、有安全经验/背景优先

    3、有良好的沟通和团队精神

    高级业务安全工程师

    招聘人数:1人

    薪资范围:10k~不限

    岗位职责:

    1、负责各类安全相关事务的处理与跟踪,包括帐号等各类业务安全事件调查分析、跟进安全漏洞的修复等

    2、分析各类业务安全相关数据,制定安全策略,不断优化和完善小米的业务安全体系

    3、紧密配合研发和大数据团队,协调推进项目的完成

    岗位要求:

    1、本科以上学历,2年以上互联网工作经验,熟悉黑色产业链的运作和发展现状,有帐号安全相关工作经验优先

    2、较强的用户服务意识,较高的数据分析和逻辑推导能力,执行力和主动性好,拥有责任心和团队协作精神

    3、能熟练使用一款数据分析软件和SQL查询语句

    4、具有大数据分析经验者优先

    5、对技术有强烈的兴趣,对数据敏感,对伤害用户体验的行为深恶痛绝,具备良好的学习能力、沟通技能和团队合作能力

    高级移动安全工程师

    招聘人数:1人

    薪资范围:10k~不限

    岗位职责:

    1、负责公司各类移动端产品的安全测试、代码审计

    2、负责产品安全风险评估和漏洞分析,并制定解决方案

    岗位要求:

    1、本科以上学历,2年以上互联网工作经验,能力突出者学历不限

    2、2年以上手机系统漏洞挖掘经验,熟悉各类漏洞挖掘工具原理和使用

    3、能够对Android和iOS应用进行逆向分析和调试

    4、安全研究组织成员优先

    5、对技术有强烈的兴趣,具备良好的学习能力、沟通技能和团队合作能力

    高级智能硬件安全工程师

    招聘人数:1人

    薪资范围:10k~不限

    岗位职责:

    1、负责公司各种智能硬件的安全评估和漏洞发掘  

    2、定制智能硬件相关的安全标准和解决方案

    岗位要求:

    1、精通二进制代码的静态分析和动态调试等逆向技术

    2、精通NFC、BLE、ZigBee 等无线通讯协议,并可对其进行安全分析和调试

    3、有智能硬件漏洞发现和深度分析成果者优先

    4、对技术有强烈的兴趣,具备良好的学习能力、沟通技能和团队合作能力

    Android安全工程师

    招聘人数:1人

    薪资范围:10k~不限

    岗位职责:

    1、Android安全方面的前沿技术研究

    2、负责公司所有Android系统的产品的安全研究及安全加固支持

    3、Android安全模块的设计与开发

    岗位要求:

    1、熟练掌握 Android 程序的编写,包括Java 和C/C++的native开发

    2、熟悉Android安全机制,了解打包、反编译、破解流程等

    3、ARM汇编的逆向反汇编能力,至少能熟练掌握一种逆向工具

    4、熟悉Android底层运行机制

    5、熟悉Linux编程,对JNI和Linux应用编程有实战经验者优先

    6、对Android虚拟机源码有深入研究者优先

    7、对技术有强烈的兴趣,具备良好的学习能力、沟通技能和团队合作能力

    信息安全工程师(安全体系/管理方向)

    招聘人数:1人

    薪资范围:10k~不限

    岗位职责:

    1、负责公司安全体系的建设及推行

    2、负责制定并推动落实公司的信息安全策略、制度、流程等

    3、负责公司内部信息安全类培训及安全知识宣传

    4、负责公司日常的安全评审

    岗位要求:

    1、本科以上学历

    2、熟悉常见的安全漏洞及原理

    3、熟悉常见安全攻防技术,熟悉渗透测试,熟练掌握各种渗透测试工具

    4、精通常见系统、网络、Web应用攻击技术和防御加固

    5、熟悉PCI DSS、ISO27001、ITIL、等级保护等标准

    6、有过大型互联网公司安全体系建设经验者优先

    7、对技术有强烈的兴趣,具备良好的学习能力、沟通技能和团队合作能力

    小米安全中心官网:https://sec.xiaomi.com/

    简历投递邮箱:security@xiaomi.com(投递简历主题请注明:姓名+应聘岗位,注明招聘信息来自FreeBuf)

    联系QQ&微信:2369220216

    小米安全中心真诚期待你的加入!


    黑客技术官网地址:http://www.hackdig.com/

    阅读更多内容

没有评论: