Эксплуатация NoSQLi с помощью массивов параметров 💨
Если приложение не принимает JSON и работает только с
Многие серверные либы автоматически преобразуют параметры вида:
в объект:
Таким образом, можно передавать NoSQL-операторы через обычные параметры формы🔥
Ключевое:
➡️ Парсер на сервере преобразует массивы в объекты
➡️ Ограничение по
➡️ NoSQL-операторы можно внедрять без JSON
Если приложение не принимает JSON и работает только с
application/x-www-form-urlencoded, это не защита от NoSQL-инъекций.Многие серверные либы автоматически преобразуют параметры вида:
username[$ne]=1
в объект:
{ username: { $ne: 1 } }Таким образом, можно передавать NoSQL-операторы через обычные параметры формы
Ключевое:
Content-Type не спасает от инъекцииPlease open Telegram to view this post
VIEW IN TELEGRAM
👍8❤2
8 недооценённых фич Burp Suite, которые экономят часы тестирования ⚡️
Большинство багхантеров ограничиваются использованием Proxy (Interceptor), Repeater и Intruder🥔
Но есть функции, которые реально ускоряют работу и помогают находить больше багов:
1️⃣ Macros → автоматизация рутины (полезно, когда токен меняется на каждый запрос)
2️⃣ Match & Replace → автоматическая подмена данных в запросах/ответах
3️⃣ Logger → продвинутый логгер поверх HTTP history (быстрый поиск аномалий)
4️⃣ Comparer → сравнение запросов и ответов
5️⃣ Find scripts → сбор всех JS-файлов и скрытых API
6️⃣ Send group in parallel → отправка запросов одновременно (особенно полезно при тестировании race condition)
7️⃣ Remove JS validation → обход фронтенд-валидации форм
8️⃣ Unhide hidden inputs → поиск скрытых параметров
Большинство багхантеров ограничиваются использованием Proxy (Interceptor), Repeater и Intruder
Но есть функции, которые реально ускоряют работу и помогают находить больше багов:
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍9👏3🫡3
Second-Order (Stored) IDOR: заметки для багхантера 💡
Обычный IDOR срабатывает сразу: ты меняешь условный
Как это выглядит⤵️
Ты подсовываешь тот же айдишник жертвы в одном месте,
а доступ к данным происходит позже — через другой эндпоинт или фоновую джобу.
➡️ В момент инъекции всё выглядит легитимно
➡️ Эксплуатация происходит совсем в другом контексте
Атака — это всегда два шага:
1⃣ Seed (сохранение): инжектишь ID жертвы в безобидное поле: профиль, настройки, связанный ресурс. Сервер проверяет сессию и спокойно сохраняет данные.
2⃣ Trigger (исполнение): позже происходит асинхронное действие. Система берёт сохранённый ID из базы, слепо ему доверяет и выполняет операцию.
Почему такие баги часто дают высокий импакт:
⚫️ Сканеры почти не находят такие баги — здесь нужно понимать состояние приложения, бизнес-логику и отложенное выполнение
⚫️ Разработчики часто защищают только публичные API
⚫️ Внутренние джобы (генерация PDF, отправка писем и т.д.) считаются «безопасными»
⚫️ Проверки прав доступа на втором этапе просто отсутствуют
Где искать⏳
Ищи функционал приложения с асинхронной обработкой:
⚫️ Экспорты и отчёты: меняй ID аккаунта → запрашивай CSV/PDF → через время получай данные жертвы
⚫️ Webhooks и интеграции: подменяй ID workspace → при синхронизации (Slack, Jira) получай чужие данные
⚫️ Автоматические саппорт-боты: вставляй ID заказа жертвы → бот подтягивает детали из базы и показывает чужие данные
Что нужно❓
1⃣ Две учетки: атакующий (User A) и жертва (User B)
2⃣ Терпение: ввел данные → подождал выполнение задачи → проверил результат (почта, webhook и т.д.) → повторил
Обычный IDOR срабатывает сразу: ты меняешь условный
user_id=1 на user_id=2 в запросе — и сервер мгновенно отдаёт данные второго юзера. Second-order IDOR работает иначе — с «задержкой». Как это выглядит
Ты подсовываешь тот же айдишник жертвы в одном месте,
а доступ к данным происходит позже — через другой эндпоинт или фоновую джобу.
Атака — это всегда два шага:
Почему такие баги часто дают высокий импакт:
Где искать
Ищи функционал приложения с асинхронной обработкой:
Что нужно
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8🔥4
В Chrome при нажатии на значок очистки (иконка ❌ для быстрой очистки поля) в 🔍
Если стилизовать элемент так, чтобы эта иконка покрывала нужную целевую область, на выходе получишь надёжный 1-click вектор эксплуатации XSS⤵️
<input type="search"> запускаются события onsearch и oninput Если стилизовать элемент так, чтобы эта иконка покрывала нужную целевую область, на выходе получишь надёжный 1-click вектор эксплуатации XSS
<h1>Click here</h1>
<input type=search value=x onsearch=alert('onsearch') oninput=alert('oninput') style=position:fixed;left:50%;top:50%;padding:0;width:10px;z-index:99;transform:scale(9999);opacity:0>
Please open Telegram to view this post
VIEW IN TELEGRAM
❤14🔥5
Broken Access Control: с чего начинать охоту 🔓
BAC — это зачастую не про сложные эксплойты. Это про логику и внимательность. Разберемся, с чего вообще начинать⬇️
1️⃣ Разведка модели авторизации
Прежде чем кидаться менять ID в запросах — разберись, как работает авторизация на таргете. RBAC? Мультитенант? Обычная модель «юзер-админ»?
2️⃣ Тестовые аккаунты
Минимум — два обычных аккаунта (User A и User B). Если RBAC — по аккаунту на каждую роль. Мультитенант? Регистрируй аккаунты в разных организациях/тенантах.
3️⃣ Маппинг
Прогоняй приложение через Burp/Caido под каждым аккаунтом. Лови каждый эндпоинт и роут. Выделяй контролируемые параметры:
4️⃣ Атака
Берешь токен/куки User B и пробуешь дёрнуть ресурсы User A. Чекни админские эндпоинты из-под обычного юзера.
Не забывай про менее очевидные места — массовые операции, экспорт данных, вебхуки, GraphQL-запросы с вложенными объектами. Там часто забывают про проверки🤔
P. S. Autorize — расширение для Burp, которое автоматизирует поиск BAC:
— перехватывает запросы привилегированного юзера,
— повторяет их с менее привилегированными аккаунтами,
— сравнивает ответы и находит байпасы.
Материалы и лабы по теме:
🧡 Access control vulnerabilities and privilege escalation
🧡 Testing access controls with Burp Suite
🧡 Начинаем в багбаунти: доступно об уязвимостях типа Broken Access Control
BAC — это зачастую не про сложные эксплойты. Это про логику и внимательность. Разберемся, с чего вообще начинать
Прежде чем кидаться менять ID в запросах — разберись, как работает авторизация на таргете. RBAC? Мультитенант? Обычная модель «юзер-админ»?
Это определяет стратегию тестирования.
Минимум — два обычных аккаунта (User A и User B). Если RBAC — по аккаунту на каждую роль. Мультитенант? Регистрируй аккаунты в разных организациях/тенантах.
Прогоняй приложение через Burp/Caido под каждым аккаунтом. Лови каждый эндпоинт и роут. Выделяй контролируемые параметры:
userId, orderId, accountId, UUID и т. д.Берешь токен/куки User B и пробуешь дёрнуть ресурсы User A. Чекни админские эндпоинты из-под обычного юзера.
Не забывай про менее очевидные места — массовые операции, экспорт данных, вебхуки, GraphQL-запросы с вложенными объектами. Там часто забывают про проверки
P. S. Autorize — расширение для Burp, которое автоматизирует поиск BAC:
— перехватывает запросы привилегированного юзера,
— повторяет их с менее привилегированными аккаунтами,
— сравнивает ответы и находит байпасы.
Материалы и лабы по теме:
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👌3
Почему wildcard DNS ломает разведку поддоменов 🚨
Если ты собираешь поддомены и видишь тысячи хостов — есть шанс, что это не находка, а wildcard DNS.
Собрали краткую методологию, чтобы не тратить время впустую:
1️⃣ Генерация + DNS-резолв
Не ограничивайся стандартными словарями. Используй мутации (dev → dev-api, api-v2 и т.д.), OSINT (старые DNS-записи, сертификаты, архивы), брутфорс по шаблонам.
✔️ Проверяй случайные домены → выявляй wildcard
✔️ Фиксируй IP / CNAME / повторяющиеся ответы
2️⃣ Первичная фильтрация
Часть шума можно убрать на уровне DNS: одинаковые IP, одинаковые CNAME.
Но этого недостаточно: реальные хосты могут делить IP с wildcard, CDN усложняют анализ.
При сомнениях переходи к анализу HTTP-ответов.
3️⃣ Анализ HTTP-ответов
Для резолвящихся хостов собери:
🔵 статус-код
🔵 тело ответа
🔵 заголовки
🔵 размер
🔵 title
4️⃣ Кластеризация результатов и анализ «выбросов»
Сгруппируй результаты по:
🔵 IP / CNAME
🔵 IP + статус
🔵 хешу тела
🔵 структуре ответа
🔵 title
🔵 fingerprint (IP + статус + размер + title)
Дальше:
🔵 массовые одинаковые ответы → игнор
🔵 редкие/уникальные → приоритет
Если ты собираешь поддомены и видишь тысячи хостов — есть шанс, что это не находка, а wildcard DNS.
Wildcard DNS (*.example.com) отвечает на любой запрос к несуществующему поддомену.
Собрали краткую методологию, чтобы не тратить время впустую:
генерация → DNS → проверка wildcard → HTTP → кластеризация → анализ «выбросов»
Не ограничивайся стандартными словарями. Используй мутации (dev → dev-api, api-v2 и т.д.), OSINT (старые DNS-записи, сертификаты, архивы), брутфорс по шаблонам.
Цель — получить максимум кандидатов.
Часть шума можно убрать на уровне DNS: одинаковые IP, одинаковые CNAME.
Но этого недостаточно: реальные хосты могут делить IP с wildcard, CDN усложняют анализ.
При сомнениях переходи к анализу HTTP-ответов.
Для резолвящихся хостов собери:
Сгруппируй результаты по:
Дальше:
Именно «выбросы» чаще всего ведут к реальным сервисам и точкам входа.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7✍7
Как правильно работать со скоупом в Burp Suite ⁉️
Скоуп помогает убрать лишний трафик от браузера и сервисов, которые не относятся к цели. Так проще смотреть только нужные запросы и не тонуть в шуме.
Есть два удобных подхода⬇️
1️⃣ Через HTTP history и Site map
Изучи историю HTTP-запросов:
Добавь в скоуп нужные хосты:
Включи фильтр:
Так Burp будет показывать только то, что относится к цели.
2️⃣ Через регулярные выражения
В разделе
Примеры:
🧡 Все поддомены:
🧡 Только нужные поддомены:
Скоуп помогает убрать лишний трафик от браузера и сервисов, которые не относятся к цели. Так проще смотреть только нужные запросы и не тонуть в шуме.
Есть два удобных подхода
Изучи историю HTTP-запросов:
Proxy → HTTP history
Добавь в скоуп нужные хосты:
Target → Site map → Add to scope
или
Proxy → HTTP history → Add to scope
Включи фильтр:
Show only in-scope items
Так Burp будет показывать только то, что относится к цели.
В разделе
Target → Scope включи эту фичу флажком Use advanced scope control
Примеры:
.*\.target\.com$(api|web)\.target\.com$Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤4
Майские — самое время погрузиться в кроличью нору. И JWT — одна из тех тем, где глубина напрямую конвертируется в баги 💪
Мы уже разбирали атаки на JWT — вам зашло. Но это только верхушка айсберга.
У @rmrf_0 есть серия гайдов, которая закрывает тему: от разбора токена побайтово до постквантовой крипты. Врывайся⤵️
1. Почему JWT сломан by design
2. Анатомия токена
3. alg:none - одна строчка и ты admin
4. Algorithm Confusion - публичный ключ как пароль
5. kid injection - SQLi через заголовок токена
6. jku/x5u/jwk/x5c - весь заголовок это attack surface
7. Брутфорс секретов на GPU - 150 млн HS256/сек
8. Psychic Signatures - нулевая подпись на Java 15-18
9. Криптография JWT для хакеров - ECDSA, RSA-PSS, EdDSA и где ломается математика
10. JWE — зашифрованные токены, Bleichenbacher, Invalid Curve, PBES2 DoS
11. JWT-библиотеки — рейтинг дырявости, Top 5 CVE, fingerprinting по токену
12. JWT в OAuth 2.0 и OIDC — token confusion, cross-service relay, ALBeast, DPoP bypass
13. XSS + JWT — кража токенов из localStorage, sessionStorage, cookies
14. Продвинутые криптоатаки — lattice, side-channels, fault injection
17. Hardcoded secrets - CVE-2025-20188 (CVSS 10.0), 17% JWT CVE за 2024-2026, где искать секреты
18. Что вместо JWT - PASETO, Macaroons, opaque tokens, server-side sessions
19. RFC 8725 - чеклист из 15 правил, который никто не читает
20. Постквантовый JWT - ML-DSA подписи по 2.4 KB, SD-JWT, Harvest Now Decrypt Later
Мы уже разбирали атаки на JWT — вам зашло. Но это только верхушка айсберга.
У @rmrf_0 есть серия гайдов, которая закрывает тему: от разбора токена побайтово до постквантовой крипты. Врывайся
1. Почему JWT сломан by design
2. Анатомия токена
3. alg:none - одна строчка и ты admin
4. Algorithm Confusion - публичный ключ как пароль
5. kid injection - SQLi через заголовок токена
6. jku/x5u/jwk/x5c - весь заголовок это attack surface
7. Брутфорс секретов на GPU - 150 млн HS256/сек
8. Psychic Signatures - нулевая подпись на Java 15-18
9. Криптография JWT для хакеров - ECDSA, RSA-PSS, EdDSA и где ломается математика
10. JWE — зашифрованные токены, Bleichenbacher, Invalid Curve, PBES2 DoS
11. JWT-библиотеки — рейтинг дырявости, Top 5 CVE, fingerprinting по токену
12. JWT в OAuth 2.0 и OIDC — token confusion, cross-service relay, ALBeast, DPoP bypass
13. XSS + JWT — кража токенов из localStorage, sessionStorage, cookies
14. Продвинутые криптоатаки — lattice, side-channels, fault injection
17. Hardcoded secrets - CVE-2025-20188 (CVSS 10.0), 17% JWT CVE за 2024-2026, где искать секреты
18. Что вместо JWT - PASETO, Macaroons, opaque tokens, server-side sessions
19. RFC 8725 - чеклист из 15 правил, который никто не читает
20. Постквантовый JWT - ML-DSA подписи по 2.4 KB, SD-JWT, Harvest Now Decrypt Later
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11🤔2😐1
Поиск мисконфигов бакетов AWS S3: пошаговый гайд 🚀
Для тестирования S3-бакетов тебе потребуется активная учетка AWS и установленный клиент AWS CLI.
Чек-лист по мотивам гайда от Intigriti:
1️⃣ List permissions
Если получил листинг без авторизации — это уже повод проверить содержимое и реальный импакт.
2️⃣ Read permissions
3️⃣ Download permissions
4️⃣ Write permissions
5️⃣ Чтение ACL
Для бакета:
Для конкретного объекта:
Иногда сам бакет закрыт, но отдельные объекты доступны публично через ACL.
6️⃣ Ограничения на типы файлов
Если приложение позволяет загружать файлы напрямую в S3, проверь, можно ли загрузить «опасный» тип файла. Классический импакт: stored XSS через загруженный SVG/HTML.
7️⃣ Версионирование S3
Если включена запись и выключен versioning, перезапись или удаление объекта может стать необратимой проблемой:
🔗 Пример ошибки, допущенной при интеграции AWS S3, за которую багхантер получил $20,000
Прежде чем сообщать о потенциальном мисконфиге в настройках безопасности, всегда проверяй импакт. Некоторые бакеты AWS S3 предназначены для публичного доступа.
Для тестирования S3-бакетов тебе потребуется активная учетка AWS и установленный клиент AWS CLI.
Чек-лист по мотивам гайда от Intigriti:
aws s3 ls s3://{BUCKET_NAME} --no-sign-requestЕсли получил листинг без авторизации — это уже повод проверить содержимое и реальный импакт.
aws s3api get-object --bucket {BUCKET_NAME} --key filename ./OUTPUT --no-sign-requestaws s3 cp s3://{BUCKET_NAME}/filename ./ --no-sign-requestaws s3 cp filename s3://{BUCKET_NAME}/filename-{RANDOM} --no-sign-requestДля бакета:
aws s3api get-bucket-acl --bucket {BUCKET_NAME} --no-sign-requestДля конкретного объекта:
aws s3api get-object-acl --bucket {BUCKET_NAME} --key index.html --no-sign-requestИногда сам бакет закрыт, но отдельные объекты доступны публично через ACL.
Если приложение позволяет загружать файлы напрямую в S3, проверь, можно ли загрузить «опасный» тип файла. Классический импакт: stored XSS через загруженный SVG/HTML.
Если включена запись и выключен versioning, перезапись или удаление объекта может стать необратимой проблемой:
aws s3api get-bucket-versioning --bucket {BUCKET_NAME} --no-sign-requestPlease open Telegram to view this post
VIEW IN TELEGRAM
❤8👌1
Auth Bypass через Session Stuffing: что проверить багхантеру 🤔
Session Stuffing — баг, при котором одна функциональность приложения перезаписывает сессионные переменные, уже используемые для авторизованного пользователя.
Импакт может быть уровня P1: входишь под одним аккаунтом, дёргаешь другую фичу — и внезапно оказываешься в чужом профиле.
Как это выглядит⤵️
1️⃣ Логинишься под одним юзером
2️⃣ В этой же сессии открываешь forgot password
Форма просит username, чтобы показать контрольный вопрос или отправить reset flow.
3️⃣ Бэкенд временно пишет это значение в session
4️⃣ Пользователь возвращается в личный кабинет и обновляет страницу
Если приложение проверяет только:
А данные подтягивает по:
то профиль может открыться уже для
Что происходит🤔
Разрабы могут использовать одну и ту же переменную сессии и для страницы восстановления пароля, и для логина, и не сделать принудительный выход из системы при использовании сброса пароля.
Одна страница перезаписывает переменную в уже авторизованной сессии, что приводит к полному обходу аутентификации для любого чужого аккаунта — достаточно только знать username.
Session Stuffing — баг, при котором одна функциональность приложения перезаписывает сессионные переменные, уже используемые для авторизованного пользователя.
Импакт может быть уровня P1: входишь под одним аккаунтом, дёргаешь другую фичу — и внезапно оказываешься в чужом профиле.
Как это выглядит
session.isLoggedIn = true
session.userName = "attacker"
session.userId = 123
Форма просит username, чтобы показать контрольный вопрос или отправить reset flow.
username = "victim"
session.userName = "victim"
Если приложение проверяет только:
session.isLoggedIn == true
А данные подтягивает по:
session.userName
то профиль может открыться уже для
victim. Вот и весь auth bypass.Что происходит
Разрабы могут использовать одну и ту же переменную сессии и для страницы восстановления пароля, и для логина, и не сделать принудительный выход из системы при использовании сброса пароля.
Одна страница перезаписывает переменную в уже авторизованной сессии, что приводит к полному обходу аутентификации для любого чужого аккаунта — достаточно только знать username.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10❤4👍1🤔1