Тестирование безопасности web приложений

вводный практикум

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

План практикума

  1. Введение в веб-безопасность
    • Поговорим о важности безопасности веб-приложений.
    • Обсудим основные виды атак (SQL Injection, XSS, CSRF и т.д.).
    • Краткое введение в OWASP Top 10.
  2. Установка и настройка Juice Shop
    • Покажем как запустить Juice Shop через облачный сервис, GitHub Codespaces без необходимости использовать Docker.
    • Подключение к приложению и изучение интерфейса.
  3. Тестирование на SQL-инъекцию
    • Объясним, что такое SQL-инъекция.
    • Покажем, как искать уязвимости.
    • Практические задания.
  4. Тестирование на XSS (Cross-Site Scripting)
    • Объясним, что такое XSS-уязвимости и способы их эксплуатации.
    • Практические задания.

Введение у веб-безопасность

1. Важность безопасности веб-приложений

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

  • Конфиденциальность: Утечка данных может привести к потере доверия пользователей, штрафам и юридическим последствиям.
  • Целостность: Вмешательство в данные может нарушить работу бизнес-процессов, внести ошибки и испортить репутацию компании.
  • Доступность: Атаки могут привести к отказу в обслуживании, что повредит бизнесу и пользовательскому опыту.

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

2. Основные виды атак

Разберем несколько распространенных типов атак, которые часто встречаются в веб-приложениях:

  • SQL Injection (SQL-инъекция)

    • SQL-инъекции происходят, когда злоумышленник может вставить или “внедрить” произвольные SQL-команды в запросы к базе данных. Это может позволить хакеру получить несанкционированный доступ к данным, изменить их или даже удалить.
    • Пример: Вставка ' OR '1'='1 в поле ввода для пароля может позволить обойти проверку учетных данных.
  • XSS (Cross-Site Scripting) — Межсайтовый скриптинг

    • XSS-атаки позволяют злоумышленнику внедрять вредоносные скрипты на страницы веб-сайта, которые затем выполняются в браузере жертвы. Это может приводить к краже данных (например, сессионных файлов cookie) или выполнению нежелательных действий от лица пользователя.
    • Пример: Вставка вредоносного JavaScript-кода в поле комментариев сайта.
  • CSRF (Cross-Site Request Forgery) — Межсайтовая подделка запросов

    • CSRF-атака заставляет пользователя выполнить нежелательные действия на веб-сайте, где он аутентифицирован, например, перевод денег или изменение настроек учетной записи, не подозревая об этом.
    • Пример: Если пользователь авторизован на сайте банка, злоумышленник может отправить запрос от имени пользователя без его ведома.

3. Краткое введение в OWASP Top 10

OWASP (Open Web Application Security Project) — это международная организация, которая занимается вопросами безопасности приложений. Они создают стандарты и рекомендации, помогая разработчикам и тестировщикам защитить свои приложения от распространенных уязвимостей.

OWASP Top 10 — это список наиболее критичных уязвимостей веб-приложений, который обновляется раз в несколько лет. Вот краткий обзор текущих (2021) категорий:

  1. Broken Access Control — Нарушение контроля доступа.

    • Пример: Пользователь может получить доступ к ресурсам, к которым он не должен иметь доступ.
  2. Cryptographic Failures — Ошибки шифрования.

    • Пример: Недостаточное шифрование данных, например, незащищенные пароли или номера кредитных карт.
  3. Injection — Уязвимости, связанные с инъекциями (SQL, NoSQL, OS Command Injection).

    • Пример: SQL-инъекция, когда злоумышленник может выполнять произвольные команды в базе данных.
  4. Insecure Design — Небезопасное проектирование.

    • Пример: Невключение мер безопасности на стадии проектирования приложения.
  5. Security Misconfiguration — Ошибки конфигурации безопасности.

    • Пример: Использование стандартных настроек безопасности, слабые пароли администратора.
  6. Vulnerable and Outdated Components — Уязвимые и устаревшие компоненты.

    • Пример: Использование библиотек с известными уязвимостями.
  7. Identification and Authentication Failures — Ошибки идентификации и аутентификации.

    • Пример: Несовершенная система проверки паролей, позволяющая злоумышленникам получить доступ.
  8. Software and Data Integrity Failures — Нарушение целостности программного обеспечения и данных.

    • Пример: Внедрение сторонних компонентов без проверки их безопасности.
  9. Security Logging and Monitoring Failures — Ошибки журналирования и мониторинга безопасности.

    • Пример: Неспособность адекватно отслеживать подозрительную активность в системе.
  10. Server-Side Request Forgery (SSRF) — Подделка запросов на стороне сервера.

  • Пример: Хакер заставляет сервер отправить запрос на внутренние ресурсы, к которым сервер имеет доступ.

Установка и настройка Juice Shop

