DEF CON 33 - Regex For Hackers - Adam 'BuildHackSecure' Langley, Ben 'nahamsec' Sadeghipour
三句話摘要
DEFCon 研討會:從正規表達式基礎到實戰漏洞發現,講師透過真實案例展示如何用 Regex 識別常見網路漏洞並進行滲透測試。 --- 掌握正規表達式不僅能識別代碼中的漏洞根源,更是在滲透測試中高效發現資產與敏感信息的關鍵工具——從簡單的域名驗證錯誤到複雜的 GitHub 代碼考古,Regex 搜尋能將資訊海洋轉化為有價值的攻擊面。 正規表達式的危險在於驗證不完全
重點整理
重點- 1
正規表達式的危險在於驗證不完全
- 2
開發者常忘記使用結尾錨點 ($) 或正確轉義特殊字符。例如驗證域名時,若缺少 $,攻擊者可以用 `w.xtrusted.com` 繞過 `www.trusted.com` 的檢查,因為通配符 (.) 會匹配任何字符。
- 3
PostMessage、CORS、SSRF 都源於 Regex 不當使用
- 4
PostMessage 漏洞可透過構造子域名(如 `www.trusted.com.attacker.com`)繞過驗證;CORS 繞過則利用缺失末端美元符號在允許清單中插入惡意域名;SSRF 則透過通配符讓攻擊者訪問內部資源或 AWS 元數據。
- 5
GitHub 搜索是高效的資產列舉與代碼審查工具
- 6
利用 Regex 在 GitHub 上搜索特定關鍵字(如 api、dev、admin)可快速發現目標的內部 API、自動化腳本、配置文件,甚至洩露的密鑰與 JWT Token。講師曾透過 GitHub 發現某公司的所有 Spring Boot Actuator 端點,在數小時內獲得四個價值 3000 美元的漏洞賞金。
- 7
堆轉儲與代碼審查的 Regex 技巧
- 8
提取 Java 執行器堆轉儲中的敏感信息,可搜索 base64 編碼密碼(以 == 結尾)、JWT Token(以 eyJ 開頭)、AWS 密鑰;代碼審查則查找 echo + $_GET/$_POST(XSS)、system() 傳遞使用者輸入(RCE),跨越 PHP、JavaScript、Python 等語言。
- 9
--
實用技巧與重點
乾貨- Regex 基本元素:
- 錨點:`^`(開始)、`$`(結尾)
- 字符集:`[A-Z0-9_]`、`\d`(數字)、`\w`(字符)、`\s`(空格)
- 量詞:`+`(1個或多個)、`*`(0個或多個)、`?`(0或1個)、`{16,19}`(範圍)
- 分組:`(...)`、OR 運算符 `|`
- 轉義:`\.`(句點)、`\/`(斜杠)
- 真實漏洞 Regex 對比:
- | 漏洞 | 錯誤 Regex | 修正 Regex |
- |------|----------|----------|
- | PostMessage | `www.trusted.com` | `^https://www\.trusted\.com$` |
- | 開放重定向 | `trusted.com.*` | `^https://[a-z0-9]+\.trusted\.com/$` |
- | CORS | `trusted.com` | `^(api\|admin\|www)\.trusted\.com$` |
- | SSRF | `https://linkedin.com.*` | `^https://links\.linkedin\.com/[a-z0-9_]+$` |
- GitHub 搜索 Regex 範例:
- JWT Token:`eyJ[a-zA-Z0-9_-]+\.[a-zA-Z0-9_-]+\.[a-zA-Z0-9_-]+`
- AWS Key:`AKIA[0-9A-Z]{16}`
- Base64 密碼:`password["\s]:["\s][a-zA-Z0-9+/=]{20,}==`
- XSS(PHP):`echo\s+(\$_GET|\$_POST|[a-zA-Z_][a-zA-Z0-9_]*\()`
- RCE(系統命令):`system\s\(["\s](\$_GET|\$_POST)`
- 實用工具與資源:
- HackingHub(講師自創公司提供 CTF 與課程)
- Hacker One、Try Hackme(漏洞賞金平台)
- Subfinder、crt.sh(子域名列舉)
- Actuator 堆轉儲解析工具
- 具體數據:
- 講師 Ben 累計獲得 180 萬美元漏洞賞金
- Netflix 私人漏洞賞金計畫存在 6 年以上,潛力巨大
- 荷蘭公司 API 發現單筆漏洞賞金 5000 美元
- GitHub 上發現的單個執行器端點價值 3000 美元
- --
結論
結論“掌握正規表達式不僅能識別代碼中的漏洞根源,更是在滲透測試中高效發現資產與敏感信息的關鍵工具——從簡單的域名驗證錯誤到複雜的 GitHub 代碼考古,Regex 搜尋能將資訊海洋轉化為有價值的攻擊面。”
完整解析
詳細本場研討會由漏洞賞金獵人 Ben Sadeghipour 與安全教育者 Adam Langley 聯合主講,內容跨越正規表達式的基礎理論與現實網路安全應用。整場演講包含 198 張投影片,速度極快但內容充實。
第一部分:正規表達式基礎與漏洞根源
講者首先回顧了 Regex 在各程式語言中的基本用法,如 Python 的 `startswith()` 與 JavaScript 的 `includes()`,但指出這些簡單方法存在侷限。Regex 作為搜尋模式語言,可視為狀態機,每條規則依序匹配,不符合則回溯重新嘗試。基礎操作包括字面匹配(如 Ctrl+F)、詞邊界 `\b`、錨點 `^` 與 `$`、字符集 `[A-Z]`、量詞 `+/*/?`、以及危險的通配符 `.`(匹配除換行外任意字符)。
許多漏洞根源於開發者對 Regex 的誤用或不完全驗證。例如,PostMessage 漏洞因缺少結尾錨點 `$`,允許攻擊者用 `www.trusted.com.attacker.com` 繞過驗證;開放重定向因未轉義句點,導致 `w.xtrusted.com` 被誤認為合法子域名。CORS 繞過則利用缺少末端美元符號,在允許清單後附加惡意域名。SSRF 漏洞常因 URL 驗證不足,攻擊者可訪問內部網路或雲服務元數據。講者透過具體案例展示,Ben 曾因發現某應用的開放重定向漏洞獲得 14000 美元賞金,該漏洞用於竊取用戶離線令牌並盜用帳戶。
第二部分:GitHub 資產列舉與代碼審查
Adam 隨後介紹了利用 Regex 在 GitHub 上進行高效偵察的技巧。相比傳統子域名列舉工具,GitHub 搜尋能揭示開發者實際使用的基礎設施。講者舉例發現通配符憑證時,可用 Regex 直接搜尋所有子域名;若結合關鍵詞如 `api` 或 `dev`,甚至能發現隱藏的內部 API 路由。一個亮點案例涉及某私人漏洞賞金計畫,講者透過 GitHub 發現泄露的自動化代碼,快速列舉出多個 Spring Boot Actuator 端點,每個端點都包含堆轉儲功能。短短數小時內,他找到四個價值 3000 美元的漏洞,共約 12000 美元。
對於堆轉儲分析,Regex 用於從非人類可讀的二進制數據中提取敏感信息:搜尋 `password` 欄位、Base64 編碼密碼(以 == 結尾)、JWT Token(以 `eyJ` 開頭)、AWS 密鑰等。代碼審查時,Regex 也能快速定位可能的漏洞:在 PHP 中搜尋 `echo` 搭配 `$_GET` 或 `$_POST` 來發現 XSS;搜尋 `system()` 傳遞使用者輸入來發現 RCE。講者更進一步介紹了自編工具 HabitBiota,能遍歷 GitHub 上所有開源套件,提取框架特定的 Regex 模式(如 Flask 路由、Laravel 中間件等),並從中生成詞表用於後續參數掃描。這類詞表涵蓋 GET/POST 請求參數、HTTP 標頭等,真實地反映企業系統在用的參數名稱。
實戰啟示與結論
講者強調,許多大型組織的內部框架代碼已公開在 GitHub,可透過 EC2 或企業工具直接啟動並進行漏洞審查。Regex 的威力不僅限於發現低掛水果,更在於跨越多個層面的應用:從簡單的 URL 驗證到複雜的堆轉儲解析,再到代碼審查與詞表構建。講者呼籲參與者發揮創意,思考如何將這些技巧串聯應用到現實世界,發現更多有價值的漏洞。
---
關鍵時刻
Pipeline v2帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。
事實查核
Pipeline v2說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

