Ir al contenido

HTTPQL y StreamQL ​

Ogma utiliza un subconjunto del lenguaje de consultas compatible con Caido para filtrar el historial HTTP, el tráfico WebSocket, los resultados de Automatización y las vistas relacionadas.

Sintaxis ​

Las consultas se componen de cláusulas unidas mediante AND y OR.

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

Los paréntesis agrupan expresiones:

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

Se admiten comentarios:

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

Operadores ​

OperadorSignificado
:Igualdad o coincidencia predeterminada, según el tipo de campo
.eq:Igual a
.ne:Distinto de
.cont:Contiene, sin distinguir mayúsculas y minúsculas
.ncont:No contiene, sin distinguir mayúsculas y minúsculas
.cs.cont:Contiene, distinguiendo mayúsculas y minúsculas
.cs.ncont:No contiene, distinguiendo mayúsculas y minúsculas
.like:Coincidencia de patrón de tipo SQL
.nlike:Ausencia de coincidencia de patrón de tipo SQL
.regex:Coincidencia de expresión regular
.nregex:Ausencia de coincidencia de expresión regular
.lt:Menor que
.lte:Menor o igual que
.gt:Mayor que
.gte:Mayor o igual que
.existsLa cabecera existe; usa req.header["Name"].value.exists o su equivalente para la respuesta

Ejemplos HTTP ​

Buscar tráfico de API:

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

Buscar errores del servidor:

text
resp.code.gte:500

Buscar respuestas grandes:

text
resp.len.gt:100000

Buscar respuestas JSON:

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

Buscar solicitudes con cookies:

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

Buscar tráfico modificado por Intercepción o Buscar y reemplazar:

text
req.modified.eq:true

Buscar posibles rutas de administración:

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

Buscar tráfico de repetición de solicitudes o automatización:

text
source:replay OR source:automate

Ejemplos de streaming ​

StreamQL aplica el mismo estilo de consultas a las vistas de WebSocket y de streaming.

Buscar mensajes WebSocket que contengan un campo de token:

text
ws.raw.cont:"token"

Buscar mensajes del servidor al cliente:

text
ws.direction.eq:"To Client"

Buscar mensajes con apariencia de JSON:

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

Filtros guardados prácticos ​

NombreConsulta
Errores de APIreq.path.cont:"/api/" AND resp.code.gte:400
Endpoints de autenticaciónreq.path.cont:"login" OR req.path.cont:"oauth" OR req.path.cont:"session"
Tráfico JSONresp.header["content-type"].value.cont:"json"
Métodos de interésreq.method:POST OR req.method:PUT OR req.method:PATCH OR req.method:DELETE
Posibles secretosresp.body.cont:"api_key" OR resp.body.cont:"secret" OR resp.body.cont:"token"

Límites ​

Para que los filtros sean predecibles, Ogma limita la complejidad de las consultas:

  • Profundidad máxima de anidamiento de expresiones: 16.
  • Número máximo de cláusulas: 64.

Si una consulta resulta demasiado compleja, divídela en filtros guardados o utiliza la búsqueda para realizar una investigación más amplia.

Software propietario. Todos los derechos reservados.