Шаги по запуску Juice Shop через GitHub Codespaces:

  1. Регистрация или авторизация на GitHub

    • Если у вас нет аккаунта на GitHub, необходимо зарегистрироваться на сайте github.com. Процесс регистрации занимает несколько минут.
    • Если у вас уже есть аккаунт, выполните вход.

  2. Создание форка репозитория

    • Перейдите по ссылке на репозиторий: Juice Shop Codespaces.
    • Нажмите кнопку Fork, чтобы создать копию репозитория в своем GitHub-аккаунте.

  3. Запуск проекта в Codespaces

    • После создания форка, откройте свой форкнутый репозиторий.
    • В верхней части экрана найдите кнопку <> Code и кликните на нее.
    • Выберите вкладку Codespaces и нажмите на кнопку Create codespace on main.

  4. Ожидание развертывания

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

  5. Запуск приложения

    • Откройте терминал в Codespaces.
    • Введите команду для запуска приложения:
      npm start
    • Приложение будет запущено на локальном сервере.

  6. Открытие приложения в браузере

    • Чтобы открыть приложение, перейдите во вкладку Ports в Codespaces (она расположена на панели снизу).
    • Найдите порт, на котором запущено приложение (например, порт 3000).
    • Нажмите на иконку глобуса рядом с номером порта, чтобы перейти по URL и открыть Juice Shop в браузере.

Доступ к базе данных

Шаг 1: Открытие нового терминала

  • Перейдите в меню Terminal и выберите New Terminal.

Шаг 2: Установка SQLite

  • В новом терминале выполните команды:
     
    sudo apt-get update

    sudo apt-get install sqlite3

Шаг 3: Проверка установки

  • Проверьте установку:
    sqlite3 --version

Шаг 4: Доступ к базе данных

  1. Перейдите в директорию:
    cd data
  2. Откройте базу данных:
    sqlite3 juiceshop.sqlite

Структуры базы данных SQLite

Список таблиц:

    • Чтобы увидеть список всех таблиц в базе данных, выполните следующую команду:
      .tables

Просмотр структуры таблицы:

    • Чтобы посмотреть структуру конкретной таблицы, используйте команду PRAGMA table_info(<имя_таблицы>). Например, чтобы увидеть структуру таблицы Users, выполните:
      PRAGMA table_info(Users);

Просмотр всех данных в таблице:

    • Если вы хотите посмотреть данные в конкретной таблице, вы можете использовать команду SELECT. Например, чтобы просмотреть все записи в таблице Users, выполните:
      SELECT * FROM Users;

Выход из SQLite:

    • Чтобы выйти из командной строки SQLite, просто введите:
      .exit

Тестирование на SQL-инъекцию 

  1. Базовая SQL-инъекция (Authentication Bypass)

    • Входные данные:
      ' OR '1'='1
    • Используйте в полях логина (например, Email и Password) для обхода аутентификации.

  2. SQL-инъекция с использованием комментариев

    • Входные данные:
      admin' --
    • Эта инъекция завершает проверку пароля и комментирует остаток SQL-запроса.

  3. SQL-инъекция с объединением

    • Входные данные:
      ' UNION SELECT username, password FROM Users --
    • Попробуйте выполнить этот запрос в поле, которое ожидает одно значение (например, username). Это может вернуть имена пользователей и пароли.

  4. Сложные инъекции

    • Входные данные:
      ' AND (SELECT COUNT(*) FROM Users) > 0 --
    • Этот запрос проверяет, существует ли хотя бы одна запись в таблице Users.

  5. Инъекция с использованием функций SQLite

    • Входные данные:
      ' OR EXISTS(SELECT * FROM sqlite_master WHERE type='table' AND name='Users') --
    • Проверяет наличие таблицы Users в базе данных.

  6. Инъекция с использованием времени (Blind SQL Injection)

    • Входные данные:
      ' OR (SELECT 1 FROM Users WHERE username='admin' AND (SELECT COUNT(*) FROM Users) > 0) WAITFOR DELAY '0:0:5' --
    • Этот запрос заставляет сервер ждать 5 секунд, если условие истинно, что может помочь в понимании структуры данных.

  7. Поиск по идентификатору пользователя

    • Входные данные:
      ' OR id = 1 --
    • Эта инъекция может вернуть данные пользователя с идентификатором 1.

  8. Использование подзапросов

    • Входные данные:
      ' UNION SELECT (SELECT name FROM sqlite_master WHERE type='table') --
    • Этот запрос возвращает названия всех таблиц в базе данных.

Как использовать

  1. Зайдите в Juice Shop: Откройте приложение Juice Shop.
  2. Найдите уязвимые поля: Это могут быть формы входа, поиска или регистрации.
  3. Вставьте инъекции: Введите одну из вышеперечисленных инъекций в соответствующее поле и нажмите “Отправить”

