RSS Feed
更好更安全的互联网
  • ImageMagick popen_utf8命令注入 漏洞报告

    2016-05-30

    Author: niubl(知道创宇404安全实验室)

    Date: 2016-05-07

    一、漏洞概要

    i. 漏洞描述

    ImageMagick是一款使用量很广的图片处理程序,很多厂商都调用了这个程序进行图片处理,包括图片的伸缩、切割、水印、格式转换等等。我发现当用户传入一个包含|竖线的文件名的时候,就有可能触发命令注入漏洞。

    ii. 漏洞影响

    测试:ImageMagick-7.0.1-2.tar.bz2

    iii. 漏洞分析

    ImageMagick在处理文件名时会调用OpenBlob()函数,在OpenBlob()函数中,代码2484行,判断文件名是否以|竖线开头,如果是,那么他会调用popoen_utf8()函数处理文件名,代码如图:

    图片 1

    来到popoen_utf8()函数,popen_utf8()函数调用会调用popen()函数打开文件,这样就导致我们可以注入系统命令,代码如图:

    图片 1

    iv. 漏洞利用(PHP)

    在PHP禁用执行系统命令函数的时候,我们可以用他来绕过disable_funtion,PHP编写如下代码:

    使用PHP执行,结果如图:

    图片 1

    二、修复方案

    目前官方已经更新代码至 Gitlab,但最终修复版本还未发布,补丁细节可参考如下链接:

    三、漏洞时间线

    2016.05.07    知道创宇404安全实验室niubl发现该漏洞
    2016.05.29    国外研究者报告并公布了漏洞细节 http://permalink.gmane.org/gmane.comp.security.oss.general/19669
    2016.05.30    发布分析报告

    四、相关资源链接

    作者:niubl | Categories:安全研究 | Tags:
  • CSV Injection Vulnerability

    2016-05-17

    Author: Evi1m0 (知道创宇404安全实验室)

    Date: 2016-05-17

    0x01 概述

    现在很多应用提供了导出电子表格的功能(不限于 Web 应用),早在 2014 年 8月 29 日国外 James Kettle 便发表了《Comma Separated Vulnerabilities》文章来讲述导出表格的功能可能会导致注入命令的风险,因为导出的表格数据有很多是来自于用户控制的,如:投票应用、邮箱导出。攻击方式类似于 XSS :所有的输入都是不可信的。

    Read More »

    作者:niubl | Categories:安全研究技术分享 | Tags:
  • 明枪易躲暗箭难防 – JSONView 0day

    2016-04-29

    作者:Evi1m0 # 知道创宇404安全实验室

    时间:2016-04-28

    0x01 JSONView 介绍

    JSONView 插件是目前最热门的一款开发者工具插件,它是查看json数据的神器。通常来讲,json 数据一般没有经过格式化或经过了 unicode 编码,没有缩进,没有换行等,给开发者阅读造成了一定困难。而jsonview 插件可以自动对 json 数据转码,缩进,格式化,直接显示出格式化后的数据,使得开发人员可以更好的阅读信息,本文中出现问题的版本为 Chrome 浏览器下的 JSONView 插件,Firefox 下版本不受影响。

    Read More »

    作者:niubl | Categories:安全研究 | Tags:
  • 原本丢掉的跨站漏洞 – JavaScript 特性利用

    2016-04-25

    Author: Evi1m0 (知道创宇404安全实验室)

    Date: 2016-04-21

    I.

    今天睡醒后我想到之前的“漏洞”好像可以利用特性让它变成真的漏洞,简单说下功能点。在测试越权操作的过程中,我发现未登录的情况下访问创建主题的 URL 站点会进行跳转,为了看清源码使用 View-Source ,这里发现可控点为 c 参数。

    view-source:masaike/ThemeCreator/index.aspx?c=QAQ\)QAQ\(QAQ

    对特殊字符进行测试( "> , < | () : ' " \ % ; & 空格 ..." )后发现仅允许使用 " . ' () " 这4个特殊字符,由于我们得知单引号可以使用,所以思考这里直接闭合 "window.open('/url?QAQ')" 参数然后注入恶意代码便完成了这次攻击,但由于 JS 的 解析错误处理顺序如果不闭合前面语句及注释后面语句是无法执行我们注入的恶意代码的。例如:

    II.2

    在能闭合 window.open(' 但不能 ; 结束语句的情况下,虽然不能使用其他字符,但这里通过利用 JavaScript 的特性也可以做到执行注入的 JS 代码。

    常量或已声明的变量及函数+(jscode) 经过解释器的优先级会先执行(jscode)随后报错:VM98:2 Uncaught TypeError: xxxx is not a function(…)

    1. 1(console.log(1))
    2. a(console.log(1))
    3. document(console.log(1))

    上面 3 种情况对应运行结果:

    c334041bjw1f34d050c83j20my09o0u9

    可以看到在触发 "Uncaught TypeError: xxxx is not a function(…) " 之前我们优先执行了注入的代码,但如果 "xxx is not defined" 优先级会触发报错且不运行注入代码,在这种漏洞环境因素下我们可以利用如上特性来闭合(不结束语句)执行注入的代码,虽然它依旧会报错。

    上面结论是我得出的,可能会存在误解 xD

    e.g:

    View-Source:

    Result:

    c334041bjw1f34d7d9ymzj20oa0203yq

    III.3

    在运行完毕我们注入的代码后,随后解释器触发了异常,但没有关系代码已经得到了执行 🙂

    现在开始编写 Payload 以便加载恶意的远程 JS 代码,我想了下准备使用其中一种:

    • eval(String.fromCharCode(97,108,101,114,116,40,49,41))
    • document.body.appendChild(...
    • eval(location.hash.split('#')[1])
    • ...

    但开始说到逗号,空格等特殊字符均被过滤,我们仅仅使用的【特殊字符】只有:"' () ." ,这里我采用了最后一种,虽然 split()[] 我们无法使用,但是可以使用 "location.hash.substr(1)" 来包含我们注入在 hash 上的恶意代码。

    最终 Payload 如下 [Work: ChromeVersion 49.0.2623.112]:

    c334041bjw1f34diku8uej215o09gwfx

     

     

    作者:niubl | Categories:技术分享 | Tags:
  • 定时炸弹 – MQ 代理中危险的序列化数据

    2016-04-12

    Author: RickGray (知道创宇404安全实验室)

    Date: 2016-04-08

    分布式应用中消息队列使用特别广泛,而针对分布式集群的攻击常常是点到面的扩散,突破关键点从而控制整个集群。在使用消息队列传递消息时,不安全的数据序列化方式便为整体系统埋下了一颗定时炸弹,一旦消息代理中间件被攻破就会导致整个工作节点沦陷。

    (本文只对可行思路进行阐述,如有不恰当之处,还望指出)

    一、消息队列与数据序列化

    1. 消息队列代理

    在一个分布式系统中,消息队列(MQ)是必不可少的,任务下发到消息队列代理中,工作节点从队列中取出相应的任务进行处理,以图的形式展现出来是这个样子的:

    1

    任务通过 Master 下发到消息队列代理中,Workers 从队列中取出任务然后进行解析和处理,按照配置对执行结果进行返回。下面以 Python 中的分布式任务调度框架 Celery 来进行代码说明,其中使用了 Redis 作为消息队列代理:

    在本地起一个 Worker 用以执行注册好的 add  方法:

    然后起一个 Python 交互式终端下发任务并获取执行结果:

    2

    借助消息队列这种方式很容易把一个单机的系统改造成一个分布式的集群系统。

    2. 数据序列化

    任务的传递肯定是具有一定结构的数据,而这些数据的结构化处理就要进行序列化操作了。不同语言有不同的数据序列化方式,当然也有着具有兼容性的序列化方式(比如:JSON),下面针对序列化数据存储的形式列举了常见的一些数据序列化方式:

    1. Binary
    2. JSON
    3. XML (SOAP)

    二进制序列化常是每种语言内置实现的一套针对自身语言特性的对象序列化处理方式,通过二进制序列化数据通常能够轻易的在不同的应用和系统中传递实时的实例化对象数据,包括了类实例、成员变量、类方法等。

    JSON 形式的序列化通常只能传递基础的数据结构,比如数值、字符串、列表、字典等等,不支持某些自定义类实例的传递。XML 形式的序列化也依赖于特定的语言实现。

    二、危险的序列化方式

    说了那么多,最终还是回到了序列化方式上,二进制方式的序列化是最全的也是最危险的一种序列化方式,许多语言的二进制序列化方式都存在着一些安全风险(如:Python, C#, Java)。

    在分布式系统中使用二进制序列化数据进行任务信息传递,极大地提升了整个系统的危险系数,犹如一枚炸弹放在那里,不知道什么时候就 "爆炸" 致使整个系统沦陷掉。

    下面还是以 Python 的 Celery 分布式任务调度框架来说明该问题。

    (这里是用 Redis 作为消息队列代理,为了方便未开启验证)

    首先不起 Worker 节点,直接添加一个 add  任务到队列中,看看下发的任务是如何存储的:

    3

    可以看到在 Redis 中存在两个键 celery  和 _kombu.binding.celery , _kombu.binding.celery  表示有一名为 celery  的任务队列(Celery 默认),而 celery  为默认队列中的任务列表,可以看看添加进去的任务数据:

    为了方便分析,把上面的数据整理一下:

    body 存储的经过序列化和编码后的数据,是具体的任务参数,其中包括了需要执行的方法、参数和一些任务基本信息,而 properties['body_encoding']  指明的是 body  的编码方式,在 Worker 取到该消息时会使用其中的编码进行解码得到序列化后的任务数据 body.decode('base64') ,而 content-type  指明了任务数据的序列化方式,这里在不明确指定的情况下 Celery 会使用 Python 内置的序列化实现模块 pickle  来进行序列化操作。

    这里将 body  的内容提取出来,先使用 base64 解码再使用 pickle 进行反序列化来看看具体的任务信息:

    熟悉 Celery 的人一眼就知道上面的这些参数信息都是在下发任务时进行指定的:

    这里详细任务参数就不进行说明了,刚刚说到了消息队列代理中存储的任务信息是用 Python 内置的 pickle  模块进行序列化的,那么如果我恶意插入一个假任务,其中包含了恶意构造的序列化数据,在 Worker 端取到任务后对信息进行反序列化的时候是不是就能够执行任意代码了呢?下面就来验证这个观点(对 Python 序列化攻击不熟悉的可以参考下这篇文章《Exploiting Misuse of Python's "Pickle"》

    刚刚测试和分析已经得知往 celery  队列中下发的任务, body  最终会被 Worker 端进行解码和解析,并在该例子中 body  的数据形态为 pickle.dumps(TASK).encode('base64') ,所以这里可以不用管 pickle.dumps(TASK) 的具体数据,直接将恶意的序列化数据经过 base64 编码后替换掉原来的数据,这里使用的 Payload 为:

    运行一下得到具体的 Payload 值:

    将其替换原来的 body  值得到:

    转换为字符串:

    然后将该信息直接添加到 Redis 的 队列名为 celery  的任务列表中(注意转义):

    这时候再起一个默认队列的 Worker 节点,Worker 从 MQ 中取出任务信息并解析我们的恶意数据,如果成功执行了会在 Worker 节点创建文件 /tmp/evilTask :

    4

    攻击流程就应该为:

    5

    攻击者控制了 MQ 服务器,并且在任务数据传输上使用了危险的序列化方式,致使攻击者能够往队列中注入恶意构造的任务,Worker 节点在解析和执行 fakeTask 时发生异常或直接被攻击者控制。

    三、脆弱的消息队列代理

    虽然大多数集群消息队列代理都处在内网环境,但并不排除其在公网上暴露可能性,历史上已经多次出现过消息队列代理未授权访问的问题(默认配置),像之前的 MongoDB 和 Redis 默认配置下的未授权访问漏洞,都已经被大量的曝光和挖掘过了,但是这些受影响的目标中又有多少是作为消息队列代理使用的呢,恐怕当时并没有太多人注意到这个问题。

    鉴于一些安全问题,并未对暴露在互联网上的 Redis 和 MongdoDB 进行扫描检测。

    这里总结一下利用 MQ 序列化数据注入的几个关键点:

    1. 使用了危险序列化方式进行消息传输的消息队列代理;
    2. 工作集群会从 MQ 中取出消息并对其反序列化解析;
    3. 消息队列代理能够被攻击和控制;

    虽然成功利用本文思路进行攻击的条件比较苛刻,但是互联网那么大没有什么是不可能的。我相信在不久之后必定会出现真实案例来证实本文所讲的内容。(在本文完成时,发现 2013 年国外已经有了这样的案例,链接附后)

    四、总结

    数据注入是一种常用的攻击手法,如何去老手法玩出新思路还是需要积累的。文章示例代码虽然只给出了 Python Pickle + Celery 这个组合的利用思路,但并不局限于此。开发语言和中间件那么多,组合也更多,好玩的东西需要一起去发掘。

    参考

    作者:niubl | Categories:安全研究技术分享 | Tags:
  • PyYAML 对象类型解析导致的命令执行问题

    2016-03-10

    Author: RickGray (知道创宇404安全实验室)

    Date: 2016-03-09

    近日回顾了 PyCon 2015 上 @Tom Eastman 所讲的关于 Python 序列化格式的安全议题 -《Serialization formats are not toys》。议题主要介绍了 YAML、XML 和 JSON 三种格式用于 Python 序列化数据处理所存在的一些安全问题,其中 XML 部分讲解的是 Python 中的 XXE,而 Python 处理 JSON 数据本身不存在问题,但在前端 JavaScript 对返回 JSON 进行处理时常常直接使用 eval()  来转换类型从而留下安全隐患。

    关于 XML 和 JSON 格式相关的安全问题本文就不多提了,本文仅记录下议题中所提到的 Python PyYAML 模块在处理 YAML 格式数据时所存在的问题。

    Read More »

    作者:niubl | Categories:安全研究技术分享 | Tags:
  • Java 反序列化之 CommonsBeanUtils 分析

    2016-03-08

    Author: rungobier (知道创宇404安全实验室)

    Date: 2016-03-04

    一、简介

    前几天看到 github 上的 ysoserial 更新至0.0.4,增加了 CommonsBeanUtils Java反序列化 Payload 生成代码,原以为跟前面的 CommonsCollections 的原理一样,仔细看了一遍思路大不相同。CommonsBeanutilsCollectionsLogging1 主要依赖的 jar 包有:commons-collections(2.0-3.2.2), commons-beanutils-1.9.2, commons-loggings-1.2

    Read More »

    作者:niubl | Categories:安全研究 | Tags:
  • 安卓微信、QQ自带浏览器 UXSS 漏洞

    2016-02-29

    注:PDF报告原文下载链接

    Author: hei@knownsec.com

    Date: 2016-02-29

    一、漏洞描述

    在安卓平台上的微信及QQ自带浏览器均使用的QQ浏览器X5内核,在处理ip及域名hostnames存在逻辑缺陷,从而绕过浏览器策略导致UXSS漏洞。

    二、PoC代码及简单分析

    Read More »

    作者:niubl | Categories:安全研究技术分享 | Tags:
  • Linux Glibc 函数库漏洞分析(CVE-2015-7547)

    2016-02-26

    Author: 知道创宇404安全实验室

    1. 更新情况

    • 2016-02-17 下午    第一版完成
    • 2016-02-18 上午    第二版完成
    • 2016-02-22 下午    第三版完成

    2. 漏洞概要

    GlibcGNU发布的LIBC库的C运行库,GlibcLinux系统中最底层的API,基本其它任何运行库都会依赖于GlibcGlibc除了封装Linux操作系统所提供的系统服务外,还提供了其它的必要服务的实现。由于 Glibc 几乎包含所有的 UNIX 通行的标准,可以说是操作系统重要支撑库。

    1

    Read More »

    作者:niubl | Categories:安全研究 | Tags:
  • 通用型微信抢红包神器(已修复)

    2016-02-26

    Author: Evi1m0 (404安全实验室)

    Date: 2016-02-26

    本篇文章记录 2015年初时利用微信网页版红包 H5 接口实现的通用型平台抢红包神器,不同于目前市面上的抢红包外挂(模拟点击、HookAPI等)方式,当然该漏洞在15年3月便已经修复。

    WebAPI

    我们在使用网页版微信时无法点击领取红包,但是通过控制台查看网络包发现红包地址在 Response 中:

    c334041bjw1f1cpjydvuuj20nv05fab1

    Read More »

    作者:niubl | Categories:技术分享 | Tags: