WEB漏洞挖掘篇(一) 基本概念、十大常見WEB漏洞

前言

在數位化時代,軟體無所不在。從我們手機上的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 負責任披露)

二、十大常見Web漏洞深度剖析

[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,導致伺服器回傳了系統敏感文件內容。

三、小結

漏洞挖掘是一段充滿挑戰和樂趣的旅程。它要求你保持持續學習的熱情,因為技術和漏洞形態總在不斷演化。記住以下幾點:

  1. 基礎為王: 紮實的網路協議(HTTP/S)、作業系統、程式語言基礎是你看清問題本質的關鍵。

  2. 實踐出真知: 搭建自己的靶場環境(如DVWA, WebGoat, HackTheBox)進行練習。

  3. 保持好奇心與耐心: 一個不起眼的參數或許就是通往金庫的大門。一次失敗的測試是常態,成功需要堅持。

  4. 遵守道德與法律: 永遠在授權範圍內進行測試。你的技能應該用來建設,而非破壞。

希望這篇文章能讓你對漏洞挖掘有初步的認識。往後漏洞挖掘篇的內容將一一詳解上述的漏洞,大家敬請期待了。


附錄:推薦工具與學習資源

  • 綜合平台: 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

相关推荐
晴子呀8 小时前
Spring Boot 项目文件上传安全与优化:OSS、MinIO、Nginx 分片上传实战
安全
火山引擎开发者社区8 小时前
来自火山引擎的 MCP 安全授权新范式
安全·火山引擎·mcp
0x派大星9 小时前
智能合约安全全解析:常见漏洞、真实案例与防范实践
安全·去中心化·区块链·智能合约
天翼云开发者社区13 小时前
分布式系统-秒杀
大数据·安全·中间件
运维_攻城狮14 小时前
Nessus 是一款免费功能强大的漏洞扫描工具,广泛用于网络安全评估。
安全·web安全
梦子yumeko16 小时前
在集群级别应用 Pod 安全标准
安全
Deepsleep.16 小时前
前端常见安全问题 + 防御方法 + 面试回答
前端·安全·面试
flyliu16 小时前
常见的攻击方式有哪些,如何防御
前端·安全
CaracalTiger1 天前
网站漏洞早发现:cpolar+Web-Check安全扫描组合解决方案
java·开发语言·前端·python·安全·golang·wpf