🤑 Эксплуатация IDOR через Path Traversal
Наткнулись на API-эндпойнт, как на первом скрине? Не проходите мимо: вполне вероятно, что перед вами IDOR.
Иногда вместо числового ID разработчики используют ключевые слова вроде me или current. API принимает оба варианта: и
☑️ Что пробуем
1. Подставляем вместо
2. Запрос проходит? Отлично.
3. Теперь вставляем ID другого пользователя.
4. Если эл. почта чужого аккаунта меняется — уязвимость подтверждена.
🧠 Более сложный пример
В больших проектах часто два API-сервера:
• фронтенд — для клиента;
• бэкенд — для внутренней логики.
Проблема в том, что права доступа проверяются только на фронтенде.
🚀 Подключаем Path Traversal
1. Отправляем
2. Фронтенд распознает current как ID пользователя и отправляет запрос на бэкенд.
3. Бэкенд получает путь
4. Проверки нет — можно менять чужие данные.
🎯 Что получаем
Возможность изменить эл. почту другого пользователя или получить доступ к его данным. Это полноценная IDOR-уязвимость, усиленная Path Traversal.
🧩 Вывод
Если API позволяет подставлять ID через
Наткнулись на API-эндпойнт, как на первом скрине? Не проходите мимо: вполне вероятно, что перед вами IDOR.
Иногда вместо числового ID разработчики используют ключевые слова вроде me или current. API принимает оба варианта: и
current, и 1234. Это делает IDOR-уязвимость менее заметной — но не менее опасной.☑️ Что пробуем
1. Подставляем вместо
current свой ID, например 1234.2. Запрос проходит? Отлично.
3. Теперь вставляем ID другого пользователя.
4. Если эл. почта чужого аккаунта меняется — уязвимость подтверждена.
🧠 Более сложный пример
В больших проектах часто два API-сервера:
• фронтенд — для клиента;
• бэкенд — для внутренней логики.
Проблема в том, что права доступа проверяются только на фронтенде.
🚀 Подключаем Path Traversal
1. Отправляем
/users/current/../1234/profile/email.2. Фронтенд распознает current как ID пользователя и отправляет запрос на бэкенд.
3. Бэкенд получает путь
/users/1234.4. Проверки нет — можно менять чужие данные.
🎯 Что получаем
Возможность изменить эл. почту другого пользователя или получить доступ к его данным. Это полноценная IDOR-уязвимость, усиленная Path Traversal.
🧩 Вывод
Если API позволяет подставлять ID через
../, me, current (и т. п.) — это повод проверить на IDOR. Особенно если бэкенд не валидирует входные данные.❤18🔥11🥰4👍2🎉1
🔍 Blind XSS в приложениях, разработанных с помощью JavaScript-фреймворков
Если тестируете SPA-приложения на Angular или Vue, обычные XSS-пейлоады могут «не стрельнуть» — фреймворки используют шаблонизацию и просто экранируют HTML.
👆 Используйте template injection с
Если тестируете SPA-приложения на Angular или Vue, обычные XSS-пейлоады могут «не стрельнуть» — фреймворки используют шаблонизацию и просто экранируют HTML.
👆 Используйте template injection с
constructor.constructor, чтобы исполнить свой код даже в слепых кейсах.👍14🔥9👏3🤔2
This media is not supported in your browser
VIEW IN TELEGRAM
🤔 HTTP request smuggling: подтверждение баги CL.TE через дифференцированные ответы
💡 HTTP request smuggling — атака, направленная на рассинхронизацию фронтенд- и бэкенд-сервера, в результате которой можно внедрить HTTP-запрос мимо фронтенд-сервера. В результате успешной эксплуатации можно сдать критическую багу 🤑
Request smuggling в первую очередь связана с запросами HTTP/1, но некоторые приложения, поддерживающие HTTP/2, также могут быть уязвимы в зависимости от внутренней архитектуры.
При наличии уязвимой конфигурации CL.TE фронтенд-сервер использует заголовок Content-Length, а бэкенд-сервер — Transfer-Encoding:
💡 Как обнаружить баги типа CL.TE
1. Отправляем запрос в Burp Repeater.
• Понижаем версию протокола до HTTP/1.1.
• Отключаем опцию
• Устанавливаем заголовок
• Добавляем заголовок
• Отправляем chunk с некорректным размером.
Если сервер на бэкенде уходит в тайм-аут, это может указывать на потенциально уязвимую конфигурацию CL.TE.
💡 Подтверждаем через дифференцированные ответы
2. Формируем и отправляем вредоносный запрос:
• Заменяем предыдущий chunk на завершающий (terminating) chunk.
• Добавляем контрабандный запрос после тела chunked-запроса.
• Добавляем строку
3. Сразу после вредоносного отправляем обычный запрос в Repeater и понижаем его до HTTP/1.1.
Если в ответ на обычный запрос приходит 404 вместо 200, значит — бэкенд был «отравлен»!
👉 Потренироваться на лабораторной работе PortSwigger
💡 HTTP request smuggling — атака, направленная на рассинхронизацию фронтенд- и бэкенд-сервера, в результате которой можно внедрить HTTP-запрос мимо фронтенд-сервера. В результате успешной эксплуатации можно сдать критическую багу 🤑
Request smuggling в первую очередь связана с запросами HTTP/1, но некоторые приложения, поддерживающие HTTP/2, также могут быть уязвимы в зависимости от внутренней архитектуры.
При наличии уязвимой конфигурации CL.TE фронтенд-сервер использует заголовок Content-Length, а бэкенд-сервер — Transfer-Encoding:
POST / HTTP/1.1
Host: vulnerable-website.com
Content-Length: 13
Transfer-Encoding: chunked
0
SMUGGLED
💡 Как обнаружить баги типа CL.TE
1. Отправляем запрос в Burp Repeater.
• Понижаем версию протокола до HTTP/1.1.
• Отключаем опцию
Update Content-Length.• Устанавливаем заголовок
Content-Length в значение 6.• Добавляем заголовок
Transfer-Encoding: chunked.• Отправляем chunk с некорректным размером.
Если сервер на бэкенде уходит в тайм-аут, это может указывать на потенциально уязвимую конфигурацию CL.TE.
💡 Подтверждаем через дифференцированные ответы
2. Формируем и отправляем вредоносный запрос:
• Заменяем предыдущий chunk на завершающий (terminating) chunk.
• Добавляем контрабандный запрос после тела chunked-запроса.
• Добавляем строку
X-ignore: X (без перевода строки в конце) и отправляем.3. Сразу после вредоносного отправляем обычный запрос в Repeater и понижаем его до HTTP/1.1.
Если в ответ на обычный запрос приходит 404 вместо 200, значит — бэкенд был «отравлен»!
👉 Потренироваться на лабораторной работе PortSwigger
🔥16👍8❤6
🔍 Пять простых способов найти баги в веб-приложении с GraphQL
Нашел хост GraphQL? Это тот самый строго типизированный язык запросов, который разработчики используют для простого извлечения данных.
💡 Мини-чек-лист для багхантера:
☑️ Запускаем introspection-запрос — получаем карту всех типов, запросов и мутаций.
☑️ Визуализируем структуру через GraphQL Voyager — это упростит анализ.
☑️ Используем BatchQL или расширение InQL — ищем IDOR, SQL-инъекции, SSRF и др.
☑️ Проверяем на CSRF, особенно если авторизация на основе cookie.
☑️ Тестим обход rate limit и DoS через батч-запросы.
🚀 Разберем подробнее
1️⃣ Introspection-запрос
Если включен — bingo. Получаем всю схему: типы, запросы, мутации. Собранную структуру удобно анализировать через GraphQL Voyager: он отлично фильтрует мутации и показывает архитектуру API.
2️⃣ Introspection отключен?
Не беда. GraphQL-серверы вроде Apollo часто поддерживают автодополнение: они подсказывают поля даже без схемы.
Вручную перебирать — боль, поэтому подключаем Clairvoyance: он восстанавливает схему даже без introspection.
3️⃣ CSRF
GraphQL сам по себе не защищен от CSRF. Если сессии на cookie, а не через Authorization-заголовок, — риск высокий. Пример: можно подделать запрос от пользователя без его ведома.
4️⃣ Обход лимитов
Многие лимиты считают HTTP-запросы, а не количество вложенных GraphQL-запросов.
GraphQL позволяет использовать алиасы: шлем кучу запросов в одном теле, сервер в шоке, лимит не триггерится.
5️⃣ DoS через батч-запросы
Если сервер не ограничивает число обработанных запросов в одной пачке — мы просто заваливаем его ресурсоемкими мутациями. Это может легко положить сервис.
💡 Автоматизация:
• BatchQL — проверка батчей, мутаций, SSRF, SQLi, IDOR и прочего.
• GraphQL Cop — делает 10+ тестов безопасности, включая CSRF.
• InQL — расширение для Burp Suite, идеально интегрируется и помогает в перехвате GraphQL-запросов.
P. S. При подготовке поста вдохновлялись статьей багбаунти-площадки Intigriti.
Нашел хост GraphQL? Это тот самый строго типизированный язык запросов, который разработчики используют для простого извлечения данных.
💡 Мини-чек-лист для багхантера:
☑️ Запускаем introspection-запрос — получаем карту всех типов, запросов и мутаций.
☑️ Визуализируем структуру через GraphQL Voyager — это упростит анализ.
☑️ Используем BatchQL или расширение InQL — ищем IDOR, SQL-инъекции, SSRF и др.
☑️ Проверяем на CSRF, особенно если авторизация на основе cookie.
☑️ Тестим обход rate limit и DoS через батч-запросы.
🚀 Разберем подробнее
1️⃣ Introspection-запрос
Если включен — bingo. Получаем всю схему: типы, запросы, мутации. Собранную структуру удобно анализировать через GraphQL Voyager: он отлично фильтрует мутации и показывает архитектуру API.
2️⃣ Introspection отключен?
Не беда. GraphQL-серверы вроде Apollo часто поддерживают автодополнение: они подсказывают поля даже без схемы.
Вручную перебирать — боль, поэтому подключаем Clairvoyance: он восстанавливает схему даже без introspection.
3️⃣ CSRF
GraphQL сам по себе не защищен от CSRF. Если сессии на cookie, а не через Authorization-заголовок, — риск высокий. Пример: можно подделать запрос от пользователя без его ведома.
4️⃣ Обход лимитов
Многие лимиты считают HTTP-запросы, а не количество вложенных GraphQL-запросов.
GraphQL позволяет использовать алиасы: шлем кучу запросов в одном теле, сервер в шоке, лимит не триггерится.
5️⃣ DoS через батч-запросы
Если сервер не ограничивает число обработанных запросов в одной пачке — мы просто заваливаем его ресурсоемкими мутациями. Это может легко положить сервис.
💡 Автоматизация:
• BatchQL — проверка батчей, мутаций, SSRF, SQLi, IDOR и прочего.
• GraphQL Cop — делает 10+ тестов безопасности, включая CSRF.
• InQL — расширение для Burp Suite, идеально интегрируется и помогает в перехвате GraphQL-запросов.
P. S. При подготовке поста вдохновлялись статьей багбаунти-площадки Intigriti.
👍12❤9👏6👎1
🎯 От XSS к SSRF: эксплуатируем Edge Side Includes
Когда кэширующие серверы и балансировщики нагрузки стали неотъемлемой частью современной инфраструктуры, производители внедрили технологию Edge Side Includes (ESI) — способ управления динамическим контентом на уровне кэша. Эта устаревшая, но до сих пор используемая технология может быть опасна и открывает новую поверхность атак.
Язык ESI состоит из набора XML-инструкций, которые возвращает сервер приложений. Они обрабатываются на Edge-серверах (балансировщиках, прокси-серверах). Поскольку Edge-серверы доверяют тому, что приходит с апстрима, они не различают легитимные и вредоносные ESI-инструкции.
👉 Через ESI можно:
🚀 Выполнить SSRF.
🚀 Получить доступ к куки без использования JavaScript даже с флагом HttpOnly.
Уязвимые при определенных условиях решения: Akamai, Fastly, F5, Squid, Varnish, WebLogic, WebSphere, а также любые кастомные решения на Node.js, Ruby и других языках, которые используют обработку ESI без строгой фильтрации и контроля источников.
«Где пруфы?» — спросите вы. В докладе Louis Dion-Marcil на DEF CON 26! Еще в 2018 году он выступил с темой Edge Side Include Injection: Abusing Caching Servers into SSRF and Transparent Session Hijacking. Этот пост вдохновлен его докладом 🔥
Когда кэширующие серверы и балансировщики нагрузки стали неотъемлемой частью современной инфраструктуры, производители внедрили технологию Edge Side Includes (ESI) — способ управления динамическим контентом на уровне кэша. Эта устаревшая, но до сих пор используемая технология может быть опасна и открывает новую поверхность атак.
Язык ESI состоит из набора XML-инструкций, которые возвращает сервер приложений. Они обрабатываются на Edge-серверах (балансировщиках, прокси-серверах). Поскольку Edge-серверы доверяют тому, что приходит с апстрима, они не различают легитимные и вредоносные ESI-инструкции.
👉 Через ESI можно:
🚀 Выполнить SSRF.
🚀 Получить доступ к куки без использования JavaScript даже с флагом HttpOnly.
Уязвимые при определенных условиях решения: Akamai, Fastly, F5, Squid, Varnish, WebLogic, WebSphere, а также любые кастомные решения на Node.js, Ruby и других языках, которые используют обработку ESI без строгой фильтрации и контроля источников.
«Где пруфы?» — спросите вы. В докладе Louis Dion-Marcil на DEF CON 26! Еще в 2018 году он выступил с темой Edge Side Include Injection: Abusing Caching Servers into SSRF and Transparent Session Hijacking. Этот пост вдохновлен его докладом 🔥
🔥9👍7❤5🤔2
Мы открыли комментарии!
Спасибо, что читаете нас и ставите реакции — ваша поддержка реально драйвит продолжать. Мы делаем контент прежде всего для middle+ специалистов, тщательно отбирая темы, которые считаем полезными и редкими для российского сегмента багбаунти.
Делитесь в комментариях темами, которые вам интересны — будем стараться брать их во внимание при подготовке следующих постов.
Команда Standoff Bug Bounty ❤️
Спасибо, что читаете нас и ставите реакции — ваша поддержка реально драйвит продолжать. Мы делаем контент прежде всего для middle+ специалистов, тщательно отбирая темы, которые считаем полезными и редкими для российского сегмента багбаунти.
Делитесь в комментариях темами, которые вам интересны — будем стараться брать их во внимание при подготовке следующих постов.
Команда Standoff Bug Bounty ❤️
🔥25👍8❤6
🔄 Реверс приложений на Flutter
Наткнулись на мобильное приложение под управлением Flutter и не понимаете, как перехватить сетевые запросы? ReFlutter — тот самый инструмент для хантеров за мобильными багами 📱
ReFlutter заменяет оригинальный движок Flutter в APK на модифицированный, что позволяет в реальном времени перехватывать сетевой трафик на нативном уровне. Достаточно просто настроить BurpSuite.
После патча APK его нужно заново подписать. Быстрее всего — через uber-apk-signer:
Уровень сложности: 🪲🪲🪲🪲
Наткнулись на мобильное приложение под управлением Flutter и не понимаете, как перехватить сетевые запросы? ReFlutter — тот самый инструмент для хантеров за мобильными багами 📱
ReFlutter заменяет оригинальный движок Flutter в APK на модифицированный, что позволяет в реальном времени перехватывать сетевой трафик на нативном уровне. Достаточно просто настроить BurpSuite.
После патча APK его нужно заново подписать. Быстрее всего — через uber-apk-signer:
java -jar uber-apk-signer.jar --allowResign -a release.RE.apk
Уровень сложности: 🪲🪲🪲🪲
👍10🔥5👏4
🛠️ Фаззинг HTTP-заголовков на практике
Проверка кастомных HTTP-заголовков в запросах и ответах — первый шаг при сканировании вашей цели. Они часто раскрывают конфиденциальную информацию, которую можно использовать для дальнейшей разведки.
Но любой фаззинг, включая HTTP-заголовков, может фолзить — особенно если CDN или бэкенд реагируют на заголовки только в определенных комбинациях.
Пример простого запроса с заголовком
Ответ:
Но если изменить
Сервер вернет:
Если и это не сработает, попробуйте другие варианты из документации nginx.
Подобное поведение — повод начать глубже исследовать причину ошибки и искать соответствующие баги.
Уровень сложности: 🪲🪲🪲
Проверка кастомных HTTP-заголовков в запросах и ответах — первый шаг при сканировании вашей цели. Они часто раскрывают конфиденциальную информацию, которую можно использовать для дальнейшей разведки.
Но любой фаззинг, включая HTTP-заголовков, может фолзить — особенно если CDN или бэкенд реагируют на заголовки только в определенных комбинациях.
Пример простого запроса с заголовком
Forwarded (подробнее — в RFC 7239):GET / HTTP/1.1
Host: redacted.com
Forwarded: example.com
Ответ:
HTTP/1.1 200 OK
Content-type: text/html; charset=utf-8
Content-Length: 8426
Но если изменить
Forwarded так:Forwarded: for=example.com;host=example.com;proto=https
Сервер вернет:
HTTP/1.1 500 Internal Server Error
Content-Length: 764
Если и это не сработает, попробуйте другие варианты из документации nginx.
Подобное поведение — повод начать глубже исследовать причину ошибки и искать соответствующие баги.
Уровень сложности: 🪲🪲🪲
👍9🔥4❤2
😎 Простой способ обхода CSRF для проверки того, отправляет ли исследуемое приложение данные в JSON-формате без anti-CSRF-токена
Измените тип контента с
В случае успеха вы можете легко создать простую полезную нагрузку (payload) и заставить браузер повторить тот же запрос с помощью HTML-формы ☝️
Уровень сложности: 🪲🪲
Измените тип контента с
application/json на text/plain и посмотрите, по-прежнему ли сервер принимает запрос.В случае успеха вы можете легко создать простую полезную нагрузку (payload) и заставить браузер повторить тот же запрос с помощью HTML-формы ☝️
Уровень сложности: 🪲🪲
❤18🔥10👌3