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

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

缺陷编号:wooyun-2015-0129696

漏洞标题:哔哩哔哩某后台系统内网小窥(逆密码加密算法,绕google 2次验证)

相关厂商:bilibili.com

漏洞作者: 染血の雪

提交时间:2015-07-27 15:21

修复时间:2015-09-10 20:38

公开时间:2015-09-10 20:38

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

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

哔哩哔哩弹幕视频网 - ( ゜- ゜)つロ 乾杯~
啊哈哈,佐佑理不清楚~
什么..你居然发现了这里?.你吓到我了啦.
本次渗透仅涉及某后台系统,并未涉及主站服务器或数据库;发出来只为交流思路,想看装逼的可以退散了。
本来想进到主站内网再发出来的,因为光看这次的成果其实并没什么。但是如果利用这次收集到的信息应用到主站内网真的后患无穷。不知道鼻屎老爷你怎么看~
先来个小福利,bilibili官方debian源:
deb http://mirrors.bilibili.co/debian/ wheezy main non-free contrib
deb-src http://mirrors.bilibili.co/debian/ wheezy main non-free contrib
deb http://mirrors.bilibili.co/debian-security/ wheezy/updates main
deb-src http://mirrors.bilibili.co/debian-security/ wheezy/updates main

详细说明:

0x01 信息收集
这次渗透先要从git说起。之前在乌云看到有人报过bilibili存在git的洞( WooYun: bilibili某站git服务配置不当,造成信息泄露 ),就去隔壁biligame扫了一下git,不出所料的扫出了不少(可能不止这些,其它请自查):

http://bmjh.biligame.com/.git/config
http://gz.biligame.com/.git/config
http://hxzj.biligame.com/.git/config
http://mlk.biligame.com/.git/config
http://qwmx.biligame.com/.git/config
http://sj2.biligame.com/.git/config
http://szr.biligame.com/.git/config
http://teos2.biligame.com/.git/config
http://www.biligame.com/.git/config
http://yzr.biligame.com/.git/config
http://api.biligame.com/.git/config


不管三七二十一,先全下载下来慢慢看。其中明感信息还是有不少的,如数据库用户名密码什么的,反正都是弱密码我这里就不发出来了。
其中在源码中的一个地址引起了我的注意:

http://dashboard-mng.bilibili.com/


这个域名之前信息收集没收集到,打开发现是个后台地址。于是试了一些如注入万能密码之类的常见手段均无果。
0x02 惊喜发现
各种手段无果后,便只能投向C段,因为我大B站肯定不止一台服务,于是用nmap快速扫描了一下C段。结果发现这台服务器开着5900VNC端口,便随手试了一下失传已久的VNC黑武器,结果居然可以连上。
更让我惊喜的是成功绕过VNC验证后,随手试了个弱密码(root/bilibili)居然还让我登陆了,这真是中大奖了...Σ(  ̄□ ̄||)

T0{)QA[[W7OG9FRM1R$E2NN.jpg


0x03 内网之旅
拿到一台机器的权限以后便开始了我的内网之旅,首先国际惯例我先翻看了一些常用目录,看到/bin/下有不少别人传的工具,看来我还不是第一个来到这里的人,不过也方便了我的不少操作。

BB(4PKO9JN4T~`[$IX~_IPN.png


翻了一下目录没找到任何动态页面,于是我便用find命令找了一下,结果的确没有任何页面。不过看主机名字我猜到这台主机大概是做什么的了,因此没页面也很正常。(到很后面回过头来看才发现其实这台主机还有一个很重要的作用就是radis服务器)
由于Redis Desktop Manager打开都是乱码,我就直接用命令了,有点占版面请见谅。
下面是radis服务器信息

127.0.0.1:6379> info  
# Server
redis_version:2.8.14
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:5a5cb7aa06504cde
redis_mode:standalone
os:Linux 3.2.0-4-amd64 x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:4.7.2
process_id:3225
run_id:fb912978ea043185ea36333028ec0fa91528a3ff
tcp_port:6379
uptime_in_seconds:7664960
uptime_in_days:88
hz:10
lru_clock:11572148
config_file:/data/redis/redis.conf
# Clients
connected_clients:5
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
# Memory
used_memory:927456
used_memory_human:905.72K
used_memory_rss:2158592
used_memory_peak:1229224
used_memory_peak_human:1.17M
used_memory_lua:33792
mem_fragmentation_ratio:2.33
mem_allocator:jemalloc-3.6.0
# Persistence
loading:0
rdb_changes_since_last_save:1
rdb_bgsave_in_progress:0
rdb_last_save_time:1437635244
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:0
rdb_current_bgsave_time_sec:-1
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
# Stats
total_connections_received:18080
total_commands_processed:4618595
instantaneous_ops_per_sec:0
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:10636
evicted_keys:0
keyspace_hits:2182503
keyspace_misses:513
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:439
# Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
# CPU
used_cpu_sys:6285.49
used_cpu_user:3110.16
used_cpu_sys_children:2.24
used_cpu_user_children:0.99
# Keyspace
db0:keys=82,expires=82,avg_ttl=50021534


radis键

127.0.0.1:6379> keys *
1) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/4815da10310411e5bfcb52540033bebb"
2) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/2cabb94030df11e5bfcb52540033bebb"
3) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/521dee2030e711e5bfcb52540033bebb"
4) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/b1277f80307911e5bfcb52540033bebb"
5) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/408d1030305811e5bfcb52540033bebb"
6) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/50df9ed0304411e5bfcb52540033bebb"
7) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/7a065130304111e5bfcb52540033bebb"
8) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/22919ce0308511e5bfcb52540033bebb"
9) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/fccba9e0305411e5bfcb52540033bebb"
10) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/50fb401030e711e5bfcb52540033bebb"
11) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/2537bf9030e611e5bfcb52540033bebb"
12) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/ed8b6dd030e511e5bfcb52540033bebb"
13) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/e44309b0302511e5bfcb52540033bebb"
14) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/0b54ba8030ee11e5bfcb52540033bebb"
15) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/a82bea1030f111e5bfcb52540033bebb"
16) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/2feeab1030e611e5bfcb52540033bebb"
17) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/719871f02ac811e5bfcb52540033bebb"
18) "\xac\xed\x00\x05t\x00\x1e/loginUser/getBySessionid/null"
19) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/ded6ebb030e111e5bfcb52540033bebb"
20) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/808c95a030e111e5bfcb52540033bebb"
21) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/9b0f8f102f7711e5bfcb52540033bebb"
22) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/0abf26002f9511e5bfcb52540033bebb"
23) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/fe7e11e02fb111e5bfcb52540033bebb"
24) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/fe1a8520306111e5bfcb52540033bebb"
25) "\xac\xed\x00\x05t\x00\x1a/loginUser/getBySessionid/"
26) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/384d81c0306211e5bfcb52540033bebb"
27) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/e57de950309611e5bfcb52540033bebb"
28) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/bca0d1d0309311e5bfcb52540033bebb"
29) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/8fa15910304911e5bfcb52540033bebb"
30) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/a2a47d702fa011e5bfcb52540033bebb"
31) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/3d071850310911e5bfcb52540033bebb"
32) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/a27bdd60307d11e5bfcb52540033bebb"
33) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/090c35d0310911e5bfcb52540033bebb"
34) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/ac82dfc030ff11e5bfcb52540033bebb"
35) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/e77d1be0306e11e5bfcb52540033bebb"
36) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/aed4bee0301611e5bfcb52540033bebb"
37) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/59174ed02f5a11e5bfcb52540033bebb"
38) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/3b0d55e030e211e5bfcb52540033bebb"
39) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/f75f4ef0307a11e5bfcb52540033bebb"
40) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/4f1bf9e02f5411e5bfcb52540033bebb"
41) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/45dd08b0306211e5bfcb52540033bebb"
42) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/0c35d880303a11e5bfcb52540033bebb"
43) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/d2b3ff0030df11e5bfcb52540033bebb"
44) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/74c97c3030df11e5bfcb52540033bebb"
45) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/684ab1f0302f11e5bfcb52540033bebb"
46) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/e4675b8030de11e5bfcb52540033bebb"
47) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/327465a0306411e5bfcb52540033bebb"
48) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/8d7a16a0302511e5bfcb52540033bebb"
49) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/3c996dd0301611e5bfcb52540033bebb"
50) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/a1b5ce40307d11e5bfcb52540033bebb"
51) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/7901bf30305111e5bfcb52540033bebb"
52) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/802f28d030e011e5bfcb52540033bebb"
53) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/b00798f0306b11e5bfcb52540033bebb"
54) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/52b17560310411e5bfcb52540033bebb"
55) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/6ace7f402f8211e5bfcb52540033bebb"
56) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/70da0be0301611e5bfcb52540033bebb"
57) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/ddb821402f4c11e5bfcb52540033bebb"
58) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/b802123030dc11e5bfcb52540033bebb"
59) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/056fff80304911e5bfcb52540033bebb"
60) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/a9c37c802f9d11e5bfcb52540033bebb"
61) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/363843a030e111e5bfcb52540033bebb"
62) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/e56bb6b030df11e5bfcb52540033bebb"
63) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/921247e030df11e5bfcb52540033bebb"
64) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/da2cade0307b11e5bfcb52540033bebb"
65) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/bf8bb560309611e5bfcb52540033bebb"
66) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/0ef4a960304511e5bfcb52540033bebb"
67) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/dd7556c0305b11e5bfcb52540033bebb"
68) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/ebc9ba802b5c11e5bfcb52540033bebb"
69) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/544cca30302511e5bfcb52540033bebb"
70) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/5c150d402e9011e5bfcb52540033bebb"
71) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/9518c8c030ed11e5bfcb52540033bebb"
72) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/02eb427030e311e5bfcb52540033bebb"
73) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/8bbe881030e211e5bfcb52540033bebb"
74) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/48f0d2d0302a11e5bfcb52540033bebb"
75) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/c033f82030ea11e5bfcb52540033bebb"
76) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/c584d280301911e5bfcb52540033bebb"
77) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/dab21b40305f11e5bfcb52540033bebb"
78) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/23c73950301a11e5bfcb52540033bebb"
79) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/0c39753030ee11e5bfcb52540033bebb"
80) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/bde758d0301511e5bfcb52540033bebb"
81) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/36cea22030df11e5bfcb52540033bebb"
82) "\xac\xed\x00\x05t\x00:/loginUser/getBySessionid/34c6f510304c11e5bfcb52540033bebb"


然后就是放眼内网了。我用nmap扫描了该网段发现有五台机器存活,ip地址分别是:

192.168.122.1
192.168.122.11
192.168.122.12
192.168.122.13
192.168.122.14


而我目前所在的机器是192.168.122.13,也就是说本地还有四台机器。
我用最简单暴力的的方法去试,也就是用之前发现的弱密码去尝试,结果还真的成功的登陆了另一台机器:192.168.122.14。
登入后发现这台居然是数据库服务器,而且本地登陆mysql不用用户名密码(其实即使有密码我们也可以通过history获得)。
这个数据库应该是后台的数据库,而且是管理后台的统一登陆(应为都是后台所有打码有点狠,但可以看到都是B站的域名):

35[@)QL{F%4TOA(O}]V~@N5.png


用户表:

G]Z~0L`0QUFNE}[QY~HFBLN.png


根另外,据第一张表提供的数据发现其中一个后台可以不用认证就可进行操作,图发出来你们自己知道是哪个后台,本来想和客服妹子说的,结果被发现是足控后羞羞的躲起来了,我真是太没用了。(● ̄(エ) ̄●)

Q73@GW8X~}`P_JZ5K@B$3OP.png


然而并没有什么卵用因为密码CMD5一个也解不出啦,应该是加了盐;而且目测还有二次认证。
而后又进入了迷惘期............................................................
不过运气很快就再次降临,某次误将192.168.122.14当成了192.168.122.13,结果发现192.168.122.14可以不用密码就可以登录其他三台服务器,至此内网五台机器全沦陷。下面简单说一下其他几台机器的作用:
app:即后台网页服务器;
infocc:安装Nginx却未发现任何页面,但是80端口大量对外连接(初略估计在50页以上),判断应该是某手机app的服务器;
cn-gamesdk-2:提供部分B站二级域名网页的服务器,同时还充当网关,管理员习惯通过该机器登陆其他机器。
0x04 逆向分析加密算法,及通过google 2次验证
在app服务器中发现了一个dashboard.war的包,打开后发现是后台的网页源码,既然都下下来的就随手逆一下咯。
如果成功逆出加密算法,由于我有数据库操作权限,我就可以直接在数据库里添加一个用户。
于是经过一番折腾后在某class文件逆向后的伪代码里发现了密码加密的核心算法:

password = DigestUtils.md5Hex((new StringBuilder()).append(DigestUtils.md5Hex(password)).append("dsbd_").toString());


于是快速写了个java验证脚本:

import org.apache.commons.codec.digest.DigestUtils;
public class Main {
public static void main(String[] args) {
String password = "BiLiBiLi";
password = DigestUtils.md5Hex((new StringBuilder()).append(DigestUtils.md5Hex(password)).append("dsbd_").toString());
System.out.println(password);
}
}


用这个脚本,经过几次测试发现,我更本不用在数据库里添加用户,因为不少用户是弱密码:123456,还有不少密码和用户名一样的。
二次验证其实更简单,经过对源码的分析发现,他其实用的是谷歌的一个身份验证系统,可在play store里直接下载:

Screenshot_2015-07-27-14-25-15.png


而经过对源码的分析其中的密钥应该就是前面数据库截图里的seed字段:

Screenshot_2015-07-27-14-26-34.png


Screenshot_2015-07-27-14-25-46.png


于是只要输入正确的用户名密码,在口令处输入上图google身份验证器生成的动态码就能成功登陆后台:

7SAC(WYLM[RP2MOS{2%I2ZP.png


其实到这里依然没什么卵用,由于不少子系统的DNS都解析到内网,但是貌似这个系统的内网和DNS解析的内网又不是同一个,所以前面也说了本来想搞台内网机器再发出来,但是想想还是点到为止算了,毕竟里面不少漏洞还是很简单易用的,甚至还有不用验证的,赶快发出来算了。

漏洞证明:

0x05 其他
除两台弱密码的机器以外的三台机器的密码:
密码都是Liunx SHA 512加密的,不靠猜基本无解。

OI3JM_T(QE3%9EITP$Y~A0U.png


在cn-gamesdk-2中发现四个5900的连接其中两个来自荷兰一个来自美国,另一个来自360。难道比我先到的前辈就是360的?

JB{~35)~M(JG8[0SUB`D65W.png


VS)6D)@Y]TMZ]0C~WM[O2K6.png


修复方案:

0x06 建议
清理git信息,升级VNC,修改弱密码;
发现后台可以被搜索引擎搜索到,合理设置robots.txt,或者干脆全内网+vpn吧;
设置mysql本地登陆密码;
去除data机器ssh到其他机器不用验证,这个我也不知道这么说,就这样吧~;
建议管理员尽量用ssh访问服务器,有迹象表明管理员喜欢用Telnet,哈哈,这都被我发现了╮( ̄▽ ̄)╭;
及时清理.bash_history等记录,找密码什么的实在太方便了,其中好多密码我都没写出来,如redis密码,mysql密码之类的,我还是很良心的。
今天早上洗杯子的时候杯子居然爆了,现在手上都是玻璃划的小口子,我是满手是血的码完这篇文章的,相信我大B站不会让我失望的。
还有就是运维很辛苦的不要开除他。

版权声明:转载请注明来源 染血の雪@乌云


漏洞回应

厂商回应:

危害等级:低

漏洞Rank:5

确认时间:2015-07-27 20:36

厂商回复:

谢谢

最新状态:

暂无