戰(zhàn)應(yīng)用)
1. 從零到一Wireshark在CTF流量分析中的核心定位如果你剛接觸CTFCapture The Flag比賽尤其是像BUUCTF這樣的國(guó)內(nèi)知名賽事面對(duì)一個(gè)動(dòng)輒幾十兆甚至上百兆的.pcap或.pcapng流量包文件第一感覺(jué)很可能是無(wú)從下手。密密麻麻的數(shù)據(jù)包列表各種陌生的協(xié)議縮寫(xiě)感覺(jué)像在看天書(shū)。別慌這正是每個(gè)新手必經(jīng)之路。Wireshark本質(zhì)上是一個(gè)網(wǎng)絡(luò)協(xié)議分析器它的強(qiáng)大之處在于能將網(wǎng)絡(luò)上流動(dòng)的二進(jìn)制“比特流”翻譯成我們能看懂的應(yīng)用層數(shù)據(jù)。在CTF的Misc雜項(xiàng)或Web類題目中流量分析是高頻考點(diǎn)其核心定位就是從海量的、看似無(wú)序的網(wǎng)絡(luò)通信記錄中找到出題人故意隱藏或泄露的關(guān)鍵信息Flag。為什么流量包能藏Flag因?yàn)榫W(wǎng)絡(luò)是透明的。一次完整的HTTP訪問(wèn)、一次FTP文件傳輸、一次DNS查詢、甚至是一次可疑的ICMP“ping”請(qǐng)求所有數(shù)據(jù)交換的“元數(shù)據(jù)”和“載荷”都可能被記錄在案。出題人可能會(huì)把Flag藏在某個(gè)圖片文件的傳輸里HTTP流量編碼后放在DNS查詢的域名中DNS流量甚至是通過(guò)TCP流量的特定字段順序來(lái)隱寫(xiě)。你的任務(wù)就是扮演一個(gè)“網(wǎng)絡(luò)偵探”使用Wireshark這個(gè)“顯微鏡”從這些記錄中還原出完整的犯罪現(xiàn)場(chǎng)找到被竊取的“寶藏”Flag。對(duì)于新手而言直接上手分析復(fù)雜流量容易勸退。我的建議是先建立信心CTF流量分析題目的答案Flag一定在流量包里并且一定有相對(duì)高效的路徑可以抵達(dá)。出題人不是為了難倒你而難倒你而是希望你掌握某種特定的分析技巧。接下來(lái)我將結(jié)合在BUUCTF等平臺(tái)實(shí)戰(zhàn)中提煉出的5個(gè)核心技巧帶你一步步拆解流量包你會(huì)發(fā)現(xiàn)這一切都有跡可循。2. 實(shí)戰(zhàn)前夜Wireshark高效配置與過(guò)濾語(yǔ)法精要工欲善其事必先利其器。直接打開(kāi)Wireshark載入大流量包就開(kāi)干效率極低。正確的姿勢(shì)是先做好配置并熟練掌握過(guò)濾語(yǔ)法這能幫你瞬間過(guò)濾掉99%的無(wú)用噪音。2.1 關(guān)鍵界面配置與首選項(xiàng)優(yōu)化安裝完Wireshark后別急著抓包。首先進(jìn)入編輯 - 首選項(xiàng)。外觀 - 列默認(rèn)的列可能不夠用。我強(qiáng)烈建議添加兩列tcp.stream這是TCP流追蹤的命門(mén)。添加后每個(gè)TCP數(shù)據(jù)包都會(huì)顯示其所屬的“流”編號(hào)。同一會(huì)話比如一次完整的HTTP請(qǐng)求響應(yīng)的數(shù)據(jù)包會(huì)有相同的流編號(hào)。http.request.uri或http.file_data針對(duì)HTTP分析非常有用能直接在列表里看到請(qǐng)求的URI或文件數(shù)據(jù)片段。 添加方法點(diǎn)擊“”號(hào)字段名稱填入上述字段點(diǎn)擊確定即可。協(xié)議 - HTTP確?!敖鈮篏Zip內(nèi)容”是勾選的。很多Web服務(wù)器會(huì)返回GZip壓縮的數(shù)據(jù)不打開(kāi)這個(gè)選項(xiàng)你看到的就是亂碼。布局選擇你喜歡的布局我個(gè)人習(xí)慣“數(shù)據(jù)包列表”在上“數(shù)據(jù)包詳情”在中“數(shù)據(jù)包字節(jié)”在下這樣瀏覽效率最高。2.2 過(guò)濾表達(dá)式你的“手術(shù)刀”Wireshark的過(guò)濾欄是你最強(qiáng)大的武器。掌握它你就能從數(shù)據(jù)包海洋中撈出你想要的那根針。基礎(chǔ)過(guò)濾基于協(xié)議/地址http只看HTTP協(xié)議流量。dns只看DNS協(xié)議流量。ip.addr 192.168.1.100只看與這個(gè)IP地址相關(guān)的所有流量源或目標(biāo)。ip.src 192.168.1.1或ip.dst 10.0.0.1只看源IP或目標(biāo)IP。tcp.port 80或udp.port 53只看特定端口的流量。進(jìn)階過(guò)濾基于包內(nèi)容http.request.method GET只顯示HTTP GET請(qǐng)求。http contains “flag”或http contains “FLAG”在HTTP協(xié)議中搜索包含“flag”關(guān)鍵字的數(shù)據(jù)包。這是最常用的技巧之一但出題人不會(huì)這么直白。tcp contains “password”在TCP載荷中搜索“password”。dns.qry.name contains “secret”在DNS查詢的域名中搜索“secret”。組合過(guò)濾使用and與、or或、not非進(jìn)行組合。例如http and ip.addr 192.168.1.100只看該IP的HTTP流量。例如tcp.port 80 or udp.port 53只看Web和DNS流量。注意過(guò)濾表達(dá)式對(duì)大小寫(xiě)敏感且字段名中的點(diǎn)號(hào).是固定格式。當(dāng)你輸入時(shí)Wireshark會(huì)有自動(dòng)補(bǔ)全提示善用這個(gè)功能可以避免拼寫(xiě)錯(cuò)誤。實(shí)操心得面對(duì)一個(gè)新流量包我習(xí)慣先敲一個(gè)http看看Web流量是否活躍再敲dns看看有沒(méi)有奇怪的域名查詢。如果流量很大先用ip.addr過(guò)濾出疑似目標(biāo)題目描述可能給出IP線索或內(nèi)網(wǎng)IP如192.168.x.x,10.x.x.x的流量能極大縮小范圍。3. 核心技巧一Follow TCP/UDP/SSL Stream還原完整會(huì)話這是最重要、最核心、使用頻率最高的技巧沒(méi)有之一。單個(gè)數(shù)據(jù)包就像一封信的一頁(yè)紙而Follow Stream功能能把屬于同一次對(duì)話的所有“紙”按順序裝訂成冊(cè)讓你看到完整的“信件”。如何操作在數(shù)據(jù)包列表區(qū)右鍵任意一個(gè)TCP、UDP或SSL/TLS數(shù)據(jù)包 - 選擇追蹤流-TCP流/UDP流/SSL流。一個(gè)包含完整ASCII或EBCDIC碼表示的文本窗口會(huì)彈出。實(shí)戰(zhàn)解析以BUUCTF常見(jiàn)題型為例HTTP流這是最常見(jiàn)的。你可能會(huì)看到一個(gè)完整的HTTP交互GET /index.php?filesecret.txt HTTP/1.1 Host: target.com ...往下翻緊接著就是服務(wù)器的響應(yīng)HTTP/1.1 200 OK ... html... flag{this_is_a_secret} .../htmlFlag可能就直接在響應(yīng)的HTML、JSON數(shù)據(jù)里也可能在響應(yīng)頭如Flag: xxx中。TCP流非HTTP可能是一個(gè)自定義協(xié)議的通信。比如客戶端發(fā)送一串字符服務(wù)器返回一串字符。Flag可能就藏在其中一方的發(fā)送內(nèi)容里。關(guān)鍵點(diǎn)注意看流的內(nèi)容是否像Base64編碼末尾常有、十六進(jìn)制、或是有規(guī)律的偏移可能是凱撒密碼、異或等。Wireshark的流窗口默認(rèn)以ASCII顯示對(duì)于非打印字符會(huì)顯示為點(diǎn).此時(shí)要留意右下角的“顯示數(shù)據(jù)為”選項(xiàng)可以切換為“原始數(shù)據(jù)”、“C數(shù)組”等格式進(jìn)行復(fù)制。UDP流常見(jiàn)于DNS、TFTP等協(xié)議。DNS流里可能包含flag.badguy.com這樣的子域名查詢其Flag可能就編碼在子域名中如ZmxhZ3tleGFtcGxlfQ.badguy.com其中ZmxhZ3tleGFtcGxlfQ是flag{example}的Base64編碼。避坑指南Follow出來(lái)的流窗口默認(rèn)只顯示從A到B或從B到A的單向流。窗口左下角有“整個(gè)會(huì)話”、“客戶端到服務(wù)器”等選項(xiàng)。一定要選擇“整個(gè)會(huì)話”才能看到完整的來(lái)回對(duì)話避免遺漏關(guān)鍵信息。另外流內(nèi)容可以直接全選復(fù)制出來(lái)粘貼到文本編輯器或解碼工具中進(jìn)行下一步分析。4. 核心技巧二文件導(dǎo)出與協(xié)議深度挖掘流量包里經(jīng)常傳輸文件圖片、壓縮包、文檔等。Wireshark可以像“時(shí)光機(jī)”一樣把這些文件從網(wǎng)絡(luò)流量中提取出來(lái)。4.1 通用文件導(dǎo)出方法文件 - 導(dǎo)出對(duì)象 - HTTP...或DICOM、SMB等。這會(huì)列出所有通過(guò)該協(xié)議傳輸?shù)奈募D憧梢钥吹轿募?、?nèi)容類型如image/png、大小等。直接選中文件保存即可。這是找回被傳輸?shù)膱D片、文檔的最快方式。4.2 手動(dòng)提取原始數(shù)據(jù)對(duì)于非標(biāo)準(zhǔn)協(xié)議傳輸?shù)奈募蛘吣阆胩崛∧骋欢翁囟ǖ腡CP/UDP載荷需要使用“導(dǎo)出分組字節(jié)流”。首先使用Follow Stream功能找到包含文件數(shù)據(jù)的流。確認(rèn)文件的開(kāi)始和結(jié)束。在流窗口的“原始數(shù)據(jù)”或“十六進(jìn)制轉(zhuǎn)儲(chǔ)”視圖下精確選擇從文件頭開(kāi)始到文件尾結(jié)束的十六進(jìn)制數(shù)據(jù)注意不是ASCII文本。例如一個(gè)PNG圖片的頭是89 50 4E 47JPG是FF D8 FF E0。復(fù)制選中的十六進(jìn)制文本。使用外部工具如xxd、010 Editor、CyberChef將十六進(jìn)制文本還原為二進(jìn)制文件。Linux/Macecho -n “89504E47...” | xxd -r -p output.png使用CyberChef將復(fù)制的十六進(jìn)制文本粘貼到輸入?yún)^(qū)使用From Hex配方然后使用Save to file。4.3 協(xié)議深度挖掘以FTP為例有些協(xié)議本身就攜帶了文件操作指令。例如FTP協(xié)議。過(guò)濾ftp你可以看到USER、PASS登錄命令以及RETR下載、STOR上傳命令。如果看到RETR flag.txt或STOR secret.zip那么緊接著的數(shù)據(jù)包連接通常是另一個(gè)TCP端口里就包含了這個(gè)文件的內(nèi)容。你需要找到對(duì)應(yīng)的數(shù)據(jù)連接可能通過(guò)FTP的PORT或PASV命令建立的端口然后對(duì)這個(gè)數(shù)據(jù)連接進(jìn)行Follow TCP Stream就能看到文件的原始內(nèi)容。實(shí)操心得導(dǎo)出HTTP對(duì)象是最簡(jiǎn)單的優(yōu)先嘗試。如果沒(méi)找到再考慮手動(dòng)提取。手動(dòng)提取的關(guān)鍵是準(zhǔn)確識(shí)別文件頭尾。多積累常見(jiàn)文件的魔術(shù)字Magic Bytes這對(duì)CTF和逆向都很有幫助。另外Wireshark的“導(dǎo)出分組字節(jié)流”功能在數(shù)據(jù)包列表右鍵-“導(dǎo)出分組字節(jié)流”有時(shí)更方便它允許你直接導(dǎo)出選中數(shù)據(jù)包的原始字節(jié)但需要你事先通過(guò)過(guò)濾精準(zhǔn)定位到文件傳輸?shù)臄?shù)據(jù)包范圍。5. 核心技巧三字符串搜索與編碼識(shí)別當(dāng)Flag沒(méi)有明文出現(xiàn)或者會(huì)話流太多無(wú)從下手時(shí)全局搜索是“地毯式轟炸”的好方法。5.1 全局字符串搜索編輯 - 查找分組。搜索范圍選擇“分組字節(jié)流”字符串類型選擇“字符串”或“十六進(jìn)制值”。搜索常見(jiàn)Flag格式flag{、FLAG{、ctf{、key{。這是最直接的。搜索提示性詞匯題目描述可能暗示了關(guān)鍵詞如secret、password、hint、findme。搜索特殊字符有時(shí)Flag可能被編碼但包含特殊字符如Base64填充、%URL編碼、\uUnicode轉(zhuǎn)義。5.2 編碼識(shí)別與初步判斷在Follow Stream或搜索出的數(shù)據(jù)中如果看到一段奇怪的字符串如何判斷其編碼Base64字符集為A-Za-z0-9/長(zhǎng)度通常是4的倍數(shù)末尾可能有填充。例如ZmxhZw解碼后是flag。Hex十六進(jìn)制僅包含0-9a-fA-F長(zhǎng)度通常為偶數(shù)。例如666c6167解碼后是flag。URL編碼包含大量%符號(hào)如%66%6c%61%67解碼后是flag。HTML實(shí)體編碼如#102;#108;#97;#103;解碼后是flag。莫爾斯電碼、培根密碼等這需要觀察字符模式點(diǎn)/劃A/B分組。快速解碼工具我強(qiáng)烈推薦使用CyberChef這個(gè)在線工具。它集成了上百種編解碼、加密、壓縮操作可以像搭積木一樣把操作連起來(lái)比如 Base64解碼 - 十六進(jìn)制解碼 - ROT13解密。把可疑字符串丟進(jìn)去用常見(jiàn)的解碼配方From Base64, From Hex, URL Decode等試一下往往有奇效。注意事項(xiàng)全局搜索非常消耗資源對(duì)于超大流量包可能會(huì)卡頓甚至崩潰。建議先通過(guò)協(xié)議過(guò)濾如http縮小范圍后再搜索。另外搜索時(shí)注意大小寫(xiě)可以分別嘗試。有時(shí)出題人會(huì)把Flag進(jìn)行多層嵌套編碼比如Base64編碼后再進(jìn)行Hex編碼這就需要你在CyberChef里進(jìn)行多次解碼嘗試。6. 核心技巧四統(tǒng)計(jì)與端點(diǎn)分析發(fā)現(xiàn)異常行為當(dāng)流量中沒(méi)有明顯的文件傳輸或Flag字符串時(shí)攻擊者的異常行為模式可能就是突破口。Wireshark的統(tǒng)計(jì)功能提供了宏觀視角。6.1 會(huì)話統(tǒng)計(jì)Conversations統(tǒng)計(jì) - 會(huì)話。這個(gè)視圖列出了所有通信對(duì)IP A - IP B的流量統(tǒng)計(jì)包括數(shù)據(jù)包數(shù)、字節(jié)數(shù)。找“話癆”查看哪個(gè)IP地址發(fā)送或接收的數(shù)據(jù)包/字節(jié)數(shù)異常多它可能就是攻擊源或受害目標(biāo)。找“異常連接”一個(gè)內(nèi)網(wǎng)IP與大量外部IP進(jìn)行短暫通信可能是端口掃描行為?;蛘咭粋€(gè)客戶端與服務(wù)器在非常用端口非80、443上有大量通信這可能是一個(gè)后門(mén)或自定義服務(wù)。6.2 端點(diǎn)統(tǒng)計(jì)Endpoints統(tǒng)計(jì) - 端點(diǎn)。這個(gè)視圖按單個(gè)IP或MAC地址統(tǒng)計(jì)流量。功能與會(huì)話統(tǒng)計(jì)類似但視角更集中于單個(gè)主機(jī)。識(shí)別掃描行為如果某個(gè)IP向目標(biāo)網(wǎng)段的大量不同端口發(fā)送了SYN包TCP連接請(qǐng)求但在會(huì)話統(tǒng)計(jì)中這些連接大多沒(méi)有后續(xù)數(shù)據(jù)交換即未完成三次握手這很可能是端口掃描。6.3 協(xié)議分級(jí)統(tǒng)計(jì)Protocol Hierarchy統(tǒng)計(jì) - 協(xié)議分級(jí)。以樹(shù)狀圖顯示各層協(xié)議的流量占比。發(fā)現(xiàn)非常用協(xié)議如果在一個(gè)看似普通的Web訪問(wèn)流量中出現(xiàn)了占比異常的協(xié)議比如ICMP、TELNET、IRC或者有大量的DNS查詢遠(yuǎn)超正常網(wǎng)頁(yè)瀏覽所需這些協(xié)議就值得深入調(diào)查。例如Flag可能通過(guò)ICMP的ping數(shù)據(jù)包載荷Data字段進(jìn)行外傳ICMP隧道。實(shí)戰(zhàn)應(yīng)用在BUUCTF的一道題目中我打開(kāi)協(xié)議分級(jí)發(fā)現(xiàn)除了HTTP還有相當(dāng)比例的TELNET流量。這極不正常因?yàn)門(mén)ELNET是明文傳輸?shù)墓爬蠀f(xié)議。我立刻過(guò)濾telnetFollow TCP Stream果然在登錄后的交互命令中發(fā)現(xiàn)了操作系統(tǒng)的命令執(zhí)行記錄并最終在其中找到了Flag。統(tǒng)計(jì)功能幫你從“大海”定位到“可疑海域”然后再用過(guò)濾和Follow Stream這些“潛水工具”去海底撈針。7. 核心技巧五高級(jí)過(guò)濾與顯示字段技巧掌握了基礎(chǔ)過(guò)濾后一些高級(jí)過(guò)濾和顯示技巧能讓你如虎添翼。7.1 過(guò)濾特定長(zhǎng)度的數(shù)據(jù)包攻擊者有時(shí)會(huì)把數(shù)據(jù)藏在特定大小的數(shù)據(jù)包里。tcp.len 100過(guò)濾TCP載荷長(zhǎng)度恰好為100字節(jié)的數(shù)據(jù)包。udp.length 50過(guò)濾UDP載荷長(zhǎng)度恰好為50字節(jié)的數(shù)據(jù)包。frame.len 64過(guò)濾整個(gè)幀包括鏈路層頭長(zhǎng)度為64字節(jié)的數(shù)據(jù)包可能是特殊的控制幀或心跳包。7.2 過(guò)濾包含特定字節(jié)模式的數(shù)據(jù)包這比字符串搜索更底層可以找到非打印字符的模式。tcp.payload matches “\\x89PNG”過(guò)濾TCP載荷中包含PNG文件頭十六進(jìn)制89 50 4E 47的數(shù)據(jù)包。注意\x后面跟兩個(gè)十六進(jìn)制數(shù)字。udp.payload[0:2] “\\xff\\xd8”過(guò)濾UDP載荷的前兩個(gè)字節(jié)是JPG文件頭FF D8的數(shù)據(jù)包。[0:2]表示從偏移0開(kāi)始取2個(gè)字節(jié)。7.3 自定義列與著色規(guī)則自定義列如前所述添加tcp.stream列至關(guān)重要。你還可以添加http.content_type來(lái)快速識(shí)別文件類型。著色規(guī)則視圖 - 著色規(guī)則。你可以創(chuàng)建自己的規(guī)則比如將所有包含字符串flag的數(shù)據(jù)包標(biāo)記為亮綠色這樣它們?cè)诹斜碇袝?huì)非常醒目?;蛘邔NS流量染成淺藍(lán)色HTTP流量染成黃色便于視覺(jué)區(qū)分。實(shí)操心得高級(jí)過(guò)濾通常用于解決“奇葩”題目。比如一道題Flag被分割成很多份放在一系列長(zhǎng)度固定的ICMP Echo Request包里。用icmp and frame.len 98過(guò)濾后一下子就得到了所有相關(guān)數(shù)據(jù)包再導(dǎo)出其Data字段拼接即可。自定義著色規(guī)則在長(zhǎng)期分析中能極大提升效率讓你的眼睛快速聚焦到關(guān)鍵信息上。8. BUUCTF真題實(shí)戰(zhàn)解析從流量到Flag的完整推演讓我們用一個(gè)虛構(gòu)但融合了BUUCTF常見(jiàn)考點(diǎn)的綜合案例來(lái)串聯(lián)運(yùn)用上述技巧。假設(shè)我們拿到一個(gè)名為mystery.pcapng的流量包。第一步初步偵察與協(xié)議概覽打開(kāi)文件先看協(xié)議分級(jí)。發(fā)現(xiàn)主要流量是HTTP和DNS有少量ICMP??倲?shù)據(jù)包數(shù)約5000個(gè)不算大。第二步優(yōu)先檢查HTTP流量過(guò)濾http。瀏覽列表發(fā)現(xiàn)有幾個(gè)對(duì)/upload.php的POST請(qǐng)求和一個(gè)對(duì)/flag.zip的GET請(qǐng)求。后者立刻引起注意。右鍵這個(gè)GET請(qǐng)求的數(shù)據(jù)包 -追蹤流-TCP流。在服務(wù)器響應(yīng)中看到了HTTP/1.1 200 OK和Content-Type: application/zip。太好了有一個(gè)zip文件被下載了。文件 - 導(dǎo)出對(duì)象 - HTTP...果然在列表里看到了flag.zip保存它。第三步處理導(dǎo)出的文件嘗試解壓flag.zip發(fā)現(xiàn)需要密碼。密碼很可能在流量包里。 回到Wireshark在剛才的HTTP流窗口顯示整個(gè)會(huì)話仔細(xì)看客戶端下載者之前的請(qǐng)求。在GET/flag.zip之前有一個(gè)POST請(qǐng)求到/login.php表單數(shù)據(jù)是usernameadminpassword7c6a180b36896a0a8c02787eeafb0e4c。這串7c6a...看起來(lái)像MD5哈希值。使用CyberChef或在線MD5解密網(wǎng)站嘗試破解。運(yùn)氣好這是一個(gè)常見(jiàn)密碼的MD5比如password1。用這個(gè)密碼成功解壓flag.zip里面是一個(gè)flag.txt打開(kāi)一看只有一行The final flag is not here. Look into the DNS.第四步轉(zhuǎn)向DNS流量過(guò)濾dns。發(fā)現(xiàn)大量對(duì)類似s3cr3t1.badguy.com、s3cr3t2.badguy.com... 的A記錄查詢。子域名部分是連續(xù)的s3cr3t加數(shù)字。右鍵任意一個(gè)DNS查詢包 -追蹤流-UDP流。在流內(nèi)容中可以看到查詢的完整域名。將所有查詢的域名子部分s3cr3t1,s3cr3t2...按順序提取出來(lái)。發(fā)現(xiàn)它們看起來(lái)像Base64czNjcgczNjcg... 但似乎不完整??紤]到DNS標(biāo)簽長(zhǎng)度限制63字節(jié)可能Flag被分片了。將所有這些子域名字符串拼接起來(lái)czNjcgczNjcg...。但直接Base64解碼是亂碼。嘗試每段單獨(dú)解碼czNjcg-s3cr。將所有解碼結(jié)果拼接s3cr3ts3cr3t...。這看起來(lái)像重復(fù)的單詞。靈光一現(xiàn)會(huì)不會(huì)是每個(gè)子域名對(duì)應(yīng)一個(gè)字符的編碼仔細(xì)看s3cr3t1解碼后是s3cr這不對(duì)。換個(gè)思路也許子域名本身就是編碼后的字符串。s3cr3t1去掉數(shù)字1得到s3cr3t這像是“secret”的變體leet語(yǔ)。數(shù)字可能是索引。提取所有子域名的核心部分和數(shù)字(s3cr3t,1),(s3cr3t,2)... 這沒(méi)有幫助。回到最初的思路s3cr3t1.badguy.com 嘗試把s3cr3t1整體進(jìn)行Base32、Base58、Base91解碼或者會(huì)不會(huì)是十六進(jìn)制s3cr3t1包含字母和數(shù)字但g,u,y等超出了0-9a-f范圍不是純Hex。使用高級(jí)過(guò)濾dns.qry.name contains “badguy.com”過(guò)濾出所有相關(guān)查詢。然后使用tsharkWireshark的命令行版本快速提取字段tshark -r mystery.pcapng -Y “dns.qry.name contains badguy.com” -T fields -e dns.qry.name。將輸出保存到文件再用腳本處理。寫(xiě)一個(gè)簡(jiǎn)單的Python腳本提取每個(gè)域名的子部分去掉.badguy.com和末尾的數(shù)字然后拼接。假設(shè)提取到s3cr3tpasswordis3cr3tpasswordi... 這看起來(lái)像“s3cr3tpasswords3cr3tpassword”的循環(huán)不對(duì)。換個(gè)角度題目提示“Look into the DNS” 會(huì)不會(huì)是DNS隧道一種常見(jiàn)的DNS隧道工具如iodine會(huì)將數(shù)據(jù)編碼到子域名中。其編碼模式可能是Base32。將子域名部分如s3cr3t1嘗試進(jìn)行Base32解碼。標(biāo)準(zhǔn)Base32字符集是A-Z2-7而s3cr3t1包含小寫(xiě)字母和數(shù)字需要先轉(zhuǎn)大寫(xiě)。S3CR3T1進(jìn)行Base32解碼... 得到亂碼??赡懿皇?。最終發(fā)現(xiàn)在反復(fù)查看DNS流時(shí)注意到除了A記錄查詢還有大量的TXT記錄查詢過(guò)濾dns and dns.qry.type 16TXT類型。果然有一系列對(duì)chunk1.badguy.com、chunk2.badguy.com... 的TXT查詢。追蹤這些TXT查詢的響應(yīng)包。在響應(yīng)中TXT記錄字段包含了一段段Base64編碼的字符串。將所有TXT記錄里的Base64字符串按chunk后的數(shù)字順序拼接然后解碼最終得到了完整的Flagflag{dns_txt_exfil_is_cool}。復(fù)盤(pán)這道題綜合考察了HTTP文件導(dǎo)出、密碼破解、DNS協(xié)議分析、多種編碼識(shí)別以及數(shù)據(jù)提取和拼接的能力。關(guān)鍵轉(zhuǎn)折點(diǎn)在于從HTTP的假Flag提示轉(zhuǎn)向DNS并且沒(méi)有局限于常見(jiàn)的A記錄而是發(fā)現(xiàn)了更隱蔽的TXT記錄傳輸。這要求分析者不僅會(huì)工具操作還要有攻擊者思維了解數(shù)據(jù)外泄Exfiltration的多種渠道。9. 常見(jiàn)問(wèn)題排查與獨(dú)家避坑技巧在實(shí)際操作中你會(huì)遇到各種奇怪的問(wèn)題。這里記錄了一些我踩過(guò)的坑和總結(jié)的技巧。Q1Follow TCP Stream窗口里顯示的都是亂碼/十六進(jìn)制看不到文字A1這通常發(fā)生在非HTTP的TCP連接上比如加密流量SSL/TLS或純二進(jìn)制協(xié)議。首先檢查左下角是否誤選了“十六進(jìn)制轉(zhuǎn)儲(chǔ)”視圖切換回“ASCII”。如果還是亂碼那說(shuō)明傳輸?shù)木褪欠俏谋緮?shù)據(jù)。此時(shí)“十六進(jìn)制轉(zhuǎn)儲(chǔ)”視圖反而是有用的你可以在這里復(fù)制原始的十六進(jìn)制值進(jìn)行下一步分析如圖片提取、自定義解碼。對(duì)于SSL/TLS流量除非你有私鑰否則無(wú)法解密但題目通常不會(huì)給加密流量讓你解密除非特別說(shuō)明。Q2過(guò)濾表達(dá)式輸入正確但提示語(yǔ)法錯(cuò)誤A2最常見(jiàn)的原因字段名拼寫(xiě)錯(cuò)誤。善用自動(dòng)補(bǔ)全。比較的值類型不匹配。比如tcp.port “80”字符串和tcp.port 80整數(shù)在舊版本W(wǎng)ireshark中可能表現(xiàn)不同建議用整數(shù)。包含空格或特殊字符的字符串值需要用雙引號(hào)括起來(lái)如http.request.uri contains “/admin/login”。Q3導(dǎo)出的文件如圖片損壞打不開(kāi)A3這通常是因?yàn)樘崛〉臄?shù)據(jù)范圍不準(zhǔn)確。對(duì)于HTTP導(dǎo)出確保導(dǎo)出的是完整的響應(yīng)體。Wireshark的導(dǎo)出對(duì)象功能通常是可靠的。對(duì)于手動(dòng)提取務(wù)必確認(rèn)你復(fù)制的十六進(jìn)制數(shù)據(jù)完整且精確地包含了文件的所有字節(jié)從文件頭魔術(shù)字開(kāi)始到文件結(jié)束標(biāo)記為止。多一個(gè)或少一個(gè)字節(jié)都會(huì)導(dǎo)致文件損壞。對(duì)于PNG、ZIP等有明確結(jié)構(gòu)的文件可以使用binwalk或foremost工具嘗試從你保存的原始二進(jìn)制文件中自動(dòng)掃描并提取嵌入的文件有時(shí)能救回來(lái)。Q4流量包太大Wireshark卡死怎么辦A4先過(guò)濾后分析不要在全量數(shù)據(jù)包上做任何耗資源的操作如全局搜索、統(tǒng)計(jì)圖表。先用ip.addr、tcp.port、http等過(guò)濾條件大幅縮小范圍。使用tshark命令行工具對(duì)于簡(jiǎn)單的提取、統(tǒng)計(jì)任務(wù)tshark比GUI更高效。例如提取所有HTTP請(qǐng)求的URLtshark -r huge.pcap -Y http -T fields -e http.request.full_uri urls.txt。分割流量文件文件 - 導(dǎo)出特定分組可以按時(shí)間或過(guò)濾器結(jié)果保存一個(gè)小范圍的數(shù)據(jù)包然后分析這個(gè)小文件。獨(dú)家避坑技巧養(yǎng)成“標(biāo)記”習(xí)慣在分析過(guò)程中對(duì)重要的數(shù)據(jù)包如發(fā)現(xiàn)可疑請(qǐng)求、關(guān)鍵響應(yīng)右鍵點(diǎn)擊“標(biāo)記/取消標(biāo)記分組”快捷鍵CtrlM。被標(biāo)記的數(shù)據(jù)包會(huì)高亮顯示。這樣在來(lái)回翻閱時(shí)能快速定位。善用“復(fù)制”功能在數(shù)據(jù)包詳情面板右鍵任意字段可以選擇“復(fù)制” - “值”、“As Filter”、“描述”等。其中“As Filter”非常有用它能自動(dòng)生成一個(gè)過(guò)濾表達(dá)式精確匹配當(dāng)前字段。例如在一個(gè)HTTP數(shù)據(jù)包詳情里右鍵Hypertext Transfer Protocol下的Host字段的值選擇“作為過(guò)濾器應(yīng)用” - “選中”就會(huì)自動(dòng)生成http.host “target.com”的過(guò)濾表達(dá)式并應(yīng)用。時(shí)間就是線索關(guān)注數(shù)據(jù)包的時(shí)間戳?xí)r間列。一次完整的攻擊鏈其數(shù)據(jù)包在時(shí)間上往往是連續(xù)的。如果發(fā)現(xiàn)某個(gè)時(shí)間點(diǎn)突然出現(xiàn)大量密集的ICMP或DNS請(qǐng)求這可能就是數(shù)據(jù)外傳開(kāi)始的信號(hào)。你可以通過(guò)frame.time “某時(shí)某分”這樣的過(guò)濾表達(dá)式來(lái)聚焦特定時(shí)間段。最后也是最重要的心得保持耐心和好奇心。CTF流量分析就像解謎有時(shí)需要嘗試多種思路。當(dāng)一條路走不通時(shí)回到起點(diǎn)重新審視協(xié)議分級(jí)、端點(diǎn)統(tǒng)計(jì)看看有沒(méi)有遺漏的“異常點(diǎn)”。每一次成功的分析都會(huì)讓你對(duì)網(wǎng)絡(luò)協(xié)議和攻擊手法有更深的理解。這份理解遠(yuǎn)比拿到一個(gè)Flag更有價(jià)值。