駭客沒有固定公式,新技術也持續演變。本章不是「秘技手冊」,而是作者整理自身經驗、訪談頂尖駭客、看部落格與影片後得出的通用方法論——一個可以套用到任何應用程式的起手框架。
入門時請以「學到什麼新技能、累積多少經驗」當作成功指標,而非找了多少 Bug 或拿到多少獎金。Uber、Shopify、Twitter、Google 等成熟計畫天天有頂尖駭客在挖,新手想立刻拿錢容易挫敗。專注學習能在乾旱期保持動力。
Reconnaissance(偵察)#
每個計畫都先問這幾個問題:
- 計畫的範圍是
*.example.com還是只有www.example.com? - 這家公司有多少子網域?多少 IP?
- 是哪一類網站?SaaS、開源、付費、免費?
- 用了什麼技術?前後端框架、資料庫、第三方服務?
從本機跑掃描有風險——Akamai 等 WAF 可能直接 ban IP。建議用雲端 VPS 跑(事先確認服務商允許安全測試;AWS 預設不允許未經許可的安全測試)。
子網域列舉(Subdomain Enumeration)#
範圍越大,攻擊面越多。推薦工具:
- SubFinder ↗(Go 寫成,速度快):從憑證透明度紀錄、搜尋引擎、Wayback Machine 等多來源拉取
- crt.sh ↗:可瀏覽 SSL 憑證紀錄,找通配憑證
- censys.io ↗:以憑證 hash 反查子網域
- 字典:SecLists ↗ 與 Jason Haddix 的 list ↗
找到
*.corp.example.com之類的子層後,可進一步對它再次列舉「子網域的子網域」。
埠掃描(Port Scanning)#
大量開埠 = 安全意識可能較低 = 漏洞機會較多。只開 80/443 的公司通常安全意識較強。
工具選擇:
留意「唯一指向不同 IP 區段的子網域」——例如其他都在 AWS,唯獨它放在自家伺服器或第三方服務上。這常是自製或外包系統,安全性可能與核心服務不一致。
截圖(Screenshotting)#
對所有子網域批次截圖,能快速看出三類目標:
- 接管錯誤訊息——指向第三方服務的孤兒紀錄
- 敏感/管理介面——只有一個子網域允許登入時尤其值得進去看
- 與其他子網域不同的技術棧——例如其他 Rails,唯獨這個是 PHP
工具:
- HTTPScreenShot ↗:吃 IP list、自動聚類結果
- Gowitness ↗:吃 URL list、輕量
- Aquatone ↗(重寫為 Go):聚類 + 多種輸出格式
Content Discovery(內容偵察)#
暴力列舉檔案/目錄#
- 字典:SecLists 的 raft 系列
- 工具:Gobuster ↗、Burp Suite Pro 內建 Content Discovery、Meg ↗
- Burp Intruder 也行:拿 root URL 當基底,把字典當 payload
Google Dorking#
對特定參數模式(url=、redirect_to=、id=)相當有效。Exploit DB 有 Google Hacking Database
↗ 收錄常用 dork。
GitHub 偵察#
公司公開 repo 常洩漏 secret/設定。用 Gitrob
↗ 自動爬,搜尋 password、secret、api_key。同時可從 repo 看到他們用哪些第三方函式庫——找廢棄專案或第三方漏洞影響站台。
Previous Bugs(過往漏洞)#
研究目標的舊報告、CVE、公開 exploit。修補一定會引入新程式碼,新的程式碼就是新的攻擊面。Tanner Emek 的 $15,250 Shopify Partners 漏洞就是讀別人公開報告後重測同一塊功能而來。
Recon 不是一次性步驟,而是持續性活動。應用程式不斷演變,定期回頭重做 recon 是常識。
測試應用程式#
Matthias Karlsson 的名言:「不要想『大家都看過了沒漏洞』。每個目標都當作沒人來過——找不到就換下一個。」
1. 掌握技術棧#
第一步永遠是搞清楚目標用什麼:
- 用 Wappalyzer ↗ 快速指紋識別
- 觀察 Burp 流量:HTML 模板、JSON 回應、檔案副檔名
- 用 Burp 預設設定走過站台一遍,留意設計模式
技術棧決定攻擊優先順序:
- AngularJS → 試
{{7*7}}觀察 49 - ASP.NET(XSS 防護開啟)→ 把 XSS 留到最後
- Rails → 整數 ID、
/CONTENT_TYPE/RECORD_ID模式 → 優先測 IDOR - 接受 XML/DOCX → 優先測 XXE
- 自訂的 OAuth/驗證流程 → 詳細測 redirect URL、state、編碼處理
2. Functionality Mapping(功能盤點)#
三種測試風格:
找漏洞線索(Markers)#
看到熟悉的「漏洞前兆」就停下來測:
- 可指定 URL 的 Webhook → SSRF
- 使用者代為動作(impersonation)→ 個資洩漏
- 檔案上傳 → RCE / XSS
- ID 參數 → IDOR
- 有 redirect 參數 → Open Redirect
設定明確目標#
決定一個漏洞類型(如 SSRF),整個過程只追這條線。Jobert Abma 與 Philippe Harewood 都是這套路的擁護者。
走 Checklist#
OWASP 與 The Web Application Hacker’s Handbook 提供完整清單。優點是不漏項目,缺點是無聊——可作為對照表,避免漏看。
3. 找漏洞#
多數計畫禁止自動掃描器(如 Burp Scanner)。它們吵又粗,且不需技巧。手動測試為主。
作者自己的 polyglot payload:
<s>000'")};--//優點:
- 涵蓋 HTML、JS、SQL 等多種上下文的特殊字元
<s>是無害但顯眼的標籤——一旦渲染原樣,會看到刪除線文字- 多種 sanitize 邏輯下都還會留下足跡
範本注入加測:
- AngularJS:
{{8*8}}[[5*5]]→ 觀察 64 或 25 - Rails ERB:
<%= \ls` %>`
可能藏 Blind XSS 的位置(送進管理介面的)→ 用 XSSHunter ↗ 的 payload。
不同漏洞的觀察點#
| 漏洞類型 | 線索 |
|---|---|
| CSRF | 改資料的 HTTP 請求是否有 token、Referer/Origin 檢查? |
| IDOR | URL/POST 中的 ID 參數能否換 |
| 應用邏輯 | 兩個帳號重複請求看權限差異 |
| XXE | 接受 XML/DOCX/XLSX |
| 資訊洩漏 | 該保密的資料是否真的保密 |
| Open Redirect | 帶有 redirect 字眼的參數 |
| CRLF/XSS | URL 參數是否會反映到回應 |
| SQLi | 加 '、)、; 是否影響回應 |
| RCE | 檔案上傳、影像處理 |
| Race Condition | 延遲處理、TOCTOU |
| SSRF | Webhook、外部整合、URL preview |
| 未修補的舊洞 | Server header 顯示老版本 PHP/Apache/Nginx |
進階方向#
當基本流程跑完還想增加產出時:
自動化 Recon#
Rojan Rijal 在新子網域上線五分鐘內就找到 Shopify 漏洞——靠的就是自動 recon。從子網域列舉、埠掃、視覺 recon 開始自動化,是高 CP 值的投資。
行動 App 測試#
把手機流量代理到 Burp 即可測 API。但要處理 SSL Pinning(App 拒絕 Burp 憑證)。本書未深入,但這是新的學習領域。
追蹤新功能#
Philippe Harewood 是這條路的代表人物——大量漏洞來自於搶在別人之前找到新功能。可關注:
- 公司工程部落格與工程師 Twitter
- 訂閱 newsletter
- 監看 JavaScript 檔案差異(Jobert Abma、Brett Buerhaus、Ben Sadeghipour 都寫過方法)
付費取得功能#
Frans Rosen、Ron Chan 都分享過:付費購買付費版功能會打開更多攻擊面,且這些功能因使用者較少,漏洞密度更高。
深學技術#
當知道公司用某項技術(如 ImageMagick、OAuth)時,深入到內部規範與 RFC:
- 學會 ImageMagick 的 delegate 行為——找出 RCE
- 讀 OAuth/OIDC RFC——找出實作偏差
- Tavis Ormandy 從 ImageMagick 串到 Ghostscript,再挖出更多漏洞
FileDescriptor 在部落格中提過:他讀 RFC 並聚焦在「Security Considerations」段落,再去比較規範與實作的差異。
章末總結#
- 駭客就是 1/3 知識 + 1/3 觀察力 + 1/3 毅力
- 流程:Recon → 掌握技術棧 → 功能盤點 → 找線索 → 手動測試
- 自動化、行動 App、新功能追蹤、付費入場、技術深學,是進階差異化能力
- Recon 不會結束——應用程式持續演變,目標也要持續重訪