Это продолжение 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 заявка