本文作者:jianghuxia(本次信安之路巔峯挑戰賽唯一一個堅持到最後通關的小夥伴)
額,大家好,我是菜雞,這次比賽的writeup
如下,orz
,orz
。
Level_1
歡迎參加首屆信安之路巔峯挑戰賽,第一關的入口: http://wifiseciloveyouxazl.xazlsec.com 獲得key之後,通過後臺發送key將獲得第二關的入口信息,祝你好運!
選擇題爲主,最後一題例外,爲此,還抓了個包,研究了下js
腳本
看下腳本
火狐抓個包,得到key
?這tm
什麼原理。
Level_2
恭喜通關第一關,第二關入口: http://nizhidaoqianduanyoushama.xazlsec.com 獲得key之後,通過後臺發送key將獲得第三關的入口信息,祝你好運!
我滴個天啊。。。。。弱密碼隨意登陸。。。。。不好意思,這題我真是非預期解法,具體的預期解法,之前信安之路文章已發,就不仔細講述啦!
得到第二關答案key:2c4b23c265c3e834f31024533565f2be
Level_3
恭喜完成第二關,第三關的入口: 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
聽說後面這題是這樣的,覺得難度就應該降低挺多的了
Level_4
恭喜完成第三關,第四關的入口是: 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
反查都試了一遍。
Level_5
恭喜完成第四關,第五關是一個病毒分析題,樣本下載地址: 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
,提交答案後,直接“完成所有挑戰”,後面跟出題老哥反映下,再繼續去找公鑰的答案。
到此結束,大佬們,再見。