緯育 2026-0515

出自頂極製作所
於 2026年5月15日 (五) 13:48 由 Kuyohong留言 | 貢獻 所做的修訂

本次講座主要介紹了網路資訊收集與封包處理的工具與技術。前半部分介紹了Shodan和Fofa這類被動資訊收集網站,示範如何搜尋網路上暴露的伺服器、網路攝影機等設備資訊,並說明其搜尋語法與使用限制。後半部分深入探討了基於Python的強大封包處理工具Scapy,從其簡易性與基本操作開始,詳細闡述了Scapy的功能、優勢、運作邏輯及使用方法。課程涵蓋了如何定義與堆疊網路協定層(如IP、TCP、ICMP、ARP)、查看與修改封包內容、以及使用send、sendp、sr、sr1等指令發送封包並接收回應。此外,還介紹了多種實用的輔助函式,如獲取網路介面資訊、產生隨機MAC/IP位址等。最後,透過取得閘道器MAC位址的實際案例,展示了Scapy的彈性與多種操作方法,並預告下午課程將深入探討TCP服務偵測與防火牆偵測的理論與實作。

被動資訊收集工具

  • Shodan介紹
    • 被稱為「暗黑Google」,主要收集Google不收錄的主機相關資訊,如伺服器、Locker等。
    • 擁有自己的搜尋語法,但非免費服務,價格從每月69美元到1099美元不等。
    • 未註冊會員(依賴IP)使用次數有限(約兩三次),之後會被要求付費或登錄。
    • 註冊免費帳號後,每天有10次搜尋額度。
    • 搜尋結果會分類呈現(如國家、服務類型),並列出符合條件的機器列表。
  • Fofa介紹
    • 由中國開發的網路空間資產搜尋工具,功能與Shodan類似。
    • 同樣使用特定語法進行搜尋,例如尋找開放FTP服務(Port 21或20)的設備。
  • 工具使用與限制
    • 講師嘗試演示搜尋FTP、遠端桌面(Port 3389)和網路攝影機,但因現場使用次數耗盡而失敗。
    • 強調使用這些工具會被記錄IP,多次嘗試後會被限制。

Scapy封包處理工具

  • Scapy基本介紹與入門
    • Scapy是一個用Python寫的封包處理程式,核心是讓使用者自訂、偽造、發送及解碼封包,達到「只有你想不到,沒有你做不到」的靈活性。
    • 可用於網路測試、掃描、追蹤分析及網路攻擊,能替代arpspoof、nmap、hping等多種資安工具。
    • 啟動與安裝:
      • 啟動指令為 sudo scapy,建議使用 sudo 以確保權限。
      • 安裝方式包括使用Kali Linux內建版、在Ubuntu上用apt安裝,或直接從官方管道安裝最新版。
  • Scapy的運作與優點
    • 運作邏輯:製作封包 -> 發送封包 -> 接收封包。
    • 高度靈活性:可直接用Scapy語法構建特定修改過的封包,無需尋找現成工具。
    • 邏輯簡單:操作流程直觀。
    • 速度快:一行指令即可完成封包的製作與發送。
    • 不主動解讀封包:與Wireshark不同,Scapy只會將封包的原始值解碼後顯示,不進行額外翻譯(如告知這是Echo Reply)。
  • 建立與查看封包
    • 使用變數建立封包:透過Python語法建構封包並存入變數,如 p = IP(dst="github.com")/ICMP()。
    • 查看協定欄位與內容:
      • [協定名稱]().display() 或 show():列出某協定所有可用的欄位。
      • ls([協定名稱]):列出協定的欄位及其預設值。
      • [變數].show2():查看封包的詳細堆疊結構與各欄位的值。
      • 直接輸入變數名:顯示封包摘要資訊。
  • 修改與發送封包
    • 修改封包:可直接修改變數封包中的欄位,如 pkttest2['IP'].dst = "192.168.1.1"。
    • 發送指令:
      • send():僅發送三層(Layer 3)以上封包,二層資訊由系統自動填寫,為「發後不理」指令。
      • sendp():發送二層(Layer 2)封包,允許使用者自訂二層標頭。
      • sr():發送封包並等待接收所有回應,直到手動中斷。
      • sr1():發送一個封包並只等待接收一個回應。
      • srp() 和 srp1():對應sr()和sr1(),但用於發送二層封包。
    • 發送參數:可使用 inter(間隔)、loop(循環)、count(數量)等參數。
  • Scapy的預設行為與注意事項
    • 自動填入欄位:若未指定,Scapy會填入預設值,如本機IP/MAC、相近的來源埠號、以及自動計算的校驗和,可能洩漏自身資訊。
    • 自動路由判斷:若有多個網路介面,會自動判斷並選擇路由。
    • 效能問題:因Python效能限制,大量發送封包時可能出現延遲,建議搭配Wireshark等抓包工具確認。
  • Scapy的實用輔助函式
    • 網路介面資訊:getiflist() (所有介面), getifaddr('eth0') (IP位址), getifhwaddr('eth0') (MAC位址)。
    • 快速獲取MAC位址:getmacbyip("192.168.10.2") 可直接透過IP取得MAC位址。
    • 產生隨機資料:
      • RandomMAC(): 產生隨機MAC位址。
      • RandomIP(): 產生隨機IP位址,可用於洪水攻擊。
      • RandShort(): 產生亂數數字,適用於TCP的Sequence Number。
      • RandNum(min, max): 產生指定範圍的隨機數字。
      • RandString(size): 產生指定長度的隨機位元組字串。
  • Scapy的應用實例
    • 取得Gateway的MAC位址:
      • 方法一(單行指令): sr1(ARP(op=1, pdst="192.168.10.2")),直接在指令中建構ARP請求。
      • 方法二(變數封包): 先建立ARP封包變數 ansmac = ARP(op=1, pdst="192.168.10.2"),再用 sr1(ans_mac) 發送。
    • 其他應用:收集主機存活資訊、偵測TCP/UDP服務、偵測防火牆、利用殭屍主機進行Idle Scan等,皆需基於對TCP理論的深刻理解。

