Не удалось прогрузить медиа
Эйо! С вами YmbMember. Это 3-ая часть анализа .js файлов, которая является заключительной. В этой части мы с вами сделаем упор на работе с sourcemaps сайта. Научимся правильно анализировать .js код и рассмотрим один свежайший инструмент какой вам поможет в этом.
Что же такое это ваше SourceMaps?
Как всем известно, уже давно все современные веб сайты используют javascript фреймворки (react, next js …) . Но чтобы поднять сайт на таких фреймворках, сперва надо скомпилировать исходный код. Во время этого процесса, код оптимизируется, модифицируется и слегка обфусцирует. Это нужно для того чтобы оптимизировать работу сайта и спрятать исходный код фронт енда от всяких жуликов по типу участников форума LIMB
Но часто исходный код фронт енда не прячут. В основном его оставляют открытым для других разработчиков, чтобы они могли четко видеть, где в исходном коде произошла ошибка а не в модифицированном файле. Но часто кодеры оставляют сурсы не специально для удобства других разработчиков, а случайно. Либо забывают, либо ложат свой болт на то чтобы выключить SourceMaps, думая что это ни к чему плохому не приведет. Доступен же исходный код фронт енда, не бэк енда. Так что же может пойти не так??
Не удалось прогрузить медиа
Фактически они правы, но только на половину. Немного позже вы поймете почему
Как понять что на сайте используется source map?
Если мы говорим о массовом сканировании таргетов на наличие сурс меп, используем этот инструмент - https://github.com/marcotuliocnd/jsmapfinder
Не удалось прогрузить медиа
Но его эффективность лишь частичная. Бывает, что исходный код доступен только на каком-то определенном функционале. Поэтому, желательно, смотреть все через DevTools (вкладка sources)
Не удалось прогрузить медиа
Если папки красного цвета - sourcemaps доступен
если папки синего цвета - sourcemaps не доступен
Теперь мы просто открываем все .js файлы и ищем наличие небезопасных функций/эндпоинтов/секретов. Если не хотите это делать вручную, можно просто скормить это все дело какой-то LLM модели. В 2025 году они справляются с этим на ура
К слову, совсем недавно apple проебались с сурс мапом, и выложили новый исходный код фронтенда нового интерфейса AppStore
Не удалось прогрузить медиа
(https://t.me/poxek/5671)
Почему для хакеров это хорошо? Новый функционал = золотая жила для баг хантеров. Новый функционал слили, поэтому те кто изучат сурс код автоматически будут подготовлены и заранее разработают свою методологию. У них уже будет свой план как действовать, по каким эндпоинтам пройтись. Вот такой сюрприз
А на старых сайтах что?
Если вы тестируете какой-то старый сайт, скорее всего js код не будет написан на каком-то фреймворке, он будет написан на чистом vanilla js. Так же раньше люди не пользовались всякими веб паками. Поэтому даже без сурс мапс исходный код фронта будет у вас на ладони
Почему Source Maps ≠ 100% исходного кода ?
Есть разные варианты того, как вебпак отображает или прячет исходный код в итоговых собранных файлах
Не удалось прогрузить медиа
Для нас полезны следующие методы сборки:
source-map (идеально, код фронт енда на ладони)
eval-source-map (почти то же самое, для нас особой разницы нету)
cheap-module-source-map (иногда нету комментариев, но логику понять можно)
eval-cheap-module-source-map (частично виден код, часто нету комментариев, иногда название переменных не оригинальное)
eval-cheap-source-map (частично виден код, часто нету комментариев, иногда название переменных не оригинальное)
Но найти что то даже с такими ограничениями вполне возможноНо перечисленные методы сборки выше - только для вебпак. Есть и другие сборщики, хотя вебпак самый популярный. На них останавливаться не будем, это совсем другая тема
Как понять тип сборки?
Через search ищем путь к .js.map
Не удалось прогрузить медиа
Открываем в браузере и анализируем. Проанализировать посмотрев на одну строку у вас не получится. Для того чтобы определять на глаз метод сборки, нужен опыт. Если хотите уметь это делать в ручную очень советую посмотреть это видео
Не удалось прогрузить медиа
Если же вам лень это делать, на помощь приходят LLM модели. Вот промт:
Code:
Я загружаю файл .js.map. Проанализируй его и определи, каким сборщиком (Webpack, Vite, Rollup, esbuild, SWC, Parcel или другим) он был создан.
Если это Webpack — укажи точный метод devtool из списка:
eval
eval-cheap-source-map
eval-cheap-module-source-map
eval-source-map
source-map
hidden-source-map
nosources-source-map
none (devtool: false)
Если это не Webpack — скажи, какой тип source map соответствует данному сборщику (например inline, external, hidden, nosources).
Объясни логику распознавания по структуре карты: наличие sourcesContent, форматы путей (webpack://), inline или external, есть ли ссылки на карту в бандле и т.д.
Не удалось прогрузить медиа
Начинаем хантить
Недавно под руки мне попался отличный инструмент - https://github.com/ynsmroztas/JSMap-Inspector
Про него ещё никто не писал потому что инструменту меньше месяца. Поэтому, считайте, что это небольшой эксклюзив
Не удалось прогрузить медиа
Это очень хороший инструмент с простейшим интерфейсом. Важно понимать, что Source map создаётся не для одного файла, а для бандла. Т.е в 90% случаев мы можем из одного такого .js.map файла получить весь фронтенд код. Но главное преимущество этого инструмента не в удобном интерфейсе, а в поиске интересной информации через regex скрипты. Есть дефолтные, но можно и скормить ему кастомные
Вот например на сайте школьного дневника какой у меня был как я учился в школе я нашел исходный код санитайзера
Не удалось прогрузить медиа
Конечно bootstrap санитайзер не всегда используется как основной, но у них он включен в работу. Ух сука, если б я не был в их системе ща напакостил бы. Но я не буду, а то там в базе данных остался номер моей мамы. Вдруг позвонят и я на месяц без провода от ПК останусь :(
А вот на сайте какой я недавно тестил я нашёл я нашёл какие-то тестовые email адреса
Не удалось прогрузить медиа
Сомневаюсь, что их должны были получить третьи лица вроде меня
А вот таким regex скриптом мы можем с вами найти функции какие обрабатывают пользовательский ввод не безопасно
Code:
\b(innerHTML|outerHTML|insertAdjacentHTML|document\.(write|writeln)|eval|setTimeout|setInterval|srcdoc|innerText|outerText|textContent|location\.(href|assign|replace)|history\.(pushState|replaceState)|on[a-z]+\s*=|setAttribute\s*\(\s*["']on[a-z]+["']|location\.(hash|search)|document\.cookie|window\.name|(localStorage|sessionStorage)\.getItem|req\.(body|query|params)|params\[)\b
Не удалось прогрузить медиа
И это нам даст xss’ку
Не удалось прогрузить медиа
Другие находки
Мне очень понравился короткий доклад от Егора Боровинских про сурс мапс (
Не удалось прогрузить медиа
Апи эндпоинты были в сурсах
Не удалось прогрузить медиа
Практического импакта это в себе не несёт, но это спасает время баг хантера длительных поисков эндпоинтов. Еще и все прокомментировано, не надо гадать что за что отвечает
Не удалось прогрузить медиа
Не удалось прогрузить медиа
Слитые секреты. В инструменте о каком я писал выше есть уже готовые regex скрипты под это. Так что найти что-то подобное на таргете не составит труда
Не удалось прогрузить медиа
Так же интересные комментарии от разработчиков :D . А если говорить серьёзно - всегда читайте комментарии. Разработчики могут там писать что-то крайне интересное, что поможет в дальнейших исследованиях
Заключение
В этой статье мы рассмотрели что из себя представляют source maps и что исходный код фронт енда может дать хакеру
Также мы познакомились с новым инструментом JSMap-Inspector, какой вам станет помощником N1 в поиске новых багов.
И помните, что каждая строка кода, скрытая в тени source map-ов, может стать либо вашим щитом, либо дверью для хакера — всё зависит от того, кто первый заглянет внутрь. Удачи!
👍49
🔥7
😁9
😮11
💯9
LIMB