前言
在數位化時代,軟體無所不在。從我們手機上的App到銀行的後台系統,程式碼構成了現代社會的基石。然而,只要有程式碼,就可能存在錯誤(Bug);而其中那些能對系統的機密性、完整性或可用性造成負面影響的錯誤,我們稱之為漏洞。
漏洞挖掘正是發現這些漏洞的過程。它既是一門科學,需要系統化的方法、嚴謹的工具和邏輯思維;它也是一門藝術,需要創造力、直覺和「跳出框框」的思考能力。無論你是想成為一名專業的安全研究員、滲透測試員,還是僅僅想為打造更安全的網路環境出一份力,學習漏洞挖掘都是一項極具價值且回報豐厚的技能。
本篇博文將作為我們漏洞挖掘技術篇的開篇文章,將系統化地講解漏洞挖掘的完整流程,並淺談你最有可能遇到的十大常見漏洞,也就是我們往後會分析的漏洞。

目录
[1.1 目標確定與範圍界定](#1.1 目標確定與範圍界定)
[1.2 資訊收集](#1.2 資訊收集)
[1.2.1 被動收集(不與目標直接互動)](#1.2.1 被動收集(不與目標直接互動))
[1.2.1.1 搜尋引擎技術](#1.2.1.1 搜尋引擎技術)
[1.2.1.2 WHOIS查詢](#1.2.1.2 WHOIS查詢)
[1.2.1.3 DNS資訊](#1.2.1.3 DNS資訊)
[1.2.1.4 歷史記錄](#1.2.1.4 歷史記錄)
[1.2.1.5 證書透明度日誌](#1.2.1.5 證書透明度日誌)
[1.2.2 主動收集(與目標直接互動)](#1.2.2 主動收集(與目標直接互動))
[1.2.2.1 子域名枚舉](#1.2.2.1 子域名枚舉)
[1.2.2.2 端口掃描](#1.2.2.2 端口掃描)
[1.2.2.3 技術指紋識別](#1.2.2.3 技術指紋識別)
[1.3 偵察與映射](#1.3 偵察與映射)
[1.3.1 目錄與文件暴力破解](#1.3.1 目錄與文件暴力破解)
[1.3.2 參數發現](#1.3.2 參數發現)
[1.3.3 網站爬蟲](#1.3.3 網站爬蟲)
[1.3.4 API分析](#1.3.4 API分析)
[1.4 漏洞發現](#1.4 漏洞發現)
[1.4.1 自動化掃描](#1.4.1 自動化掃描)
[1.4.1.1 工具](#1.4.1.1 工具)
[1.4.2 手動測試](#1.4.2 手動測試)
[1.4.2.1 方法](#1.4.2.1 方法)
[1.4.2.2 核心工具](#1.4.2.2 核心工具)
[1.5 分析與漏洞驗證](#1.5 分析與漏洞驗證)
[1.5.1 去除誤報](#1.5.1 去除誤報)
[1.5.2 證明漏洞影響](#1.5.2 證明漏洞影響)
[1.6 報告撰寫與負責任披露](#1.6 報告撰寫與負責任披露)
[1.6.1 撰寫報告](#1.6.1 撰寫報告)
[1.6.2 負責任披露](#1.6.2 負責任披露)
[2.1 存取控制破壞](#2.1 存取控制破壞)
[2.2 加密機制失效](#2.2 加密機制失效)
[2.3 注入](#2.3 注入)
[2.4 不安全設計](#2.4 不安全設計)
[2.5 安全設定缺陷](#2.5 安全設定缺陷)
[2.6 易受攻擊和過時的組件](#2.6 易受攻擊和過時的組件)
[2.7 身份驗證和授權破壞](#2.7 身份驗證和授權破壞)
[2.8 軟體和數據完整性故障](#2.8 軟體和數據完整性故障)
[2.9 安全日誌和監控失敗](#2.9 安全日誌和監控失敗)
[2.10 伺服器端請求偽造](#2.10 伺服器端請求偽造)
一、漏洞挖掘的系統化流程
盲目地測試就像在黑暗中開槍,效率低下且容易迷失方向。專業的漏洞挖掘遵循一個結構化的流程,確保全面性並提高成功率。
1.1 目標確定與範圍界定
在開始任何技術工作之前,首先要明確目標。
目標是什麼? 你是想測試一個完整的企業級應用、一個手機App、一個網路設備還是一個特定的開源庫?
範圍是什麼? 如果你參與的是Bug Bounty計劃,平台會明確規定哪些域名、子域名、IP地址屬於測試範圍,哪些是禁止測試的(例如第三方服務、員工帳戶等)。絕對不要測試超出授權範圍的目標!
規則是什麼? 了解哪些測試方法是允許的(例如,是否允許DoS測試?是否允許暴力破解?)。遵守規則不僅是法律和道德要求,也能保護你自己。
1.2 資訊收集
這是整個流程中最關鍵、最耗時的階段。你的目標是盡可能多地收集關於目標的資訊,資訊越多,你的攻擊面就越廣。資訊收集分為被動和主動兩種。
1.2.1 被動收集(不與目標直接互動)
1.2.1.1 搜尋引擎技術
使用
site:
,inurl:
,filetype:
等高級搜尋運算元尋找敏感文件、目錄列表、後台登入頁面等。
1.2.1.2 WHOIS查詢
了解域名註冊資訊、註冊商、註冊日期和管理員聯繫方式。
1.2.1.3 DNS資訊
使用
dig
,nslookup
等工具查詢DNS記錄(A, AAAA, MX, TXT, CNAME等),發現子域名和相關服務。
1.2.1.4 歷史記錄
使用Wayback Machine(archive.org)查看網站歷史快照,或許能發現已下線但未被刪除的敏感頁面或文件。
1.2.1.5 證書透明度日誌
工具如
crt.sh
可以通過SSL證書發現甚至是被忽略的子域名。
1.2.2 主動收集(與目標直接互動)
1.2.2.1 子域名枚舉
使用工具如
Sublist3r
,Amass
,subfinder
等,結合字典進行暴力破解,盡可能地發現所有子域名。
1.2.2.2 端口掃描
使用Nmap對目標IP進行端口掃描,識別開放端口及其背後運行的服務(如Web伺服器、資料庫、SSH、FTP等)和版本資訊。
1.2.2.3 技術指紋識別
識別網站使用的技術堆疊,如前端框架(React, Angular)、後端語言(PHP, Java, Python)、Web伺服器(Apache, Nginx)、作業系統等。工具:
Wappalyzer
(瀏覽器外掛),WhatWeb
。
1.3 偵察與映射
在收集完基礎資訊後,需要對目標應用進行深入偵察,繪製出完整的「攻擊面地圖」。
1.3.1 目錄與文件暴力破解
使用
DirBuster
,gobuster
,ffuf
等工具,配合強大的字典,尋找隱藏的目錄、文件(如備份文件*.bak
、設定文件config.php
、Git倉庫/.git/
)。
1.3.2 參數發現
識別所有接受用戶輸入的參數(URL參數、POST數據、HTTP頭部)。工具:Burp Suite的爬蟲功能、Arjun。
1.3.3 網站爬蟲
使用Burp Suite、OWASP ZAP或自訂腳本模擬用戶操作,遍歷網站的所有功能點,特別是表單、搜尋框、上傳點、API端點等。
1.3.4 API分析
現代應用大量依賴API(特別是RESTful API)。分析API文檔(如果有)、通過爬蟲發現API端點、檢查其授權機制和輸入驗證。
1.4 漏洞發現
這是核心的「挖掘」階段。根據前面繪製的地圖,對每個潛在的攻擊點進行測試。通常結合自動化工具和手動測試。
1.4.1 自動化掃描
使用工具進行初步篩選。它們速度快,能發現一些低懸果實,但誤報率高,無法發現複雜的邏輯漏洞。
1.4.1.1 工具
Burp Suite Scanner
,Nessus
,Nuclei
。
1.4.2 手動測試
這是體現研究員功力的地方。你需要根據漏洞類型,有針對性地構造Payload並觀察應用程式的回應。
1.4.2.1 方法
對每個輸入點嘗試插入各種特殊字元、Payload,並仔細分析回應的狀態碼、內容、時間延遲等。
1.4.2.2 核心工具
Burp Suite / OWASP ZAP。它們作為中間人代理,攔截、重放、修改所有HTTP/S請求,是手動測試的瑞士軍刀。
1.5 分析與漏洞驗證
自動化工具可能會提示「可能存在XX漏洞」,這需要你進行進一步分析以確認其真實性。
1.5.1 去除誤報
仔細分析伺服器的回應,判斷其是真正的漏洞特徵還是正常的業務邏輯。
1.5.2 證明漏洞影響
這是關鍵一步。你需要構造一個可重現的、能證明漏洞確實存在且具有危害性的PoC。
例如,對於一個SQL注入,你的PoC應該能成功執行一條SQL命令(如' AND (SELECT sleep(5))-- -
導致延遲,或' UNION SELECT username, password FROM users-- -
來盜取資料)。一個好的PoC能讓開發人員清晰地理解問題所在。
1.6 報告撰寫與負責任披露
發現漏洞不是結束,如何溝通和處理它同樣重要。
1.6.1 撰寫報告
撰寫清晰的報告: 一份好的漏洞報告應包括:
標題: 簡明扼要。
漏洞類型: SQLi, XSS等。
影響等級: 通常分為Critical, High, Medium, Low, Informational。
目標與版本: 受影響的URL/組件及其版本。
詳細描述: 漏洞的成因。
重現步驟: step-by-step指導如何重現漏洞,這是最重要的部分。
PoC: 附上截圖、視頻或可執行的代碼。
修復建議: 提供建設性的修復方案。
1.6.2 負責任披露
私密地將報告提交給廠商或相關平台(如HackerOne, Bugcrowd),給予廠商合理的時間(通常是90天)進行修復,之後再選擇公開細節。切勿在未經同意的情況下公開漏洞細節!
二、十大常見Web漏洞深度剖析
OWASP(開放Web應用程式安全計畫)發布的Top 10是世界上最權威的Web應用安全風險清單。我們以OWASP Top 10 2021為藍本進行介紹。
2.1 存取控制破壞
成因: 應用程式未能對用戶執行的操作實施有效的權限檢查,導致用戶可以執行其本不被允許的操作。
危害: 越權存取其他用戶的資料、修改他人資訊、提升權限到管理員等。
挖掘技巧:
水平越權: 登錄後,修改URL中的用戶ID參數(如
/user/profile?uid=123
改為uid=124
),看能否存取他人資料。垂直越權: 以普通用戶身分,嘗試訪問僅限管理員訪問的頁面(如
/admin/delete-user.php
)。IDOR(不安全的直接物件引用) 是其中最常見的一類。
案例: 將訂單詳情頁面的訂單ID從
1001
改為1002
,看到了另一個用户的訂單資訊。
2.2 加密機制失效
成因: 未使用加密技術或使用不當(弱算法、弱金鑰、自定義加密、明文傳輸)。
危害: 敏感數據(密碼、信用卡號、個人資訊)洩露。
挖掘技巧:
檢查傳輸是否使用HTTPS?是否有混合內容(HTTP載入HTTPS資源)?
檢查密碼是否明文儲存或使用弱哈希(如MD5, SHA1)且未加鹽?
檢查加密通訊的設定(如SSL/TLS版本、加密套件)是否安全?
案例: 在網路抓包中,發現登錄請求中的密碼以明文形式傳輸。
2.3 注入
成因: 將不可信的使用者數據作為指令或查詢的一部分發送給直譯器(如SQL, OS, LDAP資料庫),欺騙直譯器執行非預期的命令。
危害: 數據洩露、數據篡改、繞過認證、執行系統命令。
挖掘技巧:
SQL注入(SQLi): 在任何輸入點嘗試插入單引號
'
、分號;
等,觀察數據庫錯誤訊息或行為異常。使用UNION
,sleep()
,SELECT
等命令驗證。命令注入(Command Injection): 在輸入點(如ping功能)插入系統命令分隔符(
;
,|
,&&
+whoami
,id
等)。工具:
sqlmap
是檢測SQL注入的自動化神器。案例: 在搜尋框輸入
' OR 1=1-- -
,導致所有產品列表被顯示出來。
2.4 不安全設計
成因: 這是一個較新的類別,指在軟體設計和架構層面就存在的安全缺陷,無法通過簡單的「實現」或「配置」來修復。
危害: 各種業務邏輯漏洞,如 flawed authentication, flawed recovery process。
挖掘技巧: 需要深入理解業務流程,思考「設計是否可能被濫用?」。
註冊時能否使用與他人相同的電話號碼/郵箱?
優惠券能否被無限次使用?
密碼重置流程是否能被繞過(如僅依賴知識問答)?
案例: 電商網站的「推薦好友獲積分」功能,通過修改HTTP請求中的用戶ID參數,可以為任何用戶添加積分。
2.5 安全設定缺陷
成因: 任何組件(雲服務、Web伺服器、應用框架、庫文件)的不安全配置。
危害: 未授權的存取、資訊洩露、功能被濫用。
挖掘技巧:
檢查是否存在預設帳戶/密碼?
檢查是否開啟了不必要的服務和端口?
檢查目錄列表是否被開啟?
檢查錯誤訊息是否洩露了堆疊追踪等敏感資訊?
檢查HTTP安全頭部(如
X-Content-Type-Options
,HSTS
)是否配置正確?案例: 訪問
https://example.com/.git/
,發現整個Git倉庫被下載,源碼和配置信息洩露。
2.6 易受攻擊和過時的組件
成因: 使用已知含有漏洞的第三方庫、框架和軟體組件。
危害: 攻擊者可以利用該組件的公開漏洞輕鬆攻擊你的應用。
挖掘技巧:
使用掃描工具識別組件及其版本。
工具:
OWASP Dependency-Check
,retire.js
(for JavaScript), 各種SCA(軟體組成分析)工具。比對國家漏洞資料庫(NVD)、廠商安全公告等,確認是否存在已知漏洞。
案例: 網站使用存在遠程代碼執行漏洞的舊版Apache Struts框架(如Equifax事件)。
2.7 身份驗證和授權破壞
成因: 與身份驗證和會話管理相關的功能實現不當。
危害: 攻擊者可以破譯密碼、會話令牌或利用實施缺陷暫時性或永久性地冒充其他用戶身份。
挖掘技巧:
檢查登錄功能能否暴力破解?是否缺乏帳戶鎖定或CAPTCHA機制?
檢查登錄後的回應是否暴露了敏感資訊(如
Set-Cookie: user=admin
)?檢查會話令牌(Session Token)是否隨機?登出後會話是否依然有效?
檢查密碼策略是否足夠強健(如允許弱密碼「123456」)?
案例: 重置密碼的令牌極其簡單(如
/reset-password?token=1234
),且不會過期,導致可以被暴力破解。
2.8 軟體和數據完整性故障
成因: 使用來自不可信來源的軟體或數據,或未能驗證其完整性。
危害: 未經授權的代碼執行、供應鏈攻擊。
挖掘技巧: 檢查應用是否從不可信的源(如HTTP站點)加載資源或庫?更新機制是否未使用安全通訊(如簽名)?
案例: 應用程式從一個未受保護的HTTP伺服器自動更新,攻擊者可以中間人劫持更新流程,分發惡意版本。
2.9 安全日誌和監控失敗
成因: 未能記錄、監控和回應安全事件。
危害: 攻擊無法被檢測、響應和事後調查。
挖掘技巧: 此漏洞較難從外部發現,通常需要廠商自檢。但可以嘗試攻擊後觀察是否有告警或被封IP。
案例: 網站沒有對登錄失敗進行日誌記錄,導致無法發現持續的暴力破解攻擊。
2.10 伺服器端請求偽造
成因: 應用程式未對用戶提供的URL進行驗證和過濾,導致攻擊者可以誘使伺服器向任意域發起請求。
危害: 掃描內網、存取內部服務、繞過防火牆。
挖掘技巧: 尋找任何能讓你提供URL的功能:Webhook設定、文件導入、轉碼功能、圖像加載等。嘗試讓伺服器訪問
http://localhost
,http://169.254.169.254
(雲元數據服務)等內部地址。案例: 在「通過URL導入個人頭像」功能中,輸入
file:///etc/passwd
,導致伺服器回傳了系統敏感文件內容。
三、小結
漏洞挖掘是一段充滿挑戰和樂趣的旅程。它要求你保持持續學習的熱情,因為技術和漏洞形態總在不斷演化。記住以下幾點:
-
基礎為王: 紮實的網路協議(HTTP/S)、作業系統、程式語言基礎是你看清問題本質的關鍵。
-
實踐出真知: 搭建自己的靶場環境(如
DVWA
,WebGoat
,HackTheBox
)進行練習。 -
保持好奇心與耐心: 一個不起眼的參數或許就是通往金庫的大門。一次失敗的測試是常態,成功需要堅持。
-
遵守道德與法律: 永遠在授權範圍內進行測試。你的技能應該用來建設,而非破壞。
希望這篇文章能讓你對漏洞挖掘有初步的認識。往後漏洞挖掘篇的內容將一一詳解上述的漏洞,大家敬請期待了。
附錄:推薦工具與學習資源
綜合平台: HackTheBox, TryHackMe, PortSwigger Web Security Academy (免費且極其優秀!)
工具集:
代理/套件: Burp Suite Professional/Community, OWASP ZAP
掃描與枚舉: Nmap, Nessus, Nuclei
子域名發現: Sublist3r, Amass, subfinder
目錄/文件暴力破解: Gobuster, DirBuster, ffuf
注入檢測: sqlmap
社群與計劃: HackerOne, Bugcrowd
必讀文檔: OWASP Top 10, OWASP Testing Guide, OWASP Cheat Sheet Series