Предисловие

Данная статья посвящена прокси Caido.

В русскоязычном пространстве довольно мало материалов, которые посвящены Caido, а в последнее время меня часто спрашивали, почему я использую Caido, а не Burp Suite. Поэтому в ответ на эти вопросы я решил написать эту статью.


Не одним бурпом едины

Я, как и многие, долгое время (5+ лет) использовал Burp Suite как основной прокси в багхантинге.

К сожалению, в 2024 году у меня в тысячный раз началась классическая проблема, с которой, думаю, встречались многие пользователи Burp — он начал есть память гигабайтами. Проблема системная и очень часто начинает вылезать в бурпе (особенно если у вас проект на миллион запросов). Да что уж там говорить, даже в чистом состоянии Burp ест 2 гигабайта оперативной памяти. Кто мог предположить, что так будет, если написать прокси на Java...

Потребление памяти Burp Suite
Потребление памяти Burp Suite

Тогда я решил попробовать проект, о котором давно слышал, но он находился в вечной бете — Caido.

Сайт Caido
Сайт Caido

Ключевую причину можно описать одной картинкой при запущенном проекте с 10к+ запросов:

Потребление памяти Caido
Потребление памяти Caido

Как можно заметить, результаты намного лучше, чем у Burp с пустым проектом, что обеспечивается за счёт того, что Caido Server написан на Rust и не требует запуска JVM для своей работы.


Client/Server архитектура

Как можно заметить, я отметил, что память ест "Caido Server". Приставка "Server" тут не случайна. В отличие от Burp, который по стандарту запускается в виде standalone приложения на вашей системе, Caido фактически всегда запускает CLI-приложение. А доступ к интерфейсу прокси осуществляется просто по HTTP через ваш браузер.

Caido в браузере Chrome
Caido в браузере Chrome

Это позволяет развернуть Caido на вашем сервере и даже использовать этот инстанс сразу с нескольких устройств. Вы можете подключиться к серверу с ноутбука днём, а вечером продолжить анализ уже на компьютере. При этом у вас не будет бесконечных проблем с перекидыванием проектов (которые возникли бы при использовании Burp) — всё хранится на сервере.

GraphQL API

Такая реализация породила несколько очень приятных особенностей.

Первая — это GraphQL.

GraphQL интерфейс
GraphQL интерфейс

Как было упомянуто ранее, управление Caido происходит через веб-интерфейс, так вот всё взаимодействие в нём и происходит через GraphQL.

Архитектура Caido
Архитектура Caido

Почему это круто? Потому что позволяет удобно интегрировать Caido-сервер с другими вашими приложениями, AI-моделями и т.д. В отличие от Burp, где для каждого такого взаимодействия вам скорее всего придётся написать плагин на Java, открывать нужный проект руками и т.д., в Caido через REST API вы просто выбираете нужный проект на вашем сервере, после чего через GraphQL можете делать с ним что хотите.

Простота разработки плагинов

Второе очевидное преимущество, которое частично вытекает из первого: при написании плагинов или просто попытках модификации интерфейса, добавлении нового визуального функционала — всё, что вам нужно, просто написать HTML/CSS/JavaScript фронтенд. Что, по моему опыту, значительно проще, чем пытаться изменить что-то в Burp.


Базовый функционал

HTTPQL

Первое, что вы увидите, запустив прокси и начиная перехватывать трафик, — в строке поиска написано "Enter an HTTPQL query".

Главный интерфейс Caido
Главный интерфейс Caido

HTTPQL — это специальный язык запросов в Caido, который довольно интуитивен (учитывая, что подсказки по синтаксису отображаются при составлении запросов, документацию можно даже не открывать — очень просто разобраться по ходу).

Например, чтобы выделить "Все GET-запросы к поддоменам google.com/youtube.com" кроме JS-файлов, вам нужно написать:

(req.host.regex:/\.google\.com$/ or req.host.regex:/\.youtube.com$/) and req.method.eq:"GET" and req.ext.ne:"js"

В Burp же для аналогичного запроса придётся перейти в script mode и начать писать на Java:

var request = requestResponse.request();
return (
    request.header("Host").value().matches(".*\\.google.com$") ||
    request.header("Host").value().matches(".*\\.youtube\\.com$")
)
&& request.fileExtension().equals("js")
&& request.method().equals("GET");

