参考 https://www.leavesongs.com/PENETRATION/CVE-2016-3714-ImageMagick.html

何为ImageMagick

简而言之,就是一个处理图片的程序。

RCE

ImageMagick有一个功能叫做 delegate(委托),作用是调用外部的lib处理文件。
在ImageMagick的配置文件 /etc/ImageMagick/delegates.xml 可以看到所有的委托(自己去看)

它的委托一般是长这样的,意思是在处理https图片时,会调用command的里的指令.command里的%m代表一种占位符,%m占位符代表获取https图片的url(当然占位符不仅仅%m一种,还有 比如%i是输入的文件名,%l是图片exif label信息 等等等等)

<delegate decode="https" command=""curl" -s -k -o "%o" "https:%M""/>

ImageMagick默认支持一种图片格式,叫mvg,而mvg与svg格式类似,其中是以文本形式写入矢量图的内容,而这其中就可以包含https处理过程。 所以我们可以构造一个mvg文件(文件名后缀不一定非得.mvg,imagemagick是按照文件内容来区分文件类型的)交给imagemagick处理,在其包含https处使用|或&分割命令,造成rce,如

push graphic-context
viewbox 0 0 640 480
fill 'url(https://"|mkdir /nmsl; ")'
pop graphic-context

上面是mvg的一种格式,其中在fill处填入https的url.

实践

QQ截图20210217152837

QQ截图20210217152846