23 апреля, 2024

Руководство для новичков по OWASP Juice Shop. Практика взлома 10 наиболее распространенных уязвимостей веб-приложений

Содержание:

Уязвимости веб-приложений являются одним из наиболее важных моментов при анализе и оценке степени безопасности при пентестинге. Некоторые области пентестинга требуют наличия домашней сети или компьютера для проведения тестирования, но создание тестового веб-сайта для изучения безопасности веб-приложений требует немного другого подхода. Для изучения проблем взлома веб-приложений и для создания безопасного тестового окружения очень хорошо подходит инструмент, который называется OWASP Juice Shop.

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

OWASP Juice Shop — это веб-приложение с уязвимостями, созданное для целей обучения безопасности, написанное на JavaScript. Оно буквально набито проблемами разных уровней сложности, предназначенными для их эксплуатации пользователем. Это фантастическая вещь, с которой однозначно нужно начинать изучение безопасности веб-приложений.

Короткая справка по OWASP Top 10

Проект OWASP Top 10 является документом проекта Open Web Application Security. Он предназначен для перечисления и архивирования наиболее распространенных недостатков, присутствующих в веб-приложениях. Начиная с версии 2017 этот список выглядит следующим образом:

  • инъекции
  • нарушение аутентификации
  • раскрытие чувствительных данных
  • внешние объекты XML (XXE)
  • нарушение контроля доступа
  • неправильная настройка безопасности
  • межсайтовый скриптинг (XSS)
  • небезопасная десериализация
  • использование компонентов с известными уязвимостями
  • недостаточное логирование и мониторинг

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

Для отработки этих атак первым делом нужно начать с установки OWASP Juice Shop, который включает в себя уязвимости из всех 10 Top-категорий OWASP.

Шаг 1. Установите Docker

Согласно веб-сайту проекта, Docker предоставляет «способ запуска приложений в надежно изолированном контейнере вместе со всеми их зависимостями и библиотеками». Это означает, что такой инструмент, как OWASP Juice Shop и весь его искусственный серверный стек можно легко упаковать и распространять.

И хотя у OWASP Juice Shop есть несколько вариантов установки, включая Node.js и Vagrant, мы решили, что для Linux и macOS самым простым вариантом является использование Docker-контейнера.

Если у вас возникли проблемы с установкой Docker или ваша операционная система не поддерживает Docker, то для вас может быть лучше подойдет как раз использование Node.js, что также довольно удобный вариант. Инструкции по установке для других платформ имеются в документации по Juice Shop.

Читать также:  Как открыть зашифрованные ZIP-файлы без пароля

Docker поддерживает Windows, MacOS и Linux. На странице установки имеются установочные пакеты для всех платформ. Инструкции по установке различаются по платформе, но для этого примера мы пройдем установку Docker в систему на базе Debian, такую как Ubuntu или Kali.

Чтобы начать установку Docker’а сначала установите пакеты его зависимостей, чтобы apt-get смог использовать репозиторий через HTTPS. Выполните приведенную ниже команду в терминале.

sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common

Затем добавьте ключ GPG Docker’а, который позволит проверить целостность пакетов.

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

Теперь вы можете добавить репозиторий Docker в вашу систему. Если следующая команда не сработала, то можно отредактировать файл /etc/apt/sources.list вручную. Этот файл является списком репозиториев в системах, в которых используется диспетчер пакетов APT. Просто добавьте в этот список команду ниже, заключенную в кавычки, заменив «$(lsb_release -cs)» на вывод команды lsb_release -cs (если выполнить ее в терминале). В противном случае достаточно просто выполнить эту команду, чтобы обновить список репозиториев.

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"

После того, как вы добавите этот репозиторий, вы сможете установить Docker. Сначала обновите ваши репозитории, а затем используйте команду apt-get install для установки Docker. Выглядит это следующим образом:

sudo apt-get update && sudo apt-get install docker-ce

Если вы используете систему на базе Systemd, то вы можете запустить службу Docker с помощью следующей команды:

sudo systemctl start docker

Шаг 2. Установите OWASP Juice Shop

Как только Docker будет установлен и запущен, первое, что мы должны сделать — локальную копию файлов OWASP Juice Shop. Для этого запустите команду:

docker pull bkimminich/juice-shop

Затем мы можем запустить Juice Shop, выполнив приведенную ниже команду, привязав этот сервис к порту 3000.

docker run --rm -p 3000:3000 bkimminich/juice-shop

Когда командная строка Docker’а выведет «server listening on port 3000», это будет означать, что эта служба готова к использованию.

root@navi ~# systemctl start docker
root@navi ~# docker pull bkimminich/juice-shop
Using default tag: latest
latest: Pulling from bkimminich/juice-shop
Digest: sha256: 056aa33f600adb143a1128e2ae42f4021f15d726347155ae4bdd37fba4e0c486
Status: Image is up to date for bkimminich/juice-shop:latest
root@navi ~# docker run --rm -p 3000:3000 bkimminich/juice-shop

> [email protected] start /juice-shop
> node app

Server listening on port 3000

После этого Juice Shop можно открыть в веб-браузере, как и любой другой сайт. В Linux этот Juice Shop находится по адресу http://localhost:3000. В MacOS и Windows он может быть расположен по адресу http://192.168.99.100:3000.

Если страница открывается в вашем веб-браузере и отображается правильно, то это значит, что Juice Shop готов к взлому!

Шаг 3. Анализ HTML-кода Juice Shop

