# wireshark ## 一點先備知識🍘🧀 * 公用 IP 位址 * 公用 IP 位址向其 Internet 服務提供者 (ISP) 和 Internet 的其餘部分識別電腦。 公用 IP 位址可以唯一地識別一台電腦或充當專用網路的共用存取點 * 私有 IP 位址 * 識別本地網路內的電腦 * 範圍 * 192.168.0.0–192.168.255.255(65,536 個 IP 位址) * 172.16.0.0–172.31.255.255(1,048,576 個 IP 位址) * 10.0.0.0–10.255.255.255(16,777,216 個 IP 位址) * Ports * Ports 0 to 1023 are Well-Known Ports. * 通常被指派給特定的網路服務 * 21:FTP(File Transfer Protocol) * 22:SSH(Secure Shell) * 80:HTTP(HyperText Transfer Protocol) * 443:HTTPS(HyperText Transfer Protocol Secure) * Ports 1024 to 49151 are Registered Ports. * 通常用於特定的應用程式或專有軟體 * 3306:MySQL 資料庫 * 5432:PostgreSQL 資料庫 * 27017:MongoDB * Ports 49152 to 65535 are Public Ports. * 通常用於臨時連線(Ephemeral Ports) * 例如當用戶端連接到伺服器時,系統會自動分配一個動態端口來處理回應 ## 常用選項 ### 統計(Statistics)功能 * 協議分級 * Statistics → Protocol Hierarchy * 會顯示封包中 不同協議的比例 * 分析封包裡的 協議組成比例,看看主要的通訊是什麼 * CTF 中可以用來判斷**是否有不尋常的協議?**(例如比賽題目裡偷偷用了某個不常見的協議來藏 flag) * 查詢常見IP * Statistics -> Conversations -> IPv4 -> Bytes(點擊兩次可使從大到小排序) * 可以列出 **封包最多或流量最高的IP**,幫助找出 **主要通訊的IP** 位址 * 在CTF中,通常用來 **找出有價值的 IP** 來進一步分析 ### 檢視下載的資源 * File -> Export Objects -> HTTP (Figure) * Wireshark 會列出所有 透過 HTTP 下載的檔案(例如 .exe, .png, .zip 等) * 選擇檔案 → 點擊「Save」存下來 * 除了 HTTP,也可以試試: * Export Objects → SMB(Windows 共享檔案) * Export Objects → FTP(FTP 傳輸的檔案) * CTF 常見考點:下載被隱藏的檔案,看看裡面藏了什麼(可能是 flag) ## 過濾指令 ### 過濾協議 * 直接輸入協議名即可過濾出對應數據。例如: * tcp:顯示所有 TCP 數據 * udp:顯示所有 UDP 數據 * arp、icmp、http、smtp、ftp、dns、ssl、ssh 等同理 ### 過濾IP * 常用字段: * ip.src:源 IP 地址 * ip.dst:目標 IP 地址 * ip.addr:匹配數據中出現的任一IP 地址(即包括源及目標) * 🌰過濾某個IP的數據:`ip.src == 192.168.1.100 or ip.dst == 192.168.1.100` or `ip.addr == 192.168.1.100` * 不等於 * Wireshark不支持直接用 `!=` 表達不等,需要用 `not ...==... `或 `!` 來表達 * 🌰過濾出TCP端口不為3389 & IP位址不為10.135.71.54 & 端口不為80 : `not tcp.port == 3389 and not ip.addr == 10.135.71.54 and not tcp.port == 80 ` ### 過濾端口 * 常用字段: * tcp.port:匹配 TCP 數據中(包括源及目標)的端口號 * tcp.srcport 與 tcp.dstport:分别表示 TCP 源端口和目標端口 * udp.port:匹配 UDP 數據的端口號 * 🌰過濾TCP端口443:`tcp.port eq 443` ### 過濾方向 * 有時候需要區分流量的方向 * 常用關鍵字 * 對IP : `src`、`dst`、`src and dst`、`src or dst` * 對端口 : `srcport`、`dstport`、`srcport and dstport`、`srcport or dstport` * 🌰源IP為10.0.0.1 : `ip.src == 10.0.0.1` ### 過濾HTTP * 過濾http模式 * `http.request.method == "HEAD"` * `http.request.method == "GET"` * `http.request.method == "POST"` * 模糊匹配字符串 * 有時候flag或關鍵信息可能隱藏在URL、Server字段或整個HTTP數據中 * 🌰在URL中包含特定字符串:`http.request.uri contains "string"` * 🌰整個HTTP數據中包含某字符串:`http contains "string"` ### tcp stream過濾 * 篩選屬於同一TCP流的數據,便於對話重組和整體分析 * 🌰查看TCP流5的數據 : `tcp.stream eq 5` ### 過濾字串 * 用 `contains` 來過濾字串 : * **模糊搜尋**,只要有包含該字串就會被篩選出來 * `http contains "flag"`:搜尋 HTTP 協議的封包內容中有出現 `"flag"` 字樣的 * `tcp contains "login"`:搜尋 TCP 的 Payload 裡有 `"login"` 的封包 * `dns.qry.name contains "example.com"`:DNS 查詢中包含特定域名 * 萬用搜尋 : * `frame contains "string"`:搜尋整個封包(不管哪一層)中出現 `"string"`的封包 ## CTF常見題型 ### PCAP分析 * 給一個PCAP檔案,需要利用wireshark篩選出關鍵信息,如隱藏的字符串、密碼、用戶名或flag * 常見技巧 * 使用**filter**排除無關流量 * 利用 **follow TCP stream** 重組會話數據 * 結合 **Export Objects**功能提取HTTP、FTP等協議中傳輸的文件 ### HTTP 流量分析 * 分析HTTP請求和響應數據,從中提取隱藏信息 * 常見技巧: * 過濾出 GET/POST 請求 * 搜尋請求中包含的數據、Cookie、User-Agent等 * 檢查響應包中的HTML或JSON數據 ### USB流量分析 * 提供USB流量抓包,考察選手對USB協議中鍵盤輸入或鼠標移動數據的解析能力 * 常見技巧 * 根據數據包長度和格式區分鍵盤和鼠標流量 * 利用過濾命令,如過濾數據包中某字節範圍(如USB數據中第三個字節代表鑑碼) * 編寫腳本將提取出的鑑碼映射為實際按鍵,從而重構出輸入的內容 ### 工控協議流量分析 * 工控協議(如Modbus、IEC 104、MMS)等,需分析協議數據並從中提取FLAG * 常見技巧 * 利用過濾器定位特定功能碼或命令 * 根據協議結構找到數據段,進行數據提取和轉碼 * 結合wireshark的統計功能(如協議分級、TCP流號) 定位異常或關鍵流量 ### 隱寫或異常流量 * 流量中可能隱藏有編碼、加密或經過隱寫處理的數據,需結合其他工具進行解碼和還原 * 常見技巧 * 利用過濾器查找包含特殊標誌的字符串或字節序列 * 導出 payload數據後嘗試不同的解碼方式 * 分析數據包中的異常字段,如錯誤的校驗和、非標準端口 等 ## 題目練習 [CTF Academy](https://ctfacademy.github.io/network/index.htm#NetworkForensics) :::spoiler [Wireshark doo dooo do doo...](https://play.picoctf.org/practice/challenge/115?category=4&page=4) 題目給了一個pcapng檔,用wireshark打開他 打開會看到一堆TCP其中夾雜一點HTTP 在其中一個TCP封包上選擇follow -> TCP stream 然後不斷調整stream的數字,最後在第五個找到很像flag的東西 看起來就是凱撒密碼,拿去做解密就是flag! ::: :::spoiler [Wireshark twoo twooo two twoo...](https://play.picoctf.org/practice/challenge/110?category=4&page=4) 這題一樣是給了一個pcapng檔 打開來之後我先照著上一題那樣選follow -> TCP stream 翻了一下找到一個picoCTF的字串,繼續往後翻,又翻到一堆picoCTF開頭字串 觀察這幾個有甚麼共通點,發現他的Host都是18.217.1.57 用過濾器過濾出每個Host:18.217.1.57,用`ip.src ==18.217.1.57` 發現一堆HTTP跟DNS中夾雜著一些DNS,觀察一下發現看起來像base64的東西 再把dns也過濾出來` ip.src ==18.217.1.57 && dns` 把每個.reddshrimpandherring.com.windomain.local前的字串提取出來拿去做base64解碼,就是flag了 ! ::: :::spoiler [shark on wire 1](https://play.picoctf.org/practice/challenge/30?category=4&page=5) 打開後觀察一下,他跟之前寫的有點不一樣,他比較多的是ARP跟UDP 一樣follow TCP stream試試看,發現啥都沒有 換選擇follow UDP stream,不斷往後按就找到flag了 ::: [shark on wire 2](https://play.picoctf.org/practice/challenge/84?category=4&page=4) :::spoiler [PcapPoisoning](https://play.picoctf.org/practice/challenge/362?category=4&page=2&search=) 這題給了一個封包,裡面充滿各種東西 好幾個裡面都寫一樣的東西 一個一個找太久了用filter來搜尋 `frame contains "pico"` 找所有封包內容中有出現 "pico" 的位置  找到flag了! ::: :::spoiler [Packets Primer](https://play.picoctf.org/practice/challenge/286?category=4&page=1&search=Packets%20Primer) 這題給了一個pcap檔案 打開來只有少少幾個封包 翻了一下就在其中一個封包裡面看到flag了  ::: :::spoiler [Eavesdrop](https://play.picoctf.org/practice/challenge/264?category=4&page=1&search=Eavesdrop) 這題給了一個pcap,打開之後是一些tcp封包 先用follow tcp stream 在 stream 0 可以看到一段對話,告訴我們解密方法跟去哪找密文~~但其實我發現繼續翻tcp stream就可以看到了根本不用搜port~~ 找到之後要**先將他翻成hex格式**,不能用ascii格式 然後要存成binary格式 `echo "53616c7465645f5f3c4b26e8b8f91e2c4af8031cfaf5f8f16fd40c25d40314e6497b39375808aba186f48da42eefa895" | xxd -r -p > file.des3` 然後用題目給的解密方法 `openssl des3 -d -salt -in file.des3 -out file.txt -k supersecretpassword123` 打開解密出來的檔案就是flag了  ::: ## 參考資料 [What is an IP Address](https://www.checkpoint.com/tw/cyber-hub/network-security/what-is-an-ip-address/) [wireshark常用过滤命令](https://cloud.tencent.com/developer/article/1618433) [Wireshark Basics (HTTP Traffic Analysis) for playing CTF Competitions](https://medium.com/@yansi.keim/wireshark-basics-http-traffic-analysis-for-playing-ctf-competitions-f165778e99e2)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up