Привет, читатели, надеюсь, у вас все хорошо. Это моя первая статья среднего размера, в которой объясняется, как на самом деле выполнять статический анализ файла (ов) JavaScript с точки зрения Bug Hunters.

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

Что искать?

  • Информация, которая увеличит поверхность атаки (URL-адреса, домены и т. Д.)
  • Конфиденциальная информация (пароли, ключи API, хранилище и т. Д.)
  • Опасный код (eval, опасноSetInnerHTML и т. Д.)
  • Компоненты с известной уязвимостью (устаревшие фреймворки)

Шаг 1 - Сбор файлов JavaScript

Хотя это может показаться очевидным, но это важная часть анализа. Я рассмотрю два способа сделать это.

  1. Веб-сайт с пауком вручную с помощью Burpsuite:

Сначала настройте прокси-сервер burp и начните собирать запросы.

Примечание. Вы можете отключить параметр «перехватывать запросы на основе следующих правил» в разделе Прокси ›Параметры, при этом вам не нужно будет нажимать« отправить »для каждого запроса.

Теперь перейдите в каждый каталог (используйте фаззер каталогов), на каждую страницу и проверьте все. Затем перейдите на вкладку «Прокси» в burpsuite Прокси ›История HTTP и включите параметр « Фильтр по расширению файла ».

Теперь скопируйте все URL-адреса или, если у вас есть burpsuite pro, вы можете использовать опцию «экспорт», перейдите в Target ›карта сайта (щелкните правой кнопкой мыши URL-адрес)› инструменты взаимодействия ›найти скрипты

2. Использование инструмента обратных ссылок.

Установка-

root @ kali $ go получить https://github.com/tomnomnom/waybackurls

Вы можете использовать следующую команду для извлечения файлов.

root @ kali $ waybackurls example.com | grep «\ .js» | uniq | сортировать

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

root @ kali $ cat url_list.txt | parallel -j50 -q curl -w ‘Status:% {http_code} \ t Размер:% {size_download} \ t% {url_effective} \ n’ -o / dev / null -sk

Шаг 2 - Делаем файлы JavaScript доступными для чтения

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

Шаг 3 - Найдите интересную информацию

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

  1. Для поиска конечных точек, то есть полных URL-адресов, относительных путей, вы можете использовать relative-url-extractor от Jobert Abma и LinkFinder от Gerben Javado.
  2. Для извлечения паролей и ключей API DumpsterDiver , Repo-supervisor и truffleHog - одни из замечательных инструментов для поиска по регулярным выражениям и энтропийного поиска, вы также можете использовать grep, awk и sed.
  3. Определить опасный код
  • например, использование innerHTML может предлагать возможный XSS, другой эквивалентный код - опасноSetInnerHTML в среде реагирования.
  • Неправильное использование методов bypassSecurityTrustX в angular может привести к XSS.

Примечание. X в bypassSecurityTrustX может быть Html, Script, Style, URL, ResourseUrl

  • Неправильное использование функции eval.
  • postMessage API может обходить SOP (та же политика происхождения), на стороне отправителя сообщения ищите window.postMessage, а на стороне получателя ищите window.addEventListener

Примечание. Многие фреймворки используют обертки для postMessage.

4. Использование ЛИНТЕР безопасности и статических сканеров безопасности.

  • JSPrime - это инструмент статического анализа для поиска проблем безопасности в коде JavaScript, но проект давно не обновлялся.
  • ESLint - один из самых популярных линтеров JavaScript.

Шаг 4. Определите старую и уязвимую платформу / библиотеку JavaScript

  • Retire.js - это инструмент, который может определять используемые устаревшие JavaScript-фреймворки. Этот инструмент можно использовать как автономный инструмент, расширение браузера, плагин grunt или расширение Burp / ZAP.

Если у вас есть какие-либо вопросы по методологии или какие-либо предложения, не стесняйтесь делиться.

Twitter: twitter.com/Blue_Owl02

LinkedIn: linkedin.com/in/blueowl02