深入浅析ImageMagick命令执行漏洞_python

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委托得那一行:

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

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

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

%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命令中,所以我们可以将引号闭合后通过"|",”`”,”&”等带入其他命令,也就形成了命令注入。

比如我们传入如下代码:

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

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

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

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

04 漏洞利用

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

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文件,包含以下内容:

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的参数)

05 漏洞修复

升级到最新版本

配置/etc/ImageMagick/policy.xml的方式来禁止https、mvg这些delegate,或者直接在配置文件删除相应的delegate

<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命令执行漏洞的知识,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索漏洞
, 命令
imagemagick
imagemagick 漏洞、imagemagick漏洞工具、imagemagick漏洞利用、imagemagick 漏洞检测、graphicsmagick 漏洞,以便于您获取更多的相关知识。

时间: 2024-08-03 15:17:10

深入浅析ImageMagick命令执行漏洞_python的相关文章

利用ImageMagick命令执行漏洞拿下Facebook四万美元奖金

前言 我相信很多人都知道ImageMagick和它存在的漏洞,这个漏洞发现于2016年四月底,同时,由于许多插件都依赖于这个ImageMagick库,因此,这个漏洞的影响范围很大.有证据表明,关于这个漏洞的信息,发现它的研究人员是知道的,ImageMagick开发团队的人也知道,但是,糟糕的是,一些其它的人(坏人)也知道了这个漏洞,在2016年5月3日,在互联网上发现了这个漏洞的POC.许多研究人员发现了这个问题,而且应用程序还没有及时更新.但由于一些未知的原因,我不在其中,但这是在5月份. 漏

NSA泄密事件之SMB系列远程命令执行漏洞及Doublepulsar后门全球数据分析

本文讲的是NSA泄密事件之SMB系列远程命令执行漏洞及Doublepulsar后门全球数据分析, 1.   概述 2017 年 4 月 14 日,黑客组织Shadow Brokers 公布了一批新的NSA(美国国家安全局)黑客工具.这批黑客工具中含有可以配合使用的一个攻击框架和多个攻击漏洞.这次的工具主要面向的是Windows系统,攻击框架非常易用,漏洞也大都是核弹级别的RCE(远程命令执行),配合框架和漏洞,可以非常容易地在存在漏洞的 Windows 主机上执行命令.植入后门.一时间,各路选手

又被野外利用了!新曝光Office产品多个远程命令执行漏洞分析

本文讲的是又被野外利用了!新曝光Office产品多个远程命令执行漏洞分析, 早在2015年,FireEye曾发布过两次关于Office的Encapsulated PostScript (EPS)图形文件的漏洞攻击的研究分析,其中一次属于零日漏洞攻击. 今年3月开始,FireEye再一次在微软Office产品中陆续发现三个新的零日漏洞,发现时这些漏洞已被野外利用. 第一个漏洞出现在今年的3月下旬,CVE-2017-0261中描述了Office远程代码执行漏洞(RCE)漏洞,FireEye认为该漏洞

惠普打印机爆远程命令执行漏洞,黑客可任意操纵你的打印机

本文讲的是惠普打印机爆远程命令执行漏洞,黑客可任意操纵你的打印机,在各类企业.单位甚至是学校,无论你身处在哪里,打印机都会作为必需品存在.也许你体验到的是其便捷的一面,但你是否了解其作为联网设备的危害在哪里呢?仔细回想一下,你上一次更新它的固件是什么时候?你是否了解过打印机所存在的那些漏洞? 出于对打印机安全性的好奇,我们购买了几台打印机(HP OfficeJet Pro 8210).事实上,在买的时候我们一直祈祷其那些易受攻击的固件仍然存在,否则你肯定无法想象你需要多少时间来进行回溯.幸运的是

程序猿(媛)们注意啦!Git、SVN、Mercurial版本控制系统被爆远程命令执行漏洞

近日,三款主流的源版本控制系统Git.Subversion (svn).Mercurial,发布了更新补丁,修复了一个客户端代码执行漏洞. 恶意的攻击者可以向受害者发送一条精心构造的ssh:// URL链接,当受害者访问这条URL则会触发漏洞导致执行恶意代码. 该漏洞由GitLab的Brian Neel,Recurity Labs的Joan Schneeweiss和GitHub的Jeff King发现和报告.具体详情如下: 漏洞编号: Git: CVE-2017-1000117 Apache S

如何使用Burp Suite模糊测试SQL注入、XSS、命令执行漏洞

本文讲的是如何使用Burp Suite模糊测试SQL注入.XSS.命令执行漏洞,今天我将使用打包的套件攻击工具对bwapp应用程序进行模糊测试,手动执行此测试是一个耗时的时间,可能对任何一个渗透性测试的安全人员来说都是无聊的过程. 模糊测试在软件测试中起着至关重要的作用,它是一种工具,用于通过将一组称为模糊的部分地址输入注入到要测试的应用程序的程序中来查找错误,错误,故障. 漏洞检查工具采用文件格式的结构输入来区分有效和无效的输入.漏洞检查工具最适合识别sql注入,缓冲区溢出,xss注入和OS命

Bash远程命令执行漏洞(CVE-2014-6271)分析利用

这几天Bash被爆存在远程命令执行漏洞(CVE-2014-6271),昨天参加完isc,晚上回家测试了一下,写了个python版本的测试小基本,贴上代码: #coding:utf-8 import urllib,httplib import sys,re,urlparse #author:nx4dm1n #website:www.nxadmin.com def bash_exp(url): urlsp=urlparse.urlparse(url) hostname=urlsp.netloc ur

开发者论坛一周精粹(第四期):Windows系统 SMB/RDP远程命令执行漏洞

第四期(2017年4月8日-2017年4月14日 ) 2017年4月14日,国外黑客组织Shadow Brokers发出了NSA方程式组织的机密文档,包含了多个Windows 远程漏洞利用工具,该工具包可以可以覆盖全球70%的Windows服务器,为了确保您在阿里云上的业务安全,请您关注 [高危漏洞预警]Windows系统 SMB/RDP远程命令执行漏洞 作者:正禾 [漏洞公告]CVE-2016-10229:Linux 内核远程代码执行漏洞 作者:正禾 黑科技?告别幕布,阿里云备案可以"刷脸&q

开发者论坛一周精粹(第十三期):CVE-2017-9791:Struts(S2-048)远程命令执行漏洞

第十三期(2017年7月3日-2017年7月9日 ) 2017年7月7日,Apache Struts发布最新的安全公告,漏洞编号为S2-048,该漏洞存在Struts2和Struts1一个Showcase插件Action Message类中,通过构建不可信的输入实现远程命令攻击,存在安全风险. [漏洞公告]CVE-2017-9791:Struts(S2-048)远程命令执行漏洞 https://bbs.aliyun.com/read/321149.html [漏洞公告]CVE-2017-3143