Ga naar de inhoud

HTTPQL en StreamQL ​

Ogma gebruikt een subset van een Caido-compatibele querytaal om de HTTP-geschiedenis, WebSocket-verkeer, resultaten van Automatiseren en gerelateerde weergaven te filteren.

Syntaxis ​

Query's bestaan uit clausules die met AND en OR zijn verbonden.

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

Haakjes groeperen expressies:

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

Commentaar wordt ondersteund:

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

Operatoren ​

OperatorBetekenis
:Gelijk aan of standaardvergelijking, afhankelijk van het veldtype
.eq:Gelijk aan
.ne:Niet gelijk aan
.cont:Bevat, niet hoofdlettergevoelig
.ncont:Bevat niet, niet hoofdlettergevoelig
.cs.cont:Bevat, hoofdlettergevoelig
.cs.ncont:Bevat niet, hoofdlettergevoelig
.like:Vergelijking met een SQL-achtig patroon
.nlike:Negatieve vergelijking met een SQL-achtig patroon
.regex:Vergelijking met een reguliere expressie
.nregex:Negatieve vergelijking met een reguliere expressie
.lt:Kleiner dan
.lte:Kleiner dan of gelijk aan
.gt:Groter dan
.gte:Groter dan of gelijk aan
.existsHeader bestaat; gebruik req.header["Name"].value.exists of het equivalent voor de respons

HTTP-voorbeelden ​

Zoek API-verkeer:

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

Zoek serverfouten:

text
resp.code.gte:500

Zoek grote responses:

text
resp.len.gt:100000

Zoek JSON-responses:

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

Zoek verzoeken met cookies:

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

Zoek verkeer dat is gewijzigd door Interceptie of Zoeken en vervangen:

text
req.modified.eq:true

Zoek paden die waarschijnlijk voor beheer dienen:

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

Zoek verkeer uit Opnieuw versturen of Automatiseren:

text
source:replay OR source:automate

Streamvoorbeelden ​

StreamQL past dezelfde querystijl toe op WebSocket- en streamweergaven.

Zoek WebSocket-berichten die een tokenveld bevatten:

text
ws.raw.cont:"token"

Zoek berichten van server naar client:

text
ws.direction.eq:"To Client"

Zoek JSON-achtige berichten:

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

Praktische opgeslagen filters ​

NaamQuery
API-foutenreq.path.cont:"/api/" AND resp.code.gte:400
Authenticatie-eindpuntenreq.path.cont:"login" OR req.path.cont:"oauth" OR req.path.cont:"session"
JSON-verkeerresp.header["content-type"].value.cont:"json"
Interessante methodenreq.method:POST OR req.method:PUT OR req.method:PATCH OR req.method:DELETE
Mogelijke geheimenresp.body.cont:"api_key" OR resp.body.cont:"secret" OR resp.body.cont:"token"

Limieten ​

Om filters voorspelbaar te houden, beperkt Ogma de complexiteit van query's:

  • Maximale nestingsdiepte van expressies: 16.
  • Maximaal aantal clausules: 64.

Als een query te complex wordt, splits deze dan op in opgeslagen filters of gebruik Zoeken voor breder onderzoek.

Propriëtaire software. Alle rechten voorbehouden.