Содержание статьи
Ты наверняка слышал об OWASP (Open Web Application Security Project). Это открытый некоммерческий фонд, который занимается вопросами обеспечения безопасности веб‑приложений. Кроме крайне популярного OWASP Top 10, там разработали и постоянно развивают очень интересный проект Juice Shop, призванный продемонстрировать самые часто встречаемые уязвимости в приложениях и «худшие практики» веб‑разработки. Этот магазинчик — идеальный полигон для тренировки и изучения пентеста реальных приложений. В этой статье я покажу, как его ставить, запускать и искать свои первые уязвимости.
Установка и запуск
Juice Shop поддерживает разные варианты установки, но я рекомендую использовать локальный вариант с Node.js. В версии Docker доступны не все возможные уязвимости, кроме того, неплохо научиться ставить Node.js без рута и узнать, как использовать одновременно несколько разных версий.
Установка Node.js
Juice Shop поддерживает разные стабильные релизы Node.js. На момент написания статьи последней LTS (Long Term Support) Node.js была 14 версия, ее‑то мы и будем ставить. Чтобы не захламлять свою ОС пакетами и иметь возможность использовать разные релизы, был придуман Node Version Manager. Он устанавливается в домашнюю папку и позволяет легко рулить версиями. Сейчас последняя версия — 0.38, но я всегда рекомендую сходить и проверить перед установкой. Установка выполняется одной командой в домашней папке.
$curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash
Теперь тебе нужно открыть и закрыть терминал, чтобы внесенные скриптом изменения применились. Проверь установленную версию nvm и переходи непосредственно к установке Node.js.
$nvm -v$nvm install --lts
Проверь версию установленной команды node и запомни ее.
$node --version
Если тебе понадобится несколько разных версий одновременно, просто установи нужные и выбирай актуальную по необходимости (эта часть уже не нужна для работы Juice Shop).
$nvm install <номер версии>
$nvm use <номер версии>
Установка Juice Shop
В гитхабе разработчиков всегда можно найти свежие релизы. Проект постоянно развивается, вносятся новые задания и исправляются ошибки, поэтому всегда бери самый свежий вариант! Но он должен быть совместимым с твоим Node.js. Если на предыдущем этапе ты установил Node.js 14, то тебе будет нужен juice-shop-xx.
. Скачай его и распакуй в удобную тебе папку.
$tar -xzf juice-shop-xx.x.x_node14_linux_x64.tgz
На этом установка завершена. Переходи в папку с Juice Shop и запускай его:
$npm start
Если все прошло успешно, ты увидишь сообщение «info: Server listening on port 3000». Открывай любимый браузер и переходи на http://localhost:3000. В правом верхнем углу есть выбор языка, я всегда рекомендую ставить английский, так ты не встретишься с проблемами перевода разных терминов и, возможно, выучишь пару новых словечек. Надеюсь, тебе нравятся соки и этот прекрасный дырявый пакет, так как они и Burp Suite станут твоими лучшими друзьями на множество увлекательных часов.
Настройка Burp Suite
Я буду использовать и показывать скриншоты Burp Suite Community, но ты можешь использовать любой удобный тебе инструмент. Поскольку грамотная настройка Burp и интеграция его с любимым браузером потянет на хорошую статью, я оставлю тебе это в качестве домашнего задания. Помни, если все статьи и советы в интернете кажутся тебе безнадежно устаревшими — официальная документация всегда к твоим услугам!
Основные уязвимые места
В своей предыдущей статье я уже упоминал о важности методики и системного подхода к пентесту. В случае с веб‑приложениями это вдвойне важно! В сети есть множество отличных чек‑листов вроде Pentesting Web Checklist. Если ты никогда не слышал о XSS, IDOR, CSRF, OAUTH — очень рекомендую тебе бесплатный курс разработчиков Burp Suite.
Теперь перейдем непосредственно к анализу нашего приложения. Я рекомендую сделать табличку с описанием доступных функций и необходимых уровней доступа. Она поможет тебе потом экспериментировать над приложением и отвечать на вопросы вроде «А что будет, если я отправлю админский запрос с правами гостя?»
Пройдись по всему приложению, понажимай все кнопки, посмотри товар. Теперь зарегистрируйся и попробуй пройти весь путь покупки товара от добавления его в корзину до доставки. Твоя задача — познакомиться с функциями приложения и подумать, где могут быть логические ошибки разработчиков или неучтенные моменты. Если вдруг закончились идеи, какие еще места магазина можно посетить, посмотри на Happy Path подробный гид, составленный разработчиками.
warning
Я очень надеюсь, что ты не использовал при тестировании этого приложения реальные номера банковских карт и адреса! Помни, оно полно дыр как в плане безопасности, так и в плане приватности. Если вдруг сделал это, просто удали папку с приложением и установи его снова.
На какие места и функции этого и других приложений я рекомендую обращать особое внимание:
- форма регистрации, входа и восстановления пароля;
- любые строки поиска и пользовательского ввода. Они все могут быть уязвимы к разным видам XSS. Это я еще продемонстрирую;
- все варианты фильтрации товара или выборки его по критериям. Это часто путь к SQL-инъекциям;
- работа с корзиной, списком заказов и доставкой. Там часто можно встретить очень плохой контроль доступа и подсмотреть чужие корзины и адреса;
- любые функции с возможностью злоупотреблений (возврат товара, платные подписки и так далее);
- админка и доступ к ней неавторизованных пользователей или выполнение админских функций без необходимых прав (но вначале надо в эту админку попасть).
Теперь самое время посмотреть на OWASP Top 10. Все десять категорий обязательно присутствуют в Juice Shop. Что самое интересное, в каждой из этих категорий подробно описаны варианты возникновения и методы защиты. Варианты можно использовать как чек‑лист для проверки вроде «А посмотрел ли я этот момент в приложении?» или, если ты разработчик, «А не допустил ли я такой же ошибки у себя?»
На этом скучная (но очень важная!) вводная часть заканчивается, и я перехожу непосредственно к демонстрации уязвимостей магазина.
Ищем доску с заданиями
Ты наверняка при первом запуске уже заметил пакет с соком, предлагающий решить очень простую задачу, а именно найти доску с заданиями и результатами, она же Score Board. У этой крайне простой задачи есть два варианта решения.
- Внимательно посмотри на адресную строку вида
/
,#/ search /
и так далее и подумай, а какой бы была строка для доступа к Score Board? Сразу скажу, этот вариант мне не очень нравится, поскольку нужно играть в угадайку, и не всегда успешно. Поэтому я предпочитаю вариант номер два.#/ login - Давай изучим исходный код сайта и посмотрим, нет ли там чего интересного. Я надеюсь, ты умеешь читать исходный код сайта в своем любимом браузере? В Firefox достаточно просто нажать F12.
Что сразу же бросается в глаза? Огромное количество подключаемых скриптов на JS! Нас с тобой будет интересовать скрипт main
. За что отвечают другие скрипты, ты можешь выяснить на досуге с помощью любимого поисковика.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»