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:200Nawiasy grupują wyrażenia:
text
(req.path.cont:"/api/" OR req.path.cont:"/graphql") AND resp.code.gte:400Obsługiwane są komentarze:
text
// API errors
req.path.cont:"/api/" AND resp.code.gte:500text
/* focus on login */
req.path.cont:"login"Operatory
| Operator | Znaczenie |
|---|---|
: | 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 |
.exists | Nagłó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:500Znajdź duże odpowiedzi:
text
resp.len.gt:100000Znajdź odpowiedzi JSON:
text
resp.header["content-type"].value.cont:"application/json"Znajdź żądania z ciasteczkami:
text
req.header["cookie"].value.existsZnajdź ruch zmodyfikowany przez funkcje Przechwytywanie lub Dopasowanie i zamiana:
text
req.modified.eq:trueZnajdź ś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:automatePrzykł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
| Nazwa | Zapytanie |
|---|---|
| Błędy API | req.path.cont:"/api/" AND resp.code.gte:400 |
| Punkty końcowe uwierzytelniania | req.path.cont:"login" OR req.path.cont:"oauth" OR req.path.cont:"session" |
| Ruch JSON | resp.header["content-type"].value.cont:"json" |
| Interesujące metody | req.method:POST OR req.method:PUT OR req.method:PATCH OR req.method:DELETE |
| Potencjalne sekrety | resp.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ę.