Перейти к содержимому

HTTPQL и StreamQL ​

Ogma использует совместимое с Caido подмножество языка запросов для истории HTTP, WebSocket, результатов Automate и связанных разделов.

Синтаксис ​

Запросы состоят из условий, соединённых 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

Найти трафик, изменённый Intercept или Match & Replace:

text
req.modified.eq:true

Найти вероятные административные пути:

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

Найти трафик Replay или Automate:

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.

Если запрос слишком сложный, разделите его на сохранённые фильтры или используйте поиск для более широкого исследования.

Проприетарное ПО. Все права защищены.