API 攻擊面分析
API 的六大攻擊面
1. 端點發現 → 找出隱藏 API
2. 認證繞過 → 繞過 JWT / API Key
3. 授權缺陷 → IDOR、水平/垂直提權
4. 輸入驗證 → SQLi、NoSQLi、Command Injection
5. 速率限制 → 暴力破解、DDoS
6. 資訊洩露 → 錯誤訊息、回應過多資料
Vibe Prompt
「幫我建立一個 API 安全掃描腳本:測試目標 API 的认证繞過、IDOR、SQL Injection。」
import requests
class APIScanner:
def __init__(self, base_url):
self.base_url = base_url
self.results = []
def test_idor(self, endpoint, auth_token):
"""測試 IDOR 漏洞"""
headers = {"Authorization": f"Bearer {auth_token}"}
# 嘗試存取其他用戶的資源
for user_id in [1, 2, 3, 100, 999]:
r = requests.get(f"{self.base_url}{endpoint}/{user_id}", headers=headers)
if r.status_code == 200:
self.results.append({
"type": "IDOR",
"endpoint": f"{endpoint}/{user_id}",
"status": r.status_code,
"risk": "高" if user_id != 1 else "低"
})
def test_sqli(self, endpoint):
"""測試 SQL Injection"""
payloads = ["'", "\"", "' OR '1'='1", "' UNION SELECT * FROM users--"]
for payload in payloads:
r = requests.get(f"{self.base_url}{endpoint}?id={payload}")
if any(err in r.text.lower() for err in ["sql", "syntax", "mysql", "unexpected"]):
self.results.append({
"type": "SQL Injection",
"payload": payload,
"status": r.status_code,
"risk": "嚴重"
})
def run(self):
print(f"掃描目標: {self.base_url}")
self.test_idor("/api/users", "test_token_123")
self.test_sqli("/api/search")
if self.results:
print(f"\n發現 {len(self.results)} 個漏洞!")
for r in self.results:
print(f" [{r['risk']}] {r['type']}: {r.get('endpoint', r.get('payload', ''))}")
else:
print("\n未發現明顯漏洞")
scanner = APIScanner("http://test-server.com")
scanner.run()
關鍵要點
- ✅ API Attack Surface = API 暴露的所有端點與資料
- ✅ 常見攻擊面:REST 端點、GraphQL 查詢、WebSocket、檔案上傳、認證端點
- ✅ 攻擊面越大,被攻擊的風險越高
- ✅ 減少攻擊面策略:關閉不必要的端點、使用 API Gateway、速率限制
常見 API 漏洞分類
| 類別 | 風險 | 典型案例 | |------|:----:|---------| | BOLA (IDOR) | 高 | 修改 ID 存取他人資料 | | 認證缺陷 | 高 | JWT 未驗證、密碼暴力破解 | | 過度資料暴露 | 中 | API 回傳密碼雜湊 | | 速率限制不足 | 中 | 無限制的暴力破解 | | 批量分配 | 中 | 修改不該修改的欄位 |
常見錯誤
程式碼範例
API 攻擊面:從哪裡開始測試?
API 滲透測試的第一步是了解 API 的攻擊面——有哪些端點、哪些參數、哪些認證方式。
API 攻擊面分類
| 攻擊面 | 需要檢查 | |:------|:--------| | 認證 | JWT 簽章驗證?API Key 強度?OAuth redirect URI? | | 授權 | IDOR?Role escalation?Admin 功能是否保護? | | 輸入驗證 | SQL/NoSQL Injection?SSRF?XXE? | | 配置 | CORS 太寬鬆?除錯端點未關閉?HTTPS 未強制? | | 商業邏輯 | 訂單金額可被修改?折扣可疊加? |
資訊收集工具
- Swagger/OpenAPI:找
/docs、/swagger.json、/openapi.json - 目錄爆破:
ffuf -w wordlist.txt -u https://api.target.com/FUZZ - 歷史 API 探索:Google Dork
site:target.com "api" "swagger"
下一章預告:JWT 安全漏洞
找到 API 端點後,下一步測試認證——JWT 是最常見的 API 認證方式,也是最容易被實作錯誤的地方。