Самостоятельная работа

Задание 1: Поиск уязвимостей в форме регистрации

Цель: Найти уязвимости SQL-инъекции в форме регистрации пользователей.

Шаги:

  1. Откройте приложение Juice Shop.
  2. Перейдите на страницу регистрации.
  3. Введите в поле имени пользователя следующий SQL-код:
    ' OR '1'='1'; --
  4. Посмотрите, удалось ли вам зарегистрироваться с этими данными.

Задание 2: Проверка уязвимостей в форме поиска

Цель: Найти SQL-инъекции в форме поиска продуктов.

Шаги:

  1. Перейдите на страницу поиска продуктов в Juice Shop.
  2. Введите в поле поиска следующий SQL-код:
    ' UNION SELECT username, password FROM Users; --
  3. Проанализируйте, получаете ли вы какие-либо данные о пользователях.

Задание 3: Blind SQL Injection

Цель: Понять, как работает Blind SQL Injection и как ее можно использовать для получения данных.

Шаги:

  1. Используйте следующую инъекцию в одном из полей ввода (например, поле логина):
    ' AND (SELECT COUNT(*) FROM Users) > 0; --
  2. Измените значение в условии (например, > 1, > 2 и т.д.) и наблюдайте, как меняется ответ сервера.

Задание 4: Анализ уязвимостей в URL

Цель: Проверить, есть ли уязвимости SQL-инъекции в параметрах URL.

Шаги:

  1. Откройте приложение Juice Shop и обратите внимание на URL.
  2. Попробуйте изменить параметры URL, добавляя SQL-инъекции. Например:
    http://localhost:3000/#/products?search=' OR '1'='1'; --
  3. Проверьте, изменяется ли поведение приложения при использовании таких параметров.

Введение в XSS

Cross-Site Scripting (XSS) — это уязвимость безопасности, позволяющая злоумышленникам внедрять вредоносные скрипты в контент, который отображается другим пользователям. Это может привести к кражам сессий, кражам учетных записей, фишингу и другим атакам.

Основные типы XSS

  1. Stored XSS: Вредоносный скрипт сохраняется на сервере (например, в базе данных) и затем отображается пользователям.
  2. Reflected XSS: Вредоносный скрипт передается через URL и немедленно исполняется в ответе сервера.
  3. DOM-based XSS: Скрипт исполняется на стороне клиента, манипулируя DOM без взаимодействия с сервером.

Практика

Форма добавления комментариев

  • Где искать: На странице продукта в Juice Shop найдите раздел для комментариев, где пользователи могут оставлять отзывы или комментарии.
  • Что вводить: Вставьте ваши XSS-коды (например, <script>alert('XSS');</script>) в текстовое поле для комментариев и опубликуйте комментарий.

2. Поле поиска

  • Где искать: На главной странице или в разделе “Поиск” найдите строку поиска.
  • Что вводить: Введите вредоносный скрипт, например:
    <script>alert('XSS Search');</script>
    или
    <img src=x onerror="alert('XSS');" />

3. Форма регистрации или входа

  • Где искать: Перейдите на страницы регистрации или входа в систему.
  • Что вводить: Введите XSS-коды в поля ввода, такие как имя пользователя или пароль.

4. URL-параметры

  • Где искать: В адресной строке браузера. Вы можете добавить параметры к URL Juice Shop.
  • Что вводить: Попробуйте изменить URL, добавив XSS-код, например:
    http://localhost:3000/#/search?q=<script>alert('XSS URL');</script>

5. DevTools (Консоль)

  • Где искать: Откройте инструменты разработчика (обычно F12 или Ctrl+Shift+I) и перейдите на вкладку “Консоль”.
  • Что вводить: Введите JavaScript-код для проверки XSS, например:
    javascript
    const userInput = "<img src=x onerror='alert(\"XSS DOM\");'/>"; document.body.innerHTML += userInput;

Как проверить результаты

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

Хотите углубить свои знания в тестировании безопасности веб-приложений?

Если вам нужен полноценный курс по тестированию безопасности веб-приложений, где вы сможете:

  • Изучить в деталях OWASP Top 10.
  • Понять, как предотвращать атаки SQL-инъекции, XSS, CSRF и другие уязвимости.
  • Освоить инструменты для проведения тестов безопасности.
  • Получить практический опыт работы с реальными уязвимостями на тренировочных веб-приложениях.

То вы можете записаться на месячный практический курс!

🔹 Групповые и индивидуальные занятия с опытным преподавателем.
🔹 Живые уроки с доступом к записям.
🔹 Работа с реальными проектами.

Поддержка и вопросы

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

Через чат-бот

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

Курсы

Публичная оферта. Авторское право © 2024 Школа подготовки тестировщиков