当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2015-0119261

漏洞标题:美图内网漫游(沦陷大量内部系统、内部服务器权限、企业架构、企业邮箱等敏感信息)

相关厂商:美图秀秀

漏洞作者: phith0n

提交时间:2015-06-09 15:03

修复时间:2015-07-24 15:34

公开时间:2015-07-24 15:34

漏洞类型:成功的入侵事件

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-06-09: 细节已通知厂商并且等待厂商处理中
2015-06-09: 厂商已经确认,细节仅向厂商公开
2015-06-19: 细节向核心白帽子及相关领域专家公开
2015-06-29: 细节向普通白帽子公开
2015-07-09: 细节向实习白帽子公开
2015-07-24: 细节向公众公开

简要描述:

挖掘了半个月快,从一个小口子撕大,涉及美图内网各种敏感信息,多台服务器,近百个域名,可控制美图所有应用,替换各种二进制文件。
本来想继续深入的,真的太累了,美图内网安全性做得虽然一般,但员工的安全性都还挺高的,弱口令基本没找见,包括各种系统也进行了一些IP的限制,渗透起来有一定难度。
web漏洞包括一个后台未授权访问+SQL注入+任意文件上传getshell。内网的一堆,不说了。
虽是一场没有做完的渗透,但挖的真的很累,求一个雷。

详细说明:

小口子就是任意文件读取,已经被交过了: WooYun: 美图秀秀某任意文件读取漏洞
所以我就不多说了,以下是渗透的一些笔记。(里面可能走了些弯路,一并发来了,都是这段时间边挖边记录的)
文件读取大概翻了一遍,感觉并没有什么可以说的。查看了一些php源码,希望能找到一些漏洞,但是收获甚微(以下是一些读取到的文件):

image002.png


基本都是谷歌翻到的.php后缀的文件,读取出来。但并没有找到漏洞。
怎么办?
下载美图秀秀APP,进行反编译:

image003.png


用JD-GUI打开,源码十分完整。

image005.png


找到好多处类似API,查看源码并没有发现漏洞。
感觉这条路有点死。
因此困扰了一段时间,后来找到一个目标:kankan.web.meitu.com,谷歌翻到的:

image007.png


duoduo.meitu.com,也就是kankan.web.meitu.com
读取/acp/hand.php源码发现,这是一个后台,而且其检查登录的方式居然是前端认证!!

image009.png


一个后台未授权访问。所以只要禁用了javascript就可以查看后台:

image011.png


然后拿到了一些文件,其中主要文件是/acp/action.php
这个漏洞也比较多呀……
先来一处注入:
http://kankan.web.meitu.com/acp/action.php?do=category.gettags&cid=1%20union%20select%201,2,version(),user()

image013.png


通过注入找到一些web_kankan库的信息,包括管理员密码:

image015.png


image017.png


不过对于后续渗透测试并没有太大作用。先存着。
另外找到一处任意文件上传:

image019.png


$f即为$_FILES,$p是$_POST,$kk->move就是move_uploaded_file,所以这里就是一个没有任何检查的任意文件上传。
传上去一个文件,通过注入查看文件id为33:

image021.png


拿到webshell:http://kankan.web.meitu.com/images/catpic/big/33.php
菜刀连接:

image023.png


可见权限很大,这也为后续渗透做足了铺垫。
权限很大,可以查看所有web目录和里面的文件。
Web目录下找到一处smtp配置:
set from=jiankong@meitu.com
set smtp=smtp.qiye.163.com
set smtp-auth-user=jiankong@meitu.com
set smtp-auth-password=84r4m7Hfyc6t
set smtp-auth=login
成功登录企业邮箱:

image025.png


搜索password关键词:

image027.png


各种敏感信息。(大量服务器私钥和sudo密码、SSH密码)

image029.png


disable_functions禁用了很多函数,但唯独缺了popen。和以前LNMP一键安装包一样的毛病。
所以可以执行命令,弹了个shell回来:

image031.png


开启一个sock5代理,方便后续渗透:https://github.com/phith0n/ssocks5
慢慢读其nginx配置文件,发现所有的php请求都交给内网的fastcgi处理了:

image033.png


于是我就有了继续的思路。只要向这些9000端口提交php代码,即可在其中执行了。
具体思路在zone里很久以前就有人给出了:http://zone.wooyun.org/content/1060
我就不多说了,写了个脚本,利用proxychains4挂代理,fastcgi已经可以执行命令了:

image035.png


利用这个方式,本可以拿下内网很多机子。
不幸地是我碰上了高版本的php-fpm,默认security.limit_extensions=.php,所以默认只有后缀是.php的文件我才能请求:

image037.png


否则会报告Access Denied:

image039.png


所以,我要拿某个机子的shell,需要先找到这个机子上一个已存在的.php文件。
真是很鸡肋呀,这里需要绝对路径,但实际上美图秀秀的服务器都是关闭报错了(连phpinfo都禁用了),感觉很难找到绝对路径。
路断了。
后来想到,最早任意文件读取漏洞的时候,就读出了/etc/rsyncd.conf这个文件,也就是说内网是有rsync的,而且据我观察,已经拿下shell的这台服务器的rsyncd.conf里所有的host都没有设置密码,只是限制了IP必须是内网。
那么,如果内网里其他机器也部署了rsync,很可能也没有设置密码,只是限制了内网,而我已经拿下了内网一台shell,进而就可以进行漫游了。
首先,我的目标是data.meitu.com,这个站应该是内网里比较关键的站点。先得找到它的内网IP。
这里涉及到一个找内网和外网对应IP的技巧。
美图的机器涉及到几个网段,想到应该是多网卡的机器。而多网卡的机器在生产的时候的MAC地址一般都是连续的,所以如果找到两个IP它的mac地址连续,那95%就是一台机器的两张网卡了。如下图:

image041.png


是172.17.16.24,基本确定了。
后来中途好几天因为有别的事就没看了,rsync自己不太熟。后来给自己vps搭了一个rsync异地备份的服务,知道了一些,这晚上又无聊要试下。

image043.png


果然连上了,见上图,列出目录。
那我就可以拿下shell了,直接传webshell:
rsync -vzrtopg --progress ./sxx.php 172.17.16.24::www/support.meitu.com

image045.png


传到了support.meitu.com目录下,直接连http:// support.meitu.com/sxx.php拿下:

image047.png


擦,看到绝对路径了,原来就是/www/醉了,再试下最早那个fastcgi:

image049.png


172.17.16.25已经可以执行命令了,但不知道为何24/23不能执行。
所以现在有两种方式可以拿下内网各台服务器的shell:
1. Rsync内网未授权访问
2. Fastcgi内网未授权访问
所以用这两种方法陆续拿下几台web服务器。
23拿下shell:

image051.png


25拿下shell:

image053.png


24拿下shell:

image055.png


(弹shell的目的不是装逼,因为web端做了负债均衡,webshell经常出BUG,还有的web目录没权限,不如直接弹回来系统的shell)
然后思路感觉又断了。因为不知道剩下几台服务器的rsync的模块名,所以没法连上这些rsync。
先收集些信息吧。

image057.png


image059.png


可以看到大量美图公司内部人员信息。
成功登录一些邮箱:

image061.png


VPN入口:

image063.png


内部很多系统都是限制IP了(挂代理都上不去的那种),我能想到的有两条路:
1. 找到一个VPN账号
2. 提权服务器,修改black.conf
正常情况下应该选择第一种,但就我看来,这个环境下,第二种反而更加合适。因为rsync是可以进行提权的。
Rsync的权限是root:root,而且没有限制chroot,所以rsync是可以读写任意文件的。
这样的话提权起来就很容易拉。
既然没有限制chroot,于是我直接在可写目录写入一个
ln -s /root/ ./jmproot
然后rsync去同步这个目录,即可读写/root目录下所有文件:

image065.png


可见有计划任务文件crontab,只要覆盖这个文件或者/etc/crontab,即可以root权限反弹shell。或者直接修改限制IP的一些文件、服务器私钥,我就能直接登录服务器了。
不过我就不敢做太敏感的操作了,点到为止,只是说明这个方法是可以提权的。(如果是恶意用户提下来以后,内网之后的路就平坦很多了)
虽然不提权,但实际上内网还有好几台机器没有拿到shell,我用rsync读一下敏感文件,看能不能把其他几台开了rsync但猜不到模块名的机器拿下。
在history中找到一台:
rsync -av /www/dl.meitumobile.com/data/OTA/ 122.141.231.23::fotamobile_meitudata_com/
这个IP:122.141.231.23,以前没见过的。
果断用rsync写入webshell,然后将host绑定上:
122.141.231.23 fotamobile.meitudata.com
成功GETSHELL:

image067.png


这台服务器是储存美图秀秀所有二进制文件的:

image069.png


框起来的就是美图秀秀电脑版的地址,修改其中的软件就可以秒杀多少使用美图秀秀(包括美图全家的软件)的妹纸,想想就激动!!
里面很容易改一下升级地址:

image071.png


但我也就敢说说,妹纸什么的和我无缘……
继续深入。反弹一个shell发现失败,似乎不能连外网。直接在菜刀上看看吧:

image073.png


只有外网IP,果然不是和之前那些机子在一个地方。
但用神器cloudeye发现它是可以连接外网的。还是再试试能不能弹shell。
还是不行,这台机子很奇怪,明明有些地方是777的权限,但不能写文件。所以就不试了,翻翻没什么能帮助我继续渗透的信息,就不看了。
在上面并没有发现什么特殊的东西,但我读了一下这台机子上的rsync配置文件发现了一个很大的问题:
模块限制的IP并不一定是IP段,可能只是一个IP。而且美图内部模块名普遍都有www。
这样的话,我就估计我没拿下的那几台服务器并不是因为模块名不是www,而是因为限制了IP,虽然我挂了代理,但代理的这台IP其实也是不允许访问www的。
所以我下一步,就是多尝试一些机子,看是不是能够连上一些之前没连上的rsync。
又发现几台:

image075.png


看了一下122.141.231.22、23、24、25包括之前的这些应该都是负债均衡8台一样的机子。里面文件都一样。直接写shell就可以,我就不尝试了。
一下又拿到8台机子……
笔记基本写到这里就停了,后面真的太累不想做了。给出一些继续渗透的思路:
1.rsync提权,解除已控制的这些机器的IP访问限制,挖掘更多漏洞。
2.根据已搜集的信息进行vpn登录。
3.根据已搜集的信息进行邮箱登录。
4.源码审计,挖掘内部系统漏洞。
所以建议厂商根据我列出的这些安全威胁,进行相应修正。
渗透过程中还发现内网很多管理员操作的时候会把一些数据库密码翘到命令行里,导致我连上了很多数据库,管理员这块也要注意一下。
另外,涉及到数据的比较敏感,但我绝对没碰任何数据,这是一定的,全过程就是检测,以发现问题为主。
这次渗透测试影响很广,数十个服务器,近百个网站。希望厂商重视。

漏洞证明:

见上面
我留的一些webshell,厂商一定要记得删除,另外就没留任何后门了!如下:
http://kankan.web.meitu.com/images/catpic/big/33.php
http://d.meitudata.com/updateadmin/connect.php
http://fotamobile.meitudata.com/fhgzs.php
http://support.meitu.com/sxx.php

修复方案:

根据我提出的这些问题进行修正。主要就是rsync、fastcgi请厂商根据实际情况进行限制,最好加上密码,否则只要内网有一台计算机沦陷则整个内网就暴露在黑客眼中了。
写了这么多,希望给高分呀~

版权声明:转载请注明来源 phith0n@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2015-06-09 15:32

厂商回复:

感谢白帽子的提交!

最新状态:

暂无