CTF實戰數據包解題及思路
1.數據包解題方法及思路
數據包分析題在CTF中基本是必考題目,這類題目一般是給出一個pcap包文件,要求從中分析出Flag。有的簡單,直接通過字符串檢索就可以獲取,有點需要破解密碼,有的需要保存文件,雖然樣式很多,但仍然有跡可尋。
1.1數據包簡介
1.pcap文件簡介
pcap文件是常用的數據報存儲格式,它是按照特定格式存儲的一種文件格式,通過記事本等普通編輯工具打開pcap文件顯示為亂碼,pcap文件只能使用專業的數據包處理軟件來打開,例如wireshark等。wireshark可以抓包、查看包以及另存為cap包等。
2. PCAP文件構成
PCAP文件由一個PCAP文件頭和多個PCAP數據包組成,PCAP數據又由數據包頭和數據包內容組成,PCAP總體結構如圖 1所示。
圖1pcap總體結構圖
(1)文件頭
每一個pcap文件只有一個文件頭,總共占24(B)字節,以下是總共7個字段的含義。
Magic(4B):標記文件開始,并用來識別文件和字節順序。值可以為0xa1b2c3d4或者0xd4c3b2a1,如果是0xa1b2c3d4表示是大端模式,按照原來的順序一個字節一個字節的讀,如果是0xd4c3b2a1表示小端模式,下面的字節都要交換順序。現在的電腦大部分是小端模式。
Major(2B):當前文件的主要版本號,一般為0x0200
Minor(2B):當前文件的次要版本號,一般為0x0400
ThisZone(4B):當地的標準事件,如果用的是GMT則全零,一般全零
SigFigs(4B):時間戳的精度,一般為全零
SnapLen(4B):最大的存儲長度,設置所抓獲的數據包的最大長度,如果所有數據包都要抓獲,將值設置為65535
LinkType(4B):鏈路類型。解析數據包首先要判斷它的LinkType,所以這個值很重要。一般的值為1,即以太網。
(2)數據包頭(Packet Header)
數據包頭可以有多個,每個數據包頭后面都跟著真正的數據包。以下是Packet Header的4個字段含義:
Timestamp(4B):時間戳高位,精確到seconds,這是Unix時間戳。捕獲數據包的時間一般是根據這個值。
Timestamp(4B):時間戳低位,能夠精確到microseconds
Caplen(4B):當前數據區的長度,即抓取到的數據幀長度,由此可以得到下一個數據幀的位置。
Len(4B):離線數據長度,網路中實際數據幀的長度,一般不大于Caplen,多數情況下和Caplen值一樣
(3)包數據(Packet Data)
Packet是鏈路層的數據幀,長度就是Packet Header中定義的Caplen值,所以每個Packet Header后面都跟著Caplen長度的Packet Data。也就是說pcap文件并沒有規定捕獲的數據幀之間有什么間隔字符串。Packet數據幀部分的格式就是標準的網絡協議格式了。
1.2數據庫包解題思路
1. 字符串提取
很多簡單的數據包題可以通過strings命令來直接進行搜索獲取,其命令格式如下:
strings -a filename.pcap | grep -i strings,其中filename.pcap為包文件,strings為需要進行查找的關鍵字,例如password、user、admin、flag等,關鍵字要根據CTF題目中的提示來進行。
2.在wireshark中直接對關鍵字進行搜索
在Wireshark中可以通過String來搜索關鍵字,也即在Filter中輸入關鍵字,如圖2所示。
圖2wireshark搜索關鍵字
3.使用wireshark進行Follow分析
使用wireshark包分析軟件打開包文件,根據題目提示,可以選擇相對應的協議來進行follow跟蹤和分析。
4.提取內容為文件
在wireshark中或者其它編輯器中,將需要提取的內容單獨保存為文件,這些文件可能是圖片文件、壓縮文件等。
(1)winhex來提取(->|和|<-之間的)內容保存為對應的文件,一般在數據庫包分析的數據包記錄前后應該有提示,比如tar.gz或者rar等。
(2)有些文件可能是txt文件、png文件等。
1.3數據包分析實戰
1.實戰數據包隨波逐流
該題為一個data.pcap抓包文件,需要獲取管理員的密碼才能獲取Flag值,通過前面的解題思路,可以通過linux進行字符串搜索,根據提示該字符會包含“pass”或者“=”關鍵字。
(1)執行關鍵字搜索命令
strings data.pcap | grep -i =
strings data.pcap | grep -i pass
即可獲取關鍵信息:
userid=spiveyp&pswrd=S04xWjZQWFZ5OQ%3D%3D
(2)url解碼
對S04xWjZQWFZ5OQ%3D%3D通過notepad的url解碼獲取為:
S04xWjZQWFZ5OQ==
(3)base64解密
S04xWjZQWFZ5OQ==明顯采用base64加密,通過nodepad的base64解密獲取管理員userid及pswrd值:userid=spiveyp&pswrd=KN1Z6PXVy9
(4)登錄系統即可獲取flag值
使用用戶名spiveyp和KN1Z6PXVy9登錄系統即可獲取Flag值。
2.實戰數據包無線加密
題目僅僅給出一個ctf.pcap文件,根據包頭文件LinkType值分析出該包為無線數據包,無線數據包一般都是包含密碼,需要進行解密。
(1)獲取解密密碼
在wireshark中獎ctf.pcap包另存為ctf.cap,在aircrack-ng -w password.txt ctf.cap進行破解,獲取密碼為password1,如圖2所示。
圖2獲取密碼值
(2)對ctf.pcap進行解包
執行命令airdecap-ng ctf.pcap -e ctf -p password1 -o me.cap,對ctf.pcap包進行解密,其中ctf為AP名稱,password1為密碼,生成me.cap包,如圖3所示。
圖3獲取原始數據包
(3)wireshark分析獲取Flag值
使用wireshark打開me.cap包,然后對HTTP協議進行分析,如圖4所示,獲取flag值:flag{H4lf_1s_3n0ugh}。
圖4分析HTTP協議獲取Flag值
(4)使用字符串搜索
可以使用另外一種方法:strings me | grep flag,如圖5所示來獲取flag值。
圖5通過strings命令來獲取flag值