
На последнем jeopardy участник из нашей команды потратил 40 минут на web-таск — менял параметры через адресную строку, открывал DevTools, вручную правил cookie в Application. Ноль результата. Я подсел, открыл Burp Suite, перехватил POST-запрос к /api/checkout, заменил поле price с 13370 на 1 и забрал флаг за полторы минуты. Разница — не в скилле, а в инструменте. Когда видишь каждый байт трафика и можешь поменять его до отправки на сервер, web-таски перестают быть загадкой. Дальше — пошаговое руководство, как настроить Burp Suite для начинающих и начать решать web-таски.
Burp Suite Community Edition бесплатна и покрывает всё, что нужно для CTF: Proxy с перехватом, Repeater, Intruder (с ограничением скорости), Decoder, Comparer. Инсталлятор качается с portswigger.net и уже включает Java — ставить отдельно не надо. Подробнее — в нашем статье о создание ctf заданий.
При первом запуске: Temporary project → Use Burp defaults → Start Burp. Для CTF сохранять проект на диск бессмысленно — задание решается за одну сессию.
Разница между редакциями:
| Возможность | Community (бесплатно) | Professional ($449/год) |
|---|---|---|
| Proxy и Intercept | Да | Да |
| Repeater | Да | Да |
| Intruder | Ограниченная скорость | Полная скорость |
| Decoder, Comparer | Да | Да |
| Активный Scanner | Нет | Да |
| Collaborator (OOB) | Нет | Да |
| BApp Store | Частично | Полностью |
Для web CTF заданий Community хватает с запасом. Полноскоростной Intruder и активный Scanner — единственные серьёзные ограничения, и на CTF-тасках с небольшими словарями и ручным тестированием они некритичны.
Burp работает как перехватывающий прокси-сервер. По сути это Adversary-in-the-Middle (T1557 по MITRE ATT&CK), только применяете вы её к собственному трафику в контролируемой среде. По умолчанию Burp слушает на 127.0.0.1:8080. Браузер нужно направить через этот прокси, чтобы каждый HTTP/HTTPS-запрос проходил через Burp.
Burp включает встроенный Chromium с предустановленным CA-сертификатом. Proxy → Intercept → Open Browser — и можно сразу перехватывать HTTPS без возни с сертификатами. Для быстрого решения одиночного CTF-таска это самый короткий путь. Минус — неудобно переключаться между обычным серфингом и работой через прокси.
Для регулярного участия в CTF удобнее связка Firefox + FoxyProxy. Создаёте профиль «Burp» и переключаетесь между прокси и прямым соединением одним кликом. Без FoxyProxy каждый раз придётся лезть в Firefox → Настройки → Основные → Параметры сети → Ручная настройка прокси. Уже на третьем таске это начинает бесить.
Настройка FoxyProxy: установите расширение из addons.mozilla.org, создайте профиль с Title «Burp», Proxy Type — HTTP, Hostname — 127.0.0.1, Port — 8080. Активируйте профиль — иконка сменит цвет, трафик пойдёт через Burp.
Без CA-сертификата Burp не расшифрует HTTPS-трафик, и каждый сайт покажет ошибку SSL. Встроенный браузер — сертификат уже на месте. Для Firefox:
http://burp/ в Firefox — загрузится страница Burp с кнопкой CA Certificatecacert.dercacert.der, отметьте «Доверять при идентификации веб-сайтов» → OKПроверка: откройте любой HTTPS-сайт через прокси. Нет предупреждений, а в Burp → Proxy → HTTP History появился запрос — перехват трафика браузера работает.
Типичная ошибка новичков: забыть установить сертификат и убить полчаса на «почему ничего не грузится». Вторая по частоте — не отключить кэш браузера. Ответы приходят из кэша, минуя Burp, и вы сидите думаете, что Burp сломался.
Proxy — ядро всей работы. Здесь происходит перехват запросов Burp Suite, отсюда данные уходят в остальные инструменты.
Прежде чем что-то перехватывать — просто походите по целевому приложению с выключенным Intercept (кнопка Intercept is off). Все запросы и ответы записываются в Proxy → HTTP History. Это пассивная фаза, и пропускать её — ошибка. Вы увидите:
X-Role, X-Admin, Authorization — подсказки к логике доступаСортировка по Status Code моментально выводит на интересное: 302-редиректы (куда перенаправляет?) и 403-запреты (что скрывают?). В CTF 403 часто означает «здесь лежит что-то ценное, но тебя не пускают» — именно такие эндпоинты стоит ковырять первыми.
Включите Intercept is on — каждый исходящий запрос замораживается в Burp до вашего решения. Три кнопки:
Момент, который русскоязычные руководства обычно пропускают: включайте Intercept только перед конкретным действием (нажатие кнопки, отправка формы), а не для общего серфинга. Иначе будете десятки раз жать Forward на фоновые запросы к аналитике и CDN, потеряете фокус и пропустите нужный запрос. Intercept OFF для маппинга приложения, Intercept ON для точечной модификации.
Функция, о которой молчат почти все русскоязычные руководства: перехватывать можно не только запросы, но и ответы. Proxy → Options → Intercept Server Responses — включите. Burp остановит ответ сервера до того, как он попадёт в браузер. Зачем: убрать JavaScript-проверку, изменить admin: false на admin: true в JSON-ответе, подсмотреть скрытые данные до рендеринга страницы. На CTF я этим пользуюсь реже, чем перехватом запросов, но когда нужно — экономит кучу времени.
CTF-таски работают на конкретном хосте. HTTP History быстро засоряется запросами к CDN, аналитике и внешним ресурсам. Правый клик на запросе к целевому хосту → Add to scope. В HTTP History включите фильтр Show only in-scope items, а в Proxy → Options активируйте «And URL is in target scope». Теперь Intercept ловит только запросы к вашей цели, а не весь мусор.
Этот паттерн встречается в подавляющем большинстве web CTF заданий. Форма на странице ограничивает ввод через JavaScript: readonly-поля, допустимые типы файлов, числовые диапазоны. JavaScript выполняется в вашем браузере, а на сервере этих проверок может не быть. По документам — нельзя. На практике — элементарно.
Классический пример из Web Security Academy от PortSwigger — лаба с манипуляцией ценой. У вас $100 на счету, куртка стоит $1337. Через интерфейс цену не изменить. Через Burp:
POST /cart HTTP/2
Host: target.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
productId=2&redir=PRODUCT&quantity=1&price=1
Оригинальное значение price=133700 (в центах) заменено на price=1. Forward — в корзине куртка за 1 цент. Интерфейс не позволял, но Burp Suite работает на уровне HTTP, ниже JavaScript.
Алгоритм для любого таска с клиентской валидацией:
role=user → role=admin, filename="photo.jpg" → filename="shell.php", quantity=1 → quantity=-1По MITRE ATT&CK модификация запросов к веб-приложению — техника Exploit Public-Facing Application (T1190, Initial Access). Именно это моделируют CTF-задания.
Repeater — инструмент, в котором вы проведёте больше всего времени при решении CTF. Отправляете один и тот же запрос с разными параметрами, мгновенно видите ответ сервера. Никакого повторного перехвата, никакого переключения вкладок.
Отправка: правый клик на любом запросе в HTTP History или Intercept → Send to Repeater (Ctrl+R). Слева — редактируемый запрос, справа — ответ. Send → получили ответ. Изменили параметр → Send снова. Просто и быстро.
IDOR (Insecure Direct Object Reference). Перехватите GET /api/user/1337/profile. В Repeater замените 1337 на 1, 2, 3 и отправьте каждый вариант. Сервер отдаёт данные чужих пользователей без проверки авторизации? Это IDOR — одна из самых частых уязвимостей в CTF (OWASP A01:2021 Broken Access Control). На реальных проектах, кстати, тоже встречается пугающе часто.
SQL Injection. Запрос содержит id=5. В Repeater пробуете id=5' — если размер ответа или статус-код изменились, это маркер инъекции (OWASP A03:2021 Injection). Одиночная кавычка не даёт видимой разницы? Пробуйте комментарии (--, #), логические конструкции (' OR '1'='1) или тайминг-инъекции (SLEEP()). Дальше: id=5' OR 1=1--, id=5' UNION SELECT null,null--. Repeater позволяет итерировать пейлоады за секунды.
Манипуляция cookie и JWT. Скопируйте запрос с сессионным cookie в Repeater. Cookie выглядит как Base64 — декодируйте через Decoder (или прямо в Inspector панели Repeater). Часто внутри обнаруживается JSON с полем "admin": false или "role": "user". Меняете значение, кодируете обратно, вставляете в cookie и отправляете. Эта техника связана с Steal Web Session Cookie (T1539) и Web Cookies (T1606.001) по MITRE ATT&CK.
На что смотреть в каждом ответе:
flag{...}, CTF{...}), SQL-ошибки с именами таблиц, пути к файлам в сообщениях об ошибкахIntruder автоматизирует отправку множества вариантов запроса. В Community Edition скорость ограничена (throttling между запросами), но для CTF с небольшими словарями хватает.
Ctrl+I)§ вокруг предполагаемых параметров. Нажмите Clear §, затем выделите конкретный параметр и Add §POST /login HTTP/1.1
Host: target.ctf.local
Content-Type: application/x-www-form-urlencoded
username=admin&password=§password123§
Четыре типа атак:
| Тип | Когда использовать | Пример в CTF |
|---|---|---|
| Sniper | Один параметр, один wordlist | Перебор ID: /user/§1§/profile |
| Battering Ram | Одно значение во все позиции | Одинаковый токен в нескольких заголовках |
| Pitchfork | Разные списки синхронно (строка 1 из списка A + строка 1 из списка B) | Пары login:password из утечки |
| Cluster Bomb | Все комбинации всех списков | Полный перебор login + password |
Для CTF чаще всего нужен Sniper (перебор одного параметра) и изредка Cluster Bomb (брутфорс пары логин/пароль). Cluster Bomb с двумя списками по 100 значений генерирует 10 000 запросов — в Community Edition это займёт время, но для CTF обычно хватает списков по 20-50 значений.
По MITRE ATT&CK перебор паролей через Intruder — техника Password Guessing (T1110.001, Credential Access).
Сортируйте по столбцу Length. Все ответы — 403 по 250 байт, а один — 200 по 1200 байт? Это ваш результат. Тот же приём со Status code: один 302-редирект среди сотни 401 — индикатор правильного пароля. Я обычно сразу кликаю на заголовок столбца Length — аномалия всплывает моментально.
В CTF постоянно встречаются закодированные данные: Base64-токены, URL-encoded параметры, hex-значения, иногда цепочки кодировок. Decoder конвертирует на лету:
YWRtaW46dHJ1ZQ== → admin:true%3Cscript%3Ealert(1)%3C%2Fscript%3E как <script>alert(1)</script>Цепочки декодирования — частый CTF-приём: значение сначала Base64, потом URL-encoded, потом снова Base64. Такая матрёшка. В Decoder можно нажать Smart Decode — Burp попробует автоматически определить кодировку — или последовательно выбирать формат вручную.
Comparer побайтово сравнивает два ответа или запроса. Два ответа выглядят визуально одинаковыми, но один содержит скрытый параметр или отличается на символ — глазами не заметите, Comparer покажет. Отправьте оба ответа из Repeater в Comparer (правый клик → Send to Comparer) и нажмите Words или Bytes — Burp подсветит различия. В CTF это помогает найти разницу между «правильным» и «неправильным» ответом, когда оба возвращают 200 OK.
Порядок действий, который работает на большинстве jeopardy web-тасков:
Разведка. Откройте таск в браузере через Burp-прокси с Intercept OFF. Прокликайте все страницы, формы, кнопки. 3-5 минут на изучение HTTP History — не жалейте этого времени.
Scope. Добавьте хост таска в Scope, включите фильтр Show only in-scope items — уберите шум.
Карта эндпоинтов. Просмотрите все URL в HTTP History. /api/... вызовы, параметры id, role, token, admin, кастомные заголовки — запишите подозрительные.
Repeater для ручного теста. Нашли запрос с интересными параметрами — Ctrl+R, начинайте менять значения. Проверяйте IDOR, меняйте роли, пробуйте спецсимволы для SQL-инъекций.
Intercept для обхода валидации. Форма не пускает нужные символы или ограничивает тип файла — заполните валидно, включите Intercept ON, подмените перед отправкой.
Intruder для перебора. Нужно подобрать ID, пароль или скрытый параметр — Ctrl+I, загрузите wordlist, сортируйте результаты по Length.
Decoder для кодировок. Непонятный cookie или токен — скопируйте в Decoder, попробуйте Smart Decode или Base64 вручную.
Comparer для сравнения. Два ответа выглядят одинаково — отправьте оба в Comparer, ищите побайтовую разницу.
| Комбинация | Действие |
|---|---|
Ctrl+R |
Отправить в Repeater |
Ctrl+I |
Отправить в Intruder |
Ctrl+Shift+R |
Повторить запрос в Repeater |
Ctrl+F |
Поиск по запросу/ответу |
Четыре комбинации покрывают 90% действий. Запомните Ctrl+R первым — как пользоваться Burp Suite эффективно сводится к скорости работы с Repeater.
«Зачем Burp, если есть DevTools?» — слышу регулярно. DevTools показывают трафик, но не дают контроля. Нельзя остановить POST на полпути и изменить тело. Нельзя за секунду отправить тот же запрос с тремя разными значениями параметра. Нельзя прогнать 500 вариантов одного поля и отсортировать по размеру ответа. DevTools — это наблюдение. Burp — управление.
По опыту решения CTF-тасков, 80% web-заданий закрываются через Repeater. Не через Intruder, не через Scanner — через ручную модификацию одного-двух параметров и внимательное сравнение ответов. Intruder нужен реже, чем кажется на старте. А вот привычка тратить первые пять минут на пассивную разведку через HTTP History, составить карту эндпоинтов и только потом лезть менять параметры — это то, что отличает решённый таск от «ну, пробовал XSS в каждое поле и ничего не нашёл».
Ещё один момент: Community Edition достаточна для 95% CTF-тасков. Не покупайте Pro «для обучения» — научитесь решать задачи в Community, поймите свои ограничения и уже потом решите, нужен ли Pro. Если хочешь не просто writeup, а пройти каждую атаку самостоятельно от начала до конца — на WAPT эту цепочку проходят в течение двух модулей с лабами.
🚀 Хочешь закрепить на практике? Реши задачи по теме на HackerLab — категория «web».
0 комментариев
Пожалуйста, войдите, чтобы оставить комментарий.
Загрузка комментариев...