Это продолжение https://medium.com/@bitthebyte/javascript-for-bug-bounty-hunters-part-1-dd08ed34b5a8

Глава 4: Атака на React.js

Глава 4–3: Разделение пакетов

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

Глава 4–4: Обнаружение и объединение разделенных пакетов

Во-первых, нам нужно обнаружить код начальной загрузки. это можно легко сделать, используя поисковые инструменты Chrome DevTools «Три точки› Дополнительные инструменты ›Поиск» и поиск по запросу «Загрузка фрагмента».

Не беспокойтесь, если файл не называется main- [hash] .js или имеет другое имя, отличное от имени на снимке экрана. код начальной загрузки обычно такой же, в следующем примере показан код начальной загрузки реального производственного уровня.

Используя консоль инструментов разработчика Chrome, нам нужно отредактировать функцию начальной загрузки, чтобы она возвращала полный URL-адрес размещенного файла. Обратите внимание, что я также добавил расширение .map к URL-адресу файла.

К сожалению, мы не можем использовать здесь встроенный декодер исходной карты, вместо этого мы будем использовать замечательный инструмент под названием unwebpack-sourcemap.



python3 unwebpack_sourcemap.py --make-directory https://example.com/assets/UserNameComplete-d6c0c7fc8bc309d9b022.js.map output

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

Не рекомендуемый обходной путь, если вы хотите использовать декодер карт браузера, - это вставка файлов javascript на исходную страницу с включенным BitMapper.

Глава 4–5: Некоторые мысли

Как вы видели, в файлах карт может содержаться много информации, и это точно такой же исходный код, что и исходный код разработчика. В зависимости от ситуации это можно рассматривать как раскрытие исходного кода (CWE-200). Не просто сообщайте о файлах карт, поскольку раскрытие исходного кода понимает вашу цель и понимает, как это повлияет на нее, прежде чем сообщать об этом.

Глава 5: 3 Реальные приложения (1)

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

Глава 5-1: Чувствительные ключи API, найденные в комментариях

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

Глава 5-2: XSS на основе DOM

Это еще не исправлено, поэтому я не буду предоставлять скриншоты или фрагменты кода. Секретный параметр с именем emredirect был обнаружен в исходном коде и не прошел проверку на вводе пользователя, что позволяет злоумышленнику выполнять XSS на основе DOM.

Глава 5-3: Доступ к панели администратора

Эта проблема не влияет на код javascript сайта напрямую, однако доступ к файлам javascript в этом сильно помог. Полный пользовательский интерфейс панели администратора был доступен, но защищен простым перенаправлением, если пользователь не вошел в систему. Просто добавив точку останова в условии перенаправления и изменив ее на другую ветку, я смог получить доступ к пользовательскому интерфейсу, обнаружив, что у него нет никакой серверной защиты, позволяющей любому получить доступ к внутреннему журналу с некоторыми другими сочными вещами :)

Я оставлю это на ваше усмотрение, чтобы узнать об этом трюке и узнать больше.

Глава 6: Понимание Meteor.JS

Meteor - это платформа с открытым исходным кодом для Интернета, мобильных устройств и настольных компьютеров, которую используют более полумиллиона разработчиков по всему миру, чтобы сделать доставку приложений javascript простой, эффективной и масштабируемой. Лично мне нравятся приложения Meteor. Это мощный фреймворк, но, к счастью для нас, большинство разработчиков не знают, как его должным образом защитить.

Предпосылки:

  • Внедрение NoSQL
  • Коммуникация на основе сокетов

То же, что и ReactJS, приложения Meteor будут объединены и минифицированы, однако по умолчанию у них может не быть файла карты, однако он нам не нужен.

Я не буду вдаваться в подробности, так как он очень похож на React.JS

Глава 7: Атака Meteor.JS

В приложениях на основе Meteor.js вам просто нужна хромированная консоль и поиск. Просто знайте, что нас интересует функция everyMeteor.call(), поскольку она вызывает реальные функции на сервере с использованием сокетов.

Поверхность атаки настолько велика, что я оставлю это для следующей статьи, а также для того, чтобы дать людям время узнать о предпосылках.
Следующая запись (и): SSRF и обход неавторизации и NoSQLI на Meteor.JS заявка