Предисловие
Данная статья посвящена прокси Caido.
В русскоязычном пространстве довольно мало материалов, которые посвящены Caido, а в последнее время меня часто спрашивали, почему я использую Caido, а не Burp Suite. Поэтому в ответ на эти вопросы я решил написать эту статью.
Не одним бурпом едины
Я, как и многие, долгое время (5+ лет) использовал Burp Suite как основной прокси в багхантинге.
К сожалению, в 2024 году у меня в тысячный раз началась классическая проблема, с которой, думаю, встречались многие пользователи Burp — он начал есть память гигабайтами. Проблема системная и очень часто начинает вылезать в бурпе (особенно если у вас проект на миллион запросов). Да что уж там говорить, даже в чистом состоянии Burp ест 2 гигабайта оперативной памяти. Кто мог предположить, что так будет, если написать прокси на Java...

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

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

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

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

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

Почему это круто? Потому что позволяет удобно интегрировать Caido-сервер с другими вашими приложениями, AI-моделями и т.д. В отличие от Burp, где для каждого такого взаимодействия вам скорее всего придётся написать плагин на Java, открывать нужный проект руками и т.д., в Caido через REST API вы просто выбираете нужный проект на вашем сервере, после чего через GraphQL можете делать с ним что хотите.
Простота разработки плагинов
Второе очевидное преимущество, которое частично вытекает из первого: при написании плагинов или просто попытках модификации интерфейса, добавлении нового визуального функционала — всё, что вам нужно, просто написать HTML/CSS/JavaScript фронтенд. Что, по моему опыту, значительно проще, чем пытаться изменить что-то в Burp.
Базовый функционал
HTTPQL
Первое, что вы увидите, запустив прокси и начиная перехватывать трафик, — в строке поиска написано "Enter an HTTPQL query".

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 составляется посредством блок-схем. Доступных блоков довольно много, однако зачастую вам хватит такой простой схемы:

Как можно догадаться, такая схема просто преобразует запрос с помощью JS и возвращает его дальше в цепочку.
В данном случае использовался вот такой простой кусок кода, который просто преобразует число в Unicode-символ по его charcode:
export function run(input, sdk) {
let parsed = sdk.asString(input);
return String.fromCharCode(parseInt(parsed));
}
После чего мы, например, можем использовать его в Automation, выбрав перебор запроса со всеми вариантами на числах от 0 до 100:

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

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

Например, вы можете передать:
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

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

Плагин, который позволяет перекидывать любые объекты в Caido на инстанс другого человека.
Как это работает:
Добавляетесь в друзья посредством отправки PGP fingerprint (обычно используется публичный сервер Caido, но вы можете поднять свой)
После этого вы можете отправлять другу: запросы, пресеты фильтров, скоуп и т.д.
Ультимативное решение для совместного багхантинга, аналогов которого в бурпе я не знаю.
Так что если вы прошли оба условия:
У вас есть друзья
Вы заставили их использовать Caido
Вы обязаны его установить!
Notes++

Плагин, который позволяет красиво вести заметки про ваши находки. Можно создавать папки, линковать запросы из Replay и т.д. Ничего особенного, строго и сердито — must have.
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 нужно время, но думаю после этой статьи если вы дочитали до сюда - вы знаете какую проксю установите когда в следующий раз надоест бурп.
Комментарии (3)

MrAlone
18.11.2025 12:44Мне Burp изначально не зашёл, так уже лет дцать назад малость тормозил на моём лаптопе. Для редких пентестов ZAP оказался более чем достаточным.
mtixt
Что скажешь по основным фичам, аналогичным бурповым: repeater, intruder, etc. Норм ли работать с ними после бурпа, сильно ли отличается UX в плане просмотра/редактирования запросов? Как строит карту сайта, и есть ли пассивный сканер?
Slonser Автор
Repeater нравится больше, Intruder как Intruder (Из-за применения workflow мне Automation в Caido больше чем Intruder в бурпе правда нравится), тут не вижу отличий со всем. Сканнер есть и пасивный и активный, но крайне плох по сравнению с бурпом. Они сканер добавили только летом этого года, думаю им надо дать время чтобы они нормально его допилили