HTTPQL e StreamQL
Ogma usa un sottoinsieme del linguaggio di query compatibile con Caido per filtrare la cronologia HTTP, il traffico WebSocket, gli esiti di Automazione e le viste correlate.
Sintassi
Le query sono composte da clausole unite da AND e OR.
text
req.host:example.com AND resp.code:200Le parentesi raggruppano le espressioni:
text
(req.path.cont:"/api/" OR req.path.cont:"/graphql") AND resp.code.gte:400Sono supportati i commenti:
text
// API errors
req.path.cont:"/api/" AND resp.code.gte:500text
/* focus on login */
req.path.cont:"login"Operatori
| Operatore | Significato |
|---|---|
: | Uguaglianza o corrispondenza predefinita, a seconda del tipo di campo |
.eq: | Uguale a |
.ne: | Diverso da |
.cont: | Contiene, senza distinguere maiuscole e minuscole |
.ncont: | Non contiene, senza distinguere maiuscole e minuscole |
.cs.cont: | Contiene, distinguendo maiuscole e minuscole |
.cs.ncont: | Non contiene, distinguendo maiuscole e minuscole |
.like: | Corrispondenza con un pattern di tipo SQL |
.nlike: | Mancata corrispondenza con un pattern di tipo SQL |
.regex: | Corrispondenza con un’espressione regolare |
.nregex: | Mancata corrispondenza con un’espressione regolare |
.lt: | Minore di |
.lte: | Minore o uguale a |
.gt: | Maggiore di |
.gte: | Maggiore o uguale a |
.exists | L’intestazione esiste; usa req.header["Name"].value.exists o l’equivalente per la risposta |
Esempi HTTP
Trova il traffico API:
text
req.path.cont:"/api/"Trova gli errori del server:
text
resp.code.gte:500Trova le risposte di grandi dimensioni:
text
resp.len.gt:100000Trova le risposte JSON:
text
resp.header["content-type"].value.cont:"application/json"Trova le richieste con cookie:
text
req.header["cookie"].value.existsTrova il traffico modificato da Intercettazione o Trova e sostituisci:
text
req.modified.eq:trueTrova i possibili percorsi di amministrazione:
text
req.path.cont:"/admin" OR req.path.cont:"/manage"Trova il traffico di Ripetizione o Automazione:
text
source:replay OR source:automateEsempi di streaming
StreamQL applica lo stesso stile di query alle viste WebSocket e di streaming.
Trova i messaggi WebSocket che contengono un campo token:
text
ws.raw.cont:"token"Trova i messaggi dal server al client:
text
ws.direction.eq:"To Client"Trova i messaggi simili a JSON:
text
ws.raw.cont:"{" AND ws.raw.cont:"}"Filtri salvati pratici
| Nome | Query |
|---|---|
| Errori API | req.path.cont:"/api/" AND resp.code.gte:400 |
| Endpoint di autenticazione | req.path.cont:"login" OR req.path.cont:"oauth" OR req.path.cont:"session" |
| Traffico JSON | resp.header["content-type"].value.cont:"json" |
| Metodi interessanti | req.method:POST OR req.method:PUT OR req.method:PATCH OR req.method:DELETE |
| Potenziali segreti | resp.body.cont:"api_key" OR resp.body.cont:"secret" OR resp.body.cont:"token" |
Limiti
Per mantenere prevedibili i filtri, Ogma limita la complessità delle query:
- Profondità massima di annidamento delle espressioni: 16.
- Numero massimo di clausole: 64.
Se una query diventa troppo complessa, suddividila in filtri salvati o usa Ricerca per un’indagine più ampia.