본문으로 이동

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"

쿠키가 있는 요청 찾기:

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:"}"

유용한 저장 필터 ​

이름쿼리
API 오류req.path.cont:"/api/" AND resp.code.gte:400
인증 엔드포인트req.path.cont:"login" OR req.path.cont:"oauth" OR req.path.cont:"session"
JSON 트래픽resp.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.

쿼리가 너무 복잡해지면 저장 필터로 나누거나 검색을 사용해 더 넓은 범위를 조사하세요.

독점 소프트웨어입니다. 모든 권리는 저작권자에게 있습니다.