Одним из самых простых способов начать анализ веб-приложения является просмотр HTML-кода конкретной страницы. Для этого используйте функцию «Просмотреть исходный код страницы» вашего веб-браузера. Обычно она доступна в разделе «Инструменты разработчика» или в аналогичном меню.

HTML, что означает HyperText Markup Language, не является языком программирования в традиционном смысле, но это язык разметки, как говорит нам об этом его акроним. В отличие от языка программирования, который определяет поведение через выполнение последовательных инструкций, простой HTML-код в основном используется для инкапсуляции элементов веб-страницы и размещения этих элементов на веб-странице. И хотя HTML5 расширил эти ограниченные функции HTML и добавил в него некоторые возможности, традиционно обрабатываемые с помощью JavaScript и PHP, но все-таки HTML по-прежнему очень широко используется для компоновки элементов веб-страниц.

Читать также:  Пошаговое руководство по установке дистрибутива Arch Linux

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

Ниже приведен один пример такого рода. Здесь сам HTML-код не предоставляет нам никаких возможностей для атаки, но вот список JavaScript-файлов, на которые ссылается страница в тегах «script», говорит нам о том, что «под капотом» сайта используется некоторая функциональность, дающая возможность для атаки.

Далее в коде можно заметить ссылки на другие страницы. Некоторые из них показаны в главном меню страницы, но другие, такие как страница «score-board» — нет.

Обнаружение такой ссылки может помочь дальнейшему пониманию структуры веб-сайта, а также поможет обнаружить данные, которые должны были быть закрытыми.

Шаг 4. Используйте бальную систему оценки (Score Board System)

Если вы перейдете по ссылке, которую обнаружили на предыдущем шаге, то попадете на страницу Juice Shop, посвященную системе оценки. Это не просто статический элемент веб-сайта, эта статистика будет обновляться по мере решения вами различных задач. И в самом деле, как только вы откроете эту страницу — первая проблема будет решена.

Страница уведомит о том, что вам удалось решить проблему, также вы можете заметить, что это уведомление транслируется в логе командной строки Juice Shop.

> [email protected] start /juice-shop
> node app

Server listening on port 3000
Solved challenge Score Board (Find the carefully hidden 'Score Board' page.)

Как только у вас появляется доступ к этой статистике, вы можете увидеть и другие цели для каждого раздела. В правой колонке можно навести курсор мыши на индикатор состояния «unsolved» и получить всплывающую подсказку или кликнуть на значок, который выдаст информацию по следующим проблемам.

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

Шаг 5. Используйте JavaScript-консоль для анализа сайта

Еще один способ понять структуру и функции сайта — использовать консоль разработчика вашего веб-браузера, чтобы увидеть, какие скрипты запускаются. Отладчик также может уведомлять вас о потенциальных ошибках, которые могут оказаться уязвимостями в системе безопасности веб-приложения. Как и в случае, продемонстрированном ниже, JavaScript иногда может привести нас к обнаружению элементов, которые по идее должны быть скрытыми, например ссылка на «Administration.html» в JavaScript-файле «juice-shop.min.js».

Читать также:  Лучшие приложения для родительского контроля на iPhone и Android

Если решите перейти по этой ссылке на страницу «Администрирования», то вы таким образом уже решили следующую задачу!

Обращайте внимание на тот JavaScript, который используется в Мjuice Shop. Это будет очень полезным по мере роста сложности проблем, поэтому даже можно не закрывать консоль веб-браузера.

Шаг 6. Провоцируйте появление ошибок на сайте

Одна из целей на странице статистики — спровоцировать ошибки, которые не обрабатываются должным образом. Такие ошибки, как правило, являются результатом плохой обработки нестандартного ввода пользователя. В Juice Shop есть несколько способов создания такого рода ошибок и одна из них появляется при использовании страницы для авторизации пользователя (логина).

Сначала кликните на ссылку «Login» в заголовке веб-сайта. Затем войдите в систему, используя форму авторизации, но вместо обычного имени пользователя вставьте апостроф. Для пароля вы можете использовать все что угодно. После заполнения формы кликните по кнопке Log in.

Эту ошибку не очень удобно читать, но с другой стороны она дает некоторое представление о бэкэнде веб-сайта. После того, как вам будет показана эта ошибка, вы завершите решение следующей проблемы — «Provoke an error that is not very gracefully handled», что тут же отразится на странице статистики.

Шаг 7. Используйте базовый XSS

Последний хак, который мы попытаемся выполнить в Juice Shop — это простая рефлексивная XSS-атака. Подобно ошибке, вызванной ранее вводом нестандартных данных, если данные, вводимые в HTML-формы не валидируются надлежащим образом, то иногда можно вводить в эти формы код и его выполнять. Чтобы это протестировать, мы воспользуемся вот этим простым JavaScript-кодом:

<script>alert("XSS")</script>

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

Простая форма, на которой мы можем протестировать эту атаку — это форма поиска. Просто введите этот кусочек JavaScript-кода в текстовое поле и нажмите «Search», чтобы посмотреть, что произойдет.

Если скрипт выполнится, то вы завершите решение еще одной проблемы!

Сегодня мы только прикоснулись к тем проблемам, которые ставит перед нами Juice Shop. Более сложные проблемы идут примерно в том же формате. OWASP Juice Shop является идеальной платформой для изучения пентестинга веб-приложений с нулевыми рисками причинения какого-либо реального ущерба. Завершение всех задач потребует времени, но решение этих задачек поднимет ваш уровень эксперта по безопасности веб-приложений!

Спасибо за прочтение! Если у вас есть какие-либо вопросы, то обязательно оставляйте их в комментариях.

Добавить комментарий