Langsung ke konten

HTTPQL dan StreamQL ​

Ogma menggunakan subset bahasa kueri yang kompatibel dengan Caido untuk memfilter riwayat HTTP, lalu lintas WebSocket, hasil Otomatisasi, dan tampilan terkait.

Sintaks ​

Kueri terdiri dari klausa yang dihubungkan dengan AND dan OR.

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

Tanda kurung mengelompokkan ekspresi:

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

Komentar didukung:

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

Operator ​

OperatorMakna
:Sama dengan atau pencocokan default, bergantung pada tipe kolom
.eq:Sama dengan
.ne:Tidak sama dengan
.cont:Mengandung, tanpa membedakan huruf besar/kecil
.ncont:Tidak mengandung, tanpa membedakan huruf besar/kecil
.cs.cont:Mengandung, dengan membedakan huruf besar/kecil
.cs.ncont:Tidak mengandung, dengan membedakan huruf besar/kecil
.like:Pencocokan pola seperti SQL
.nlike:Pencocokan negatif pola seperti SQL
.regex:Pencocokan ekspresi reguler
.nregex:Pencocokan negatif ekspresi reguler
.lt:Lebih kecil dari
.lte:Lebih kecil dari atau sama dengan
.gt:Lebih besar dari
.gte:Lebih besar dari atau sama dengan
.existsHeader ada; gunakan req.header["Name"].value.exists atau padanannya untuk respons

Contoh HTTP ​

Temukan lalu lintas API:

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

Temukan kesalahan server:

text
resp.code.gte:500

Temukan respons besar:

text
resp.len.gt:100000

Temukan respons JSON:

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

Temukan permintaan dengan cookie:

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

Temukan lalu lintas yang dimodifikasi oleh Intersepsi atau Cocokkan & Ganti:

text
req.modified.eq:true

Temukan path yang kemungkinan merupakan path admin:

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

Temukan lalu lintas kirim ulang atau otomatisasi:

text
source:replay OR source:automate

Contoh Stream ​

StreamQL menerapkan gaya kueri yang sama pada tampilan WebSocket dan stream.

Temukan pesan WebSocket yang mengandung kolom token:

text
ws.raw.cont:"token"

Temukan pesan server-ke-klien:

text
ws.direction.eq:"To Client"

Temukan pesan yang menyerupai JSON:

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

Filter Tersimpan Praktis ​

NamaKueri
Kesalahan APIreq.path.cont:"/api/" AND resp.code.gte:400
Endpoint autentikasireq.path.cont:"login" OR req.path.cont:"oauth" OR req.path.cont:"session"
Lalu lintas JSONresp.header["content-type"].value.cont:"json"
Metode menarikreq.method:POST OR req.method:PUT OR req.method:PATCH OR req.method:DELETE
Potensi rahasiaresp.body.cont:"api_key" OR resp.body.cont:"secret" OR resp.body.cont:"token"

Batas ​

Agar filter tetap dapat diprediksi, Ogma membatasi kompleksitas kueri:

  • Kedalaman ekspresi bersarang maksimum: 16.
  • Jumlah klausa maksimum: 64.

Jika kueri terlalu kompleks, pisahkan menjadi filter tersimpan atau gunakan Cari untuk investigasi lebih luas.

Perangkat lunak proprietari. Seluruh hak cipta dilindungi.