2026-0515-01.png

使用 Scapy 進行 ARP 掃描(區域網路)

  • 封包構造:Ether 目的廣播 FF:FF:FF:FF:FF:FF;ARP op=1,pdst 為字串形式的目標 IP 範圍。ARP 僅適用 L2,無法跨網段。
  • 目標範圍:以變數 target 使用 net 表示,如 192.168.10.1–100。
  • 發送與等待:srp 批量發送;timeout(區網建議 1s)、inter(示範 100ms)、verbose 可關閉;回應容器 ans/unans,以 ans.summary() 快速列出存活主機。
  • 回應解讀:有機器且開機會回 ARP 回覆(op=2);無機器/關機無回覆;示範辨識 192.168.10.2、192.168.10.138。

使用 Scapy 進行 ICMP Echo(Ping)掃描(外部網段)

  • 封包構造:IP 目標為 CIDR 範圍(168.95.1.0/24),ICMP type=8, code=0,可攜帶自訂 data。
  • 發送與等待:sr;timeout 建議 1s;inter 約 100ms,254 台約 20 多秒;可用 Wireshark觀察。
  • 回應情境:回 Echo Reply(type=0)則確定目標可達;無回應可能是關機、IP錯或防火牆丟棄。示範回應主機含 .1、.20、.190、.192、.254。

以 TCP 三方交握原理進行服務探測

  • 判讀邏輯:送 SYN 至目標 dport,收 SYN-ACK 判定服務開啟;收 RST 判定未開(防火牆例外);無回應可能為防火牆靜默。
  • 埠位範例:21/FTP、22/SSH、53/DNS(亦可 TCP)、80/HTTP、443/HTTPS、8080/管理後台、5901/VNC、33669(示例)。
  • 封包設定:IP dst=target;TCP dport=清單,sport可自訂但不建議固定以免異常;觀察 SYN-ACK/RST。
  • 逾時與間隔:timeout 約 2s;inter 100–200ms,避免 burst 引人注意;可先以已知開放埠(如80/443)校準。

防火牆偵測與 Nmap 判讀(TCP/UDP/ICMP)

  • TCP ACK 探測:對目標埠送 ACK(未建立連線的異常 ACK)。常見回應:
    • RST:多為無防火牆的堆疊反應(非絕對)。
    • ICMP Type 3 Code 1/2/3/9/10/13:可確定有防火牆(Code13為管制)。
    • 靜默:可能有防火牆或策略丟棄。
  • UDP 探測與複雜性:
    • 無服務、無防火牆:ICMP Type 3/Code 3(Port Unreachable)。
    • 有服務且資料正確:回應(如 DNS 回覆)。
    • 有服務但資料錯或有防火牆:常見不回應,與其他情境重疊,需多次、不同 payload 驗證。
  • Nmap 標註邏輯:Open(正面回應/服務存在)、Closed(一致 RST 或 ICMP Port Unreachable)、Filtered(ICMP 管制或長時間靜默)。常以多機制綜合判斷。

殭屍掃描(Idle Scan)原理與操作

  • 核心概念:不控制殭屍,以其 IP ID 遞增作側信道判斷目標服務是否開啟。
  • 時序封包:
 1. PKTZ→殭屍:送 SA(SYN/ACK)取得殭屍 RST 與 IP ID 基準。
 2. PKTK→目標:偽造來源為殭屍,送 SYN(或 SA)至目標服務(例 22/SSH),誘使目標回應殭屍。
 3. PKTZ→殭屍:再次送 SA 讀取殭屍回應 IP ID。
  • 判斷規則:加1=服務未開;加2=服務開啟(殭屍多一次回應);加3以上=背景流量或節奏失衡需重試。
  • 環境與限制:殭屍防火牆須關閉、背景流量低;Windows 常較適合作殭屍;部分 Linux 的 IP ID 策略使加1/加2難分,需更換殭屍或改法。
  • 節奏控制:程式化 sleep 約 0.1s;人工鍵入易導致加3,建議自動化。

掃描節奏、時間估算與風險禮節

  • 時間估算:
    • ARP:inter=100ms、100 目標,理論排隊約 10s,加最後 timeout 1s,總約 11s。
    • ICMP:inter=100ms、254 目標,理論約 25.4s,實測約 20 多秒。
  • 參數取捨:inter 越小越快但引人注意;timeout 過大線性增長。
  • 禮節與風險:外網掃描速率保守、避免敏感結果外傳;固定 sport、burst 行為易被 IDS/IPS 偵測。

觀察與驗證、雲端與 Web 安全補充

  • 回應容器與輸出:Scapy ans/unans,ans.summary() 快速檢視;搭配 Wireshark 擷取驗證。
  • 雲端安全群組:外層存取控制決定對外開放埠,主機防火牆常預設關閉,需審慎配置。
  • Web 目錄列出風險:未關閉 index of 造成檔案裸露;以「index of + 關鍵字」可發現大量暴露資源。
  • 監視器與遠端桌面暴露:公開搜尋平台可見畫面或登入介面,弱密碼風險高;建議更改埠、強密碼與多因子。