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