В целом HTTPQL в обычных случаях удобнее, чем дефолтный поиск бурпа, и быстрее, чем писать скрипты в Burp. К сожалению, есть 1% случаев, когда поиск проще осуществить в бурпе, например: "Найти все запросы, в которых присутствует строка qwerty, а query-параметр id=md5(значение хедера x-slonser)" (пример очевидно синтетический, так как не смог в точности воспроизвести в уме реальный пример из своих страданий).

В таких случаях я просто доставал ответ от GraphQL на более широкий HTTPQL-запрос и уже сам в JS это фильтровал. К сожалению, в интерфейсе пока не предусмотрели отдельной кнопки для этого...

Полезная возможность: вы можете сохранить этот запрос как preset, что позволит использовать и комбинировать его в будущем с дополнительными правилами вместе.


Основные разделы интерфейса

Остальные окна в Caido вам окажутся, скорее всего, до боли знакомы из бурпа, но выделю те, которые отличаются:

  • Filter — настройка фильтров, о которых говорилось ранее

  • Automate — аналог Intruder

  • Workflows — скрипты, которые будут выполняться при определённых условиях (подробнее в следующей главе)

  • Environment — переменные окружения для плагинов/workflows


Workflows

Workflows — способ автоматизировать ваши задачи и расширить функционал других секций в Caido.

Workflows бывают трёх видов:

Passive

Запускаются автоматически на всех запросах, которые приходят в прокси. Их полезно использовать, когда вам нужно автоматически выделять запросы по какому-то сложному принципу. Или, например, вы хотите сохранять определённые данные — все встреченные UUID определённой сущности сразу же сохранять в Environment, чтобы потом можно было быстро их достать.

Active

Соответственно, то же самое, что и Passive, но запускаются вручную или плагинами.

Convert

Это workflow, который (как можно догадаться) используется для трансформации одного определённого значения или запроса. Например, чтобы закодировать параметр в base64 и т.д.


Выглядит это примерно так:

Пример workflow
Пример workflow

Как можно заметить, workflow составляется посредством блок-схем. Доступных блоков довольно много, однако зачастую вам хватит такой простой схемы:

Workflow с JavaScript
Workflow с JavaScript

Как можно догадаться, такая схема просто преобразует запрос с помощью JS и возвращает его дальше в цепочку.

В данном случае использовался вот такой простой кусок кода, который просто преобразует число в Unicode-символ по его charcode:

export function run(input, sdk) {
  let parsed = sdk.asString(input);
  return String.fromCharCode(parseInt(parsed));
}

После чего мы, например, можем использовать его в Automation, выбрав перебор запроса со всеми вариантами на числах от 0 до 100:

Настройка Automation
Настройка Automation

Запустив код, вы увидите, что он подставил все символы с чаркодами от 0 до 100 соответственно:

Результат Automation
Результат Automation

Использование других языков программирования

Также, предвосхищая возгласы людей, которым противно писать на JS — это не проблема, ведь есть логический блок shell:

Workflow с Go
Workflow с Go

Например, вы можете передать:

exec /bin/go run /home/slonser/md5/main.go

И он запустит в workflow ваш Go-код, передав данные на stdin (а вы в свою очередь должны вернуть данные через stdout).

Пример Go-скрипта:

package main

import (
        "crypto/md5"
        "fmt"
        "io"
        "os"
)

func main() {
        h := md5.New()
        _, err := io.Copy(h, os.Stdin)
        if err != nil {
                fmt.Fprintln(os.Stderr, "error reading stdin:", err)
                os.Exit(1)
        }
        fmt.Printf("%x\n", h.Sum(nil))
}

Фактически это позволяет сделать через workflow что угодно и как вам удобно, что очень ускоряет процесс автоматизации рутинных задач.

Подробнее расписывать отдельные сценарии не буду — если кто-то из прочитавших решит начать пользоваться Caido, я думаю, он сам придумает множество таковых.


Полезные примеры workflow

Из своих элегантных примеров могу предоставить workflow eval:

export function run(input, sdk) {
  let parsed = sdk.asString(input);
  parsed=eval("`"+parsed.replace('`','\\`')+"`")
  return parsed;
}

Он позволяет мне делать запросы вида:

GET /admin/${btoa('123')} HTTP/1.1
Host: localhost

То есть прямо внутри HTTP-запроса вставлять JS (иногда бывает полезно, когда нужно руками пройтись в replay по сложным значениям).


Примечание: стоит отметить, что существует отдельный плагин, который реализует магазин workflows, откуда можно скачать workflows, созданные кем-то из community.


Плагины

Хоть Caido и довольно силён из коробки, без плагинов от community вы вряд ли им будете пользоваться. Тут бы хотелось рассказать о тех, которые мне особо нравятся:

Omnioast

Плагин Omnioast
Плагин Omnioast

Многие могли заметить, что в Caido нет коллаборатора — так вот это плагин, который его заменяет и делает это даже лучше. В нём можно добавить несколько различных видов провайдеров запросов, но я, конечно, советую либо использовать публичный interactsh, либо (что лучше) развернуть свой инстанс interactsh и подключаться через него. Сможете по аналогии с коллаборатором бурпа получать всё — от DNS до SMTP.

Drop

Плагин Drop
Плагин Drop

Плагин, который позволяет перекидывать любые объекты в Caido на инстанс другого человека.

Как это работает:

  • Добавляетесь в друзья посредством отправки PGP fingerprint (обычно используется публичный сервер Caido, но вы можете поднять свой)

  • После этого вы можете отправлять другу: запросы, пресеты фильтров, скоуп и т.д.

Ультимативное решение для совместного багхантинга, аналогов которого в бурпе я не знаю.

Так что если вы прошли оба условия:

  • У вас есть друзья

  • Вы заставили их использовать Caido

Вы обязаны его установить!

Notes++

Плагин Notes++
Плагин Notes++

Плагин, который позволяет красиво вести заметки про ваши находки. Можно создавать папки, линковать запросы из Replay и т.д. Ничего особенного, строго и сердито — must have.

Ebka AI

Плагин Ebka AI
Плагин Ebka AI

В названии данного расширения можно уловить русский след — всё потому, что написал его автор данной статьи. Функционал плагина позволяет использовать Caido как MCP-tool, он имеет доступ к большей части функционала Caido. Вы можете подключить его к Claude/Cursor и написать:

Найди мне все ручки API, разбей их на логические блоки, создай для каждого блока replay-коллекцию...

Основная цель плагина — помочь автоматизировать рутинные задачи и уменьшить времязатраты на создание красивого Caido Workspace.


Также существует множество других плагинов — от детекта мисконфига JWT до CSP auditor. Описывать каждый отдельно нет смысла. Можете ознакомиться с ними в магазине плагинов.


Ложка дёгтя

Очевидно, что всё не может быть хорошо. Так в чём же главная проблема Caido?

Проблема довольно проста — отсутствие нормального аналога Active Scan из бурпа. Фактически в Caido есть плагин со сканером, но его начали писать только в этом году, и он пока что имеет жалкий детский уровень по сравнению с бурповым.

Если вы, как и я, используете прокси в основном только для ручного тестирования — можно пережить, иначе, возможно, Caido пока не для вас.

Ценообразование

Также нужно понимать, что бесплатная версия Caido ограничена по количеству проектов и установленных плагинов. Платная версия стоит 200$ в год (что дешевле 500$ за Burp Suite, но всё же может кого-то отпугнуть).

Финал

Я попытался кратко описать все что является ключевым для меня в выборе Caido перед бурп.
Чтобы проникнуться Caido нужно время, но думаю после этой статьи если вы дочитали до сюда - вы знаете какую проксю установите когда в следующий раз надоест бурп.

Комментарии (2)


  1. mtixt
    18.11.2025 12:44

    Что скажешь по основным фичам, аналогичным бурповым: repeater, intruder, etc. Норм ли работать с ними после бурпа, сильно ли отличается UX в плане просмотра/редактирования запросов? Как строит карту сайта, и есть ли пассивный сканер?


    1. Slonser Автор
      18.11.2025 12:44

      Repeater нравится больше, Intruder как Intruder (Из-за применения workflow мне Automation в Caido больше чем Intruder в бурпе правда нравится), тут не вижу отличий со всем. Сканнер есть и пасивный и активный, но крайне плох по сравнению с бурпом. Они сканер добавили только летом этого года, думаю им надо дать время чтобы они нормально его допилили