HTTPQL und StreamQL
Ogma verwendet eine Teilmenge einer Caido-kompatiblen Abfragesprache zum Filtern des HTTP-Verlaufs, des WebSocket-Verkehrs, der Automate-Ergebnisse und verwandter Ansichten.
Syntax
Abfragen bestehen aus Klauseln, die mit AND und OR verbunden werden.
text
req.host:example.com AND resp.code:200Klammern gruppieren Ausdrücke:
text
(req.path.cont:"/api/" OR req.path.cont:"/graphql") AND resp.code.gte:400Kommentare werden unterstützt:
text
// API errors
req.path.cont:"/api/" AND resp.code.gte:500text
/* focus on login */
req.path.cont:"login"Operatoren
| Operator | Bedeutung |
|---|---|
: | Gleichheit oder Standardabgleich, abhängig vom Feldtyp |
.eq: | Ist gleich |
.ne: | Ist ungleich |
.cont: | Enthält, ohne Beachtung der Groß-/Kleinschreibung |
.ncont: | Enthält nicht, ohne Beachtung der Groß-/Kleinschreibung |
.cs.cont: | Enthält, unter Beachtung der Groß-/Kleinschreibung |
.cs.ncont: | Enthält nicht, unter Beachtung der Groß-/Kleinschreibung |
.like: | Musterabgleich nach SQL-Art |
.nlike: | Negativer Musterabgleich nach SQL-Art |
.regex: | Abgleich mit einem regulären Ausdruck |
.nregex: | Negativer Abgleich mit einem regulären Ausdruck |
.lt: | Kleiner als |
.lte: | Kleiner oder gleich |
.gt: | Größer als |
.gte: | Größer oder gleich |
.exists | Header vorhanden; verwenden Sie req.header["Name"].value.exists oder die entsprechende Variante für Antworten |
HTTP-Beispiele
API-Verkehr finden:
text
req.path.cont:"/api/"Serverfehler finden:
text
resp.code.gte:500Große Antworten finden:
text
resp.len.gt:100000JSON-Antworten finden:
text
resp.header["content-type"].value.cont:"application/json"Anfragen mit Cookies finden:
text
req.header["cookie"].value.existsDurch Abfangen (Intercept) oder Suchen & Ersetzen (Match & Replace) veränderten Verkehr finden:
text
req.modified.eq:trueVermutliche Administrationspfade finden:
text
req.path.cont:"/admin" OR req.path.cont:"/manage"Replay- oder Automate-Verkehr finden:
text
source:replay OR source:automateStream-Beispiele
StreamQL wendet denselben Abfragestil auf WebSocket- und Stream-Ansichten an.
WebSocket-Nachrichten mit einem Token-Feld finden:
text
ws.raw.cont:"token"Nachrichten vom Server an den Client finden:
text
ws.direction.eq:"To Client"JSON-ähnliche Nachrichten finden:
text
ws.raw.cont:"{" AND ws.raw.cont:"}"Praktische gespeicherte Filter
| Name | Abfrage |
|---|---|
| API-Fehler | req.path.cont:"/api/" AND resp.code.gte:400 |
| Authentifizierungsendpunkte | req.path.cont:"login" OR req.path.cont:"oauth" OR req.path.cont:"session" |
| JSON-Verkehr | resp.header["content-type"].value.cont:"json" |
| Interessante Methoden | req.method:POST OR req.method:PUT OR req.method:PATCH OR req.method:DELETE |
| Mögliche Geheimnisse | resp.body.cont:"api_key" OR resp.body.cont:"secret" OR resp.body.cont:"token" |
Grenzen
Damit Filter vorhersehbar bleiben, begrenzt Ogma die Komplexität von Abfragen:
- Maximale Verschachtelungstiefe von Ausdrücken: 16.
- Maximale Anzahl von Klauseln: 64.
Wenn eine Abfrage zu komplex wird, teilen Sie sie in gespeicherte Filter auf oder verwenden Sie die Suche für eine breitere Untersuchung.