文、意如
1.檢查未加密的 HTTP 流量中是否包含常見的敏感資訊(例如密碼)。
2.檢查伺服器響應中是否缺少關鍵的安全 Header(例如 Strict-Transport-Security)。
程式碼
from scapy.all import sniff, IP, TCP, Raw
import re
from urllib.parse import unquote
#資安工具的核心:解析封包並檢查資安問題。
def security_analysis_callback(packet):
if IP in packet and TCP in packet:# 確保封包有 IP 層和 TCP 層
if (packet[TCP].dport == 80) or (packet[TCP].sport == 80):#檢查 HTTP 流量 (埠號 80)
if Raw in packet:# 檢查是否有 Raw/載荷層 (應用層數據)
payload = packet[Raw].load.decode('utf-8', errors='ignore')
#敏感資訊明文傳輸檢查 (例如密碼或登入資訊) ---
if re.search(r'(password|passwd|login|pwd)=', payload, re.IGNORECASE):
# 找到疑似敏感資訊,發出資安警報
print("\n[資安工具警報] 發現 HTTP 明文傳輸敏感資料!")
print(f"來源IP: {packet[IP].src} -> 目的IP: {packet[IP].dst}")
# 使用 unquote 處理 URL 編碼的 payload,提高可讀性
print(f"偵測到的 Payload 片段: {unquote(payload[:100]).strip()}")
#檢查 HTTP Header 安全漏洞 (以伺服器響應為例) ---
if b'HTTP/1.' in packet[Raw].load and packet[TCP].sport == 80:
# 檢查是否缺少 HSTS (Strict-Transport-Security) Header
if b'Strict-Transport-Security' not in packet[Raw].load:
print("\n[資安工具警報] 偵測到 HTTP 響應缺少 HSTS 安全 Header!")
print(f" 受影響伺服器 IP: {packet[IP].src}")
# 這種資安檢測工具類型有助於網站安全配置評估
def start_security_tool(count=20):
print("---啟動資安工具(封包嗅探器)---")
print(f"正在擷取前 {count} 個封包進行 --資安檢測--...")
# 建議只過濾 HTTP/TCP 流量以簡化結果
# filter="port 80": 只擷取 80 埠的 TCP 流量 (HTTP)
sniff(prn=security_analysis_callback, count=count, filter="tcp port 80")
print("---封包安全分析完成---")
if __name__ == "__main__":
start_security_tool(count=20)
執行結果:
為了看到警報,需要在程式運行時,在瀏覽器中故意訪問一個沒有 HTTPS (即 HTTP) 且會發送敏感資訊(例如一個簡單登入頁面的表單提交)的網站。
如網路中出現了 HTTP 流量,並且該流量缺少安全 Header 或明文傳輸了密碼,資安工具將會如以下輸出
Yiru@Studio - 關於我 - 意如