Przejdź do treści

HTTPQL i StreamQL ​

Ogma korzysta z podzbioru języka zapytań zgodnego z Caido do filtrowania historii HTTP, ruchu WebSocket, wyników z sekcji Automatyzacja (Automate) i powiązanych widoków.

Składnia ​

Zapytania składają się z warunków połączonych przez AND i OR.

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

Nawiasy grupują wyrażenia:

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

Obsługiwane są komentarze:

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

Operatory ​

OperatorZnaczenie
:Równość lub domyślne dopasowanie, zależnie od typu pola
.eq:Równość
.ne:Nierówność
.cont:Zawiera, bez rozróżniania wielkości liter
.ncont:Nie zawiera, bez rozróżniania wielkości liter
.cs.cont:Zawiera, z rozróżnianiem wielkości liter
.cs.ncont:Nie zawiera, z rozróżnianiem wielkości liter
.like:Dopasowanie do wzorca w stylu SQL
.nlike:Brak dopasowania do wzorca w stylu SQL
.regex:Dopasowanie do wyrażenia regularnego
.nregex:Brak dopasowania do wyrażenia regularnego
.lt:Mniejsze niż
.lte:Mniejsze lub równe
.gt:Większe niż
.gte:Większe lub równe
.existsNagłówek istnieje; użyj req.header["Name"].value.exists lub odpowiednika dla odpowiedzi

Przykłady HTTP ​

Znajdź ruch API:

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

Znajdź błędy serwera:

text
resp.code.gte:500

Znajdź duże odpowiedzi:

text
resp.len.gt:100000

Znajdź odpowiedzi JSON:

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

Znajdź żądania z ciasteczkami:

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

Znajdź ruch zmodyfikowany przez funkcje Przechwytywanie lub Dopasowanie i zamiana:

text
req.modified.eq:true

Znajdź ścieżki prawdopodobnie związane z administracją:

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

Znajdź ruch z sekcji Ponowne wysyłanie lub Automatyzacja:

text
source:replay OR source:automate

Przykłady dla strumieni ​

StreamQL stosuje ten sam styl zapytań do widoków WebSocket i strumieni.

Znajdź wiadomości WebSocket zawierające pole tokenu:

text
ws.raw.cont:"token"

Znajdź wiadomości od serwera do klienta:

text
ws.direction.eq:"To Client"

Znajdź wiadomości przypominające JSON:

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

Przydatne zapisane filtry ​

NazwaZapytanie
Błędy APIreq.path.cont:"/api/" AND resp.code.gte:400
Punkty końcowe uwierzytelnianiareq.path.cont:"login" OR req.path.cont:"oauth" OR req.path.cont:"session"
Ruch JSONresp.header["content-type"].value.cont:"json"
Interesujące metodyreq.method:POST OR req.method:PUT OR req.method:PATCH OR req.method:DELETE
Potencjalne sekretyresp.body.cont:"api_key" OR resp.body.cont:"secret" OR resp.body.cont:"token"

Ograniczenia ​

Aby działanie filtrów było przewidywalne, Ogma ogranicza złożoność zapytań:

  • Maksymalna głębokość zagnieżdżenia wyrażeń: 16.
  • Maksymalna liczba warunków: 64.

Jeśli zapytanie staje się zbyt złożone, podziel je na zapisane filtry lub skorzystaj z sekcji Wyszukiwanie, aby przeprowadzić szerszą analizę.

Oprogramowanie własnościowe. Wszelkie prawa zastrzeżone.