跳至主要內容

HTTPQL 與 StreamQL ​

Ogma 使用與 Caido 相容的查詢語言子集,篩選 HTTP 歷程記錄、WebSocket 流量、自動化結果及相關檢視。

語法 ​

查詢由透過 AND 與 OR 連接的子句組成。

text
req.host:example.com AND resp.code:200

括號可將運算式分組:

text
(req.path.cont:"/api/" OR req.path.cont:"/graphql") AND resp.code.gte:400

支援註解:

text
// API errors
req.path.cont:"/api/" AND resp.code.gte:500
text
/* focus on login */
req.path.cont:"login"

運算子 ​

運算子意義
:等於或預設比對,依欄位類型而定
.eq:等於
.ne:不等於
.cont:包含,不區分大小寫
.ncont:不包含,不區分大小寫
.cs.cont:包含,區分大小寫
.cs.ncont:不包含,區分大小寫
.like:類 SQL 模式比對
.nlike:不符合類 SQL 模式
.regex:符合規則運算式
.nregex:不符合規則運算式
.lt:小於
.lte:小於或等於
.gt:大於
.gte:大於或等於
.exists標頭存在;使用 req.header["Name"].value.exists 或對應的回應形式

HTTP 範例 ​

尋找 API 流量:

text
req.path.cont:"/api/"

尋找伺服器錯誤:

text
resp.code.gte:500

尋找大型回應:

text
resp.len.gt:100000

尋找 JSON 回應:

text
resp.header["content-type"].value.cont:"application/json"

尋找帶有 Cookie 的請求:

text
req.header["cookie"].value.exists

尋找經由攔截或比對與取代功能修改的流量:

text
req.modified.eq:true

尋找可能的管理路徑:

text
req.path.cont:"/admin" OR req.path.cont:"/manage"

尋找重送或自動化流量:

text
source:replay OR source:automate

串流範例 ​

StreamQL 將相同的查詢方式套用到 WebSocket 與串流檢視。

尋找包含權杖欄位的 WebSocket 訊息:

text
ws.raw.cont:"token"

尋找由伺服器傳送至用戶端的訊息:

text
ws.direction.eq:"To Client"

尋找類似 JSON 的訊息:

text
ws.raw.cont:"{" AND ws.raw.cont:"}"

實用的已儲存篩選條件 ​

名稱查詢
API 錯誤req.path.cont:"/api/" AND resp.code.gte:400
身分驗證端點req.path.cont:"login" OR req.path.cont:"oauth" OR req.path.cont:"session"
JSON 流量resp.header["content-type"].value.cont:"json"
值得留意的方法req.method:POST OR req.method:PUT OR req.method:PATCH OR req.method:DELETE
潛在機密資訊resp.body.cont:"api_key" OR resp.body.cont:"secret" OR resp.body.cont:"token"

限制 ​

為了讓篩選行為可預期,Ogma 會限制查詢複雜度:

  • 巢狀運算式深度上限:16。
  • 子句數量上限:64。

如果查詢過於複雜,請拆分成已儲存的篩選條件,或使用搜尋進行更廣泛的調查。

專有軟體。保留所有權利。