小口子就是任意文件读取,已经被交过了: WooYun: 美图秀秀某任意文件读取漏洞

所以我就不多说了,以下是渗透的一些笔记。(里面可能走了些弯路,一并发来了,都是这段时间边挖边记录的)

文件读取大概翻了一遍,感觉并没有什么可以说的。查看了一些php源码,希望能找到一些漏洞,但是收获甚微(以下是一些读取到的文件):

基本都是谷歌翻到的.php后缀的文件,读取出来。但并没有找到漏洞。

怎么办?

下载美图秀秀APP,进行反编译:

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

找到好多处类似API,查看源码并没有发现漏洞。

感觉这条路有点死。

因此困扰了一段时间,后来找到一个目标:kankan.web.meitu.com,谷歌翻到的:

duoduo.meitu.com,也就是kankan.web.meitu.com

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

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

然后拿到了一些文件,其中主要文件是/acp/action.php

这个漏洞也比较多呀……

先来一处注入:

http://kankan.web.meitu.com/acp/action.php?do=category.gettags&cid=1%20union%20select%201,2,version(),user()

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

不过对于后续渗透测试并没有太大作用。先存着。

另外找到一处任意文件上传:

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

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

菜刀连接:

可见权限很大,这也为后续渗透做足了铺垫。

权限很大,可以查看所有web目录和里面的文件。

Web目录下找到一处smtp配置:

1
2
3
4
5
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

成功登录企业邮箱:

搜索password关键词:

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

disable_functions禁用了很多函数,但唯独缺了popen。和以前LNMP一键安装包一样的毛病。

所以可以执行命令,弹了个shell回来:

开启一个sock5代理,方便后续渗透:https://github.com/phith0n/ssocks5

慢慢读其nginx配置文件,发现所有的php请求都交给内网的fastcgi处理了:

于是我就有了继续的思路。只要向这些9000端口提交php代码,即可在其中执行了。

具体思路在zone里很久以前就有人给出了:http://zone.wooyun.org/content/1060

我就不多说了,写了个脚本,利用proxychains4挂代理,fastcgi已经可以执行命令了:

利用这个方式,本可以拿下内网很多机子。

不幸地是我碰上了高版本的php-fpm,默认security.limit_extensions=.php,所以默认只有后缀是.php的文件我才能请求:

否则会报告Access Denied:

所以,我要拿某个机子的shell,需要先找到这个机子上一个已存在的.php文件。

真是很鸡肋呀,这里需要绝对路径,但实际上美图秀秀的服务器都是关闭报错了(连phpinfo都禁用了),感觉很难找到绝对路径。
路断了。

后来想到,最早任意文件读取漏洞的时候,就读出了/etc/rsyncd.conf这个文件,也就是说内网是有rsync的,而且据我观察,已经拿下shell的这台服务器的rsyncd.conf里所有的host都没有设置密码,只是限制了IP必须是内网。

那么,如果内网里其他机器也部署了rsync,很可能也没有设置密码,只是限制了内网,而我已经拿下了内网一台shell,进而就可以进行漫游了。

首先,我的目标是data.meitu.com,这个站应该是内网里比较关键的站点。先得找到它的内网IP。

这里涉及到一个找内网和外网对应IP的技巧。

美图的机器涉及到几个网段,想到应该是多网卡的机器。而多网卡的机器在生产的时候的MAC地址一般都是连续的,所以如果找到两个IP它的mac地址连续,那95%就是一台机器的两张网卡了。如下图:

是172.17.16.24,基本确定了。

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

果然连上了,见上图,列出目录。

那我就可以拿下shell了,直接传webshell:

1
rsync -vzrtopg --progress ./sxx.php 172.17.16.24::www/support.meitu.com

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

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

172.17.16.25已经可以执行命令了,但不知道为何24/23不能执行。

所以现在有两种方式可以拿下内网各台服务器的shell:

  1. Rsync内网未授权访问
  2. Fastcgi内网未授权访问

所以用这两种方法陆续拿下几台web服务器。

23拿下shell:

25拿下shell:

24拿下shell:

(弹shell的目的不是装逼,因为web端做了负债均衡,webshell经常出BUG,还有的web目录没权限,不如直接弹回来系统的shell)

然后思路感觉又断了。因为不知道剩下几台服务器的rsync的模块名,所以没法连上这些rsync。

先收集些信息吧。

可以看到大量美图公司内部人员信息。

成功登录一些邮箱:

VPN入口:

内部很多系统都是限制IP了(挂代理都上不去的那种),我能想到的有两条路:

  1. 找到一个VPN账号
  2. 提权服务器,修改black.conf

正常情况下应该选择第一种,但就我看来,这个环境下,第二种反而更加合适。因为rsync是可以进行提权的。

Rsync的权限是root:root,而且没有限制chroot,所以rsync是可以读写任意文件的。

这样的话提权起来就很容易拉。

既然没有限制chroot,于是我直接在可写目录写入一个ln -s /root/ ./jmproot

然后rsync去同步这个目录,即可读写/root目录下所有文件:

可见有计划任务文件crontab,只要覆盖这个文件或者/etc/crontab,即可以root权限反弹shell。或者直接修改限制IP的一些文件、服务器私钥,我就能直接登录服务器了。

不过我就不敢做太敏感的操作了,点到为止,只是说明这个方法是可以提权的。(如果是恶意用户提下来以后,内网之后的路就平坦很多了)

虽然不提权,但实际上内网还有好几台机器没有拿到shell,我用rsync读一下敏感文件,看能不能把其他几台开了rsync但猜不到模块名的机器拿下。

在history中找到一台:

1
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:

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

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

里面很容易改一下升级地址:

但我也就敢说说,妹纸什么的和我无缘……

继续深入。反弹一个shell发现失败,似乎不能连外网。直接在菜刀上看看吧:

只有外网IP,果然不是和之前那些机子在一个地方。

但用神器cloudeye发现它是可以连接外网的。还是再试试能不能弹shell。

还是不行,这台机子很奇怪,明明有些地方是777的权限,但不能写文件。所以就不试了,翻翻没什么能帮助我继续渗透的信息,就不看了。

在上面并没有发现什么特殊的东西,但我读了一下这台机子上的rsync配置文件发现了一个很大的问题:

模块限制的IP并不一定是IP段,可能只是一个IP。而且美图内部模块名普遍都有www。

这样的话,我就估计我没拿下的那几台服务器并不是因为模块名不是www,而是因为限制了IP,虽然我挂了代理,但代理的这台IP其实也是不允许访问www的。

所以我下一步,就是多尝试一些机子,看是不是能够连上一些之前没连上的rsync。

又发现几台:

看了一下122.141.231.22、23、24、25包括之前的这些应该都是负债均衡8台一样的机子。里面文件都一样。直接写shell就可以,我就不尝试了。

一下又拿到8台机子……

笔记基本写到这里就停了,后面真的太累不想做了。给出一些继续渗透的思路:

1.rsync提权,解除已控制的这些机器的IP访问限制,挖掘更多漏洞。
2.根据已搜集的信息进行vpn登录。
3.根据已搜集的信息进行邮箱登录。
4.源码审计,挖掘内部系统漏洞。

所以建议厂商根据我列出的这些安全威胁,进行相应修正。

渗透过程中还发现内网很多管理员操作的时候会把一些数据库密码翘到命令行里,导致我连上了很多数据库,管理员这块也要注意一下。

另外,涉及到数据的比较敏感,但我绝对没碰任何数据,这是一定的,全过程就是检测,以发现问题为主。

这次渗透测试影响很广,数十个服务器,近百个网站。希望厂商重视。