Я занимался поиском уязвимостей на основном ресурсе и случайно ткнул на один из его субдоменов. Быстро осмотревшись, я решил переключиться на него.
Первоначальная разведка
Я начал с просмотра исходного кода страницы и одновременно запустил инструмент Katana для извлечения JavaScript файлов.
katana -u sub.target.com -d 5
Затем я решил воспользоваться инструментом WaybackURLs, чтобы найти что-нибудь интересное о данном субдомене.
Инструменты и расширения
Изучив исходный код, я обнаружил множество JavaScript файлов, среди которых выделялся один под названием main.0b3342223.js.
Недавно мой друг рассказал мне о расширении FindSomething, и я полностью согласен, что это действительно потрясающая вещь. Но я большой поклонник терминала, и существует Python-инструмент под названием Javascript Security Analysis (JSA).
Вот самая базовая команда JSA:
python3 jsa https://sub.target.com/javascript.js
Обнаружение конечных точек
С помощью JSA, я получил множество конечных точек из JavaScript файла.
echo "https://sub.target.com/main.0b379723.js" | python3 jsa
В моём терминале появилось большое количество URL-адресов конечных точек, и я начал просматривать их вручную. Многие из них возвращали коды ошибок 401 и 403 («Forbidden» и «Unauthorized»), поэтому я решил использовать утилиту httpx для получения статус-кодов всех конечных точек, полученных через JSA:
echo "https://sub.target.com/main.0b379723.js" | python3 jsa | httpx -sc
Практически сразу у меня были все конечные точки вместе с их статус-кодами, и оказалось, что всего одна из них имеет статус-код 400. Назовём её /abc.
Эта конечная точка выглядела как каталог, поэтому я решил проверить наличие стандартных файлов вроде index.html, index.js, main.js, app.js и так далее. Затем я запустил diresearch для дальнейшего перечисления директорий и файлов:
dirsearch -u https://sub.target.com/endpoint -f -F -x 403,404 -t 3
Однако, к сожалению, ни одной папки или файла обнаружено не было.
Я продолжал анализировать вывод инструментов в других терминалах и приступил к изучению данных с WaybackURLs. За исключением пары каталогов, ничего особо интересного там не обнаружилось.
Среди этих каталогов был один интересный, назовём его /xyz. Ранее я сталкивался с таким же каталогом, и он привёл меня к критической уязвимости. Вы можете прочитать об этом здесь.
Сам по себе каталог не раскрывал никакой важной информации.
Итак, я решил объединить каталог xyz с каталогом abc и создать новый путь, который мог бы выглядеть следующим образом:
- /abcxyz
- /abc-xyz
- /xyzabc
- /xyz-abc
Я снова провёл перебор по всем новым путям и обнаружил файл index.html в каталоге xyz-abc, который оказался статичной страницей с заголовком «Test». Я продолжил перебор, используя словарь seclists raft-large-files.txt, чтобы найти интересные файлы в этом каталоге.
ffuf -u https://sub.target.com/xyz-ab/FUZZ -w /usr/share/seclist/Web-Content/raft-large-files.txt -mc 401,200,403 -r
Результат — несколько файлов, включая Admin.js со статус-кодом 401.
Доступ к Admin.js
Существует несколько способов обхода 401, однако я предпочел самый простой метод — опять с помощью ffuf:
ffuf -u https://sub.target.com/xyz-abc/FUZZ/Admin.js -w /usr/share/seclists/Web-Content/raft-large-directories.txt -mc 200 -t 3
Спустя примерно 15 минут сканирования был обнаружен успешный результат с кодом ответа 200, в каталоге /static/js/.
Внутри файла admin.js я нашел JWT токен администратора, прочие токены и чувствительные данные.
Отчёт
Баг был отмечен как дубликат.

Благодарю за чтение!
Еще больше познавательного контента в Telegram-канале — Life-Hack - Хакер