Перейти до вмісту

HTTPQL і StreamQL ​

Ogma використовує сумісну з Caido підмножину мови запитів для фільтрації історії HTTP, трафіку WebSocket, результатів автоматизації й пов’язаних розділів.

Синтаксис ​

Запити складаються з умов, поєднаних AND і OR.

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

Дужки групують вирази:

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

Підтримуються коментарі:

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

Оператори ​

ОператорЗначення
:Рівність або типове зіставлення залежно від типу поля
.eq:Дорівнює
.ne:Не дорівнює
.cont:Містить без урахування регістру
.ncont:Не містить без урахування регістру
.cs.cont:Містить з урахуванням регістру
.cs.ncont:Не містить з урахуванням регістру
.like:Збіг за шаблоном у стилі SQL
.nlike:Заперечення збігу за шаблоном у стилі SQL
.regex:Збіг за регулярним виразом
.nregex:Заперечення збігу за регулярним виразом
.lt:Менше ніж
.lte:Менше або дорівнює
.gt:Більше ніж
.gte:Більше або дорівнює
.existsЗаголовок існує; використовуйте req.header["Name"].value.exists або відповідник для відповіді

Приклади HTTP ​

Знайти трафік API:

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

Знайти помилки сервера:

text
resp.code.gte:500

Знайти великі відповіді:

text
resp.len.gt:100000

Знайти відповіді JSON:

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

Знайти запити з cookie:

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

Знайти трафік, змінений перехопленням або пошуком і заміною:

text
req.modified.eq:true

Знайти ймовірні адміністративні шляхи:

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

Знайти трафік повторного надсилання або автоматизації:

text
source:replay OR source:automate

Приклади потоків ​

StreamQL застосовує той самий стиль запитів до WebSocket і потокових подань.

Знайти повідомлення WebSocket, що містять поле токена:

text
ws.raw.cont:"token"

Знайти повідомлення сервер-клієнт:

text
ws.direction.eq:"To Client"

Знайти повідомлення, схожі на JSON:

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

Практичні збережені фільтри ​

НазваЗапит
Помилки APIreq.path.cont:"/api/" AND resp.code.gte:400
Кінцеві точки автентифікаціїreq.path.cont:"login" OR req.path.cont:"oauth" OR req.path.cont:"session"
Трафік JSONresp.header["content-type"].value.cont:"json"
Цікаві методиreq.method:POST OR req.method:PUT OR req.method:PATCH OR req.method:DELETE
Потенційні секретиresp.body.cont:"api_key" OR resp.body.cont:"secret" OR resp.body.cont:"token"

Обмеження ​

Щоб фільтри залишалися передбачуваними, Ogma обмежує складність запитів:

  • Максимальна глибина вкладених виразів: 16.
  • Максимальна кількість умов: 64.

Якщо запит надто складний, розділіть його на збережені фільтри або використовуйте пошук для ширшого дослідження.

Пропрієтарне програмне забезпечення. Усі права захищено.