12+
Анализ защищенности распределенных информационных систем. bWAPP

Объем: 212 бумажных стр.

Формат: epub, fb2, pdfRead, mobi

Подробнее

Три столпа информационной безопасности — это конфиденциальность, целостность и доступность, которые называются триадой CIA (Confidentiality, Integrity, Availability) Джейсон Андресс

Введение

Мы рассмотрим bWAPP beebox представляющую собой уязвимую виртуальную машину. bWAPP охватывает более 100 известных веб-уязвимостей, включая все риски из списка OWASP Top 10, и предлагает три уровня безопасности (low, medium и high), что позволяет пользователям готовиться к тестам на проникновение. Далее опишем уязвимости из OWASP Top 10.

Инъекция — это попытка злоумышленника отправить данные в приложение таким образом, чтобы изменить смысл команд, отправляемых интерпретатору. Например, наиболее распространенным примером является SQL-инъекция, когда злоумышленник отправляет «101 OR 1 = 1» вместо просто «101». При включении в запрос SQL эти данные меняют значение, возвращая все записи вместо одной. В типичной веб-среде есть множество интерпретаторов, таких как SQL, LDAP, операционная система, XPath, XQuery, язык выражений (EL) и многие другие. Все, что связано с «командным интерфейсом», объединяющим данные в команду, восприимчиво к инъекциям. Даже XSS — это просто форма HTML-инъекции.

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

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

Оба классифицируются как нарушенная аутентификация, потому что злоумышленники могут использовать любой способ маскироваться под пользователя: украденные идентификаторы сеанса или украденные учетные данные.

Злоумышленники используют самые разные стратегии, чтобы воспользоваться этими слабыми местами, начиная от масштабных атак с заполнением учетных данных до узконаправленных схем, направленных на получение доступа к учетным данным конкретного человека.

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

Далее мы сконцентрируемся на практических приемах применения средств перехвата траффика, реверс прокси, средств проведения атак именно для виртуальной инфраструктуры bWAPP для демонстрации основных уязвимостей OWASP Top 10. Авторы предполагают, что читатели самостоятельно развернут на доступном гипервизоре или на hardware образ bWAPP.

1 Broken Auth

1.1 Forgotten Function

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Введем произвольный почтовый адрес и посмотрим на вывод.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

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

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения


Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

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

1.2 Insecure Login Forms

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Введем произвольную пару логин/пароль и посмотрим на вывод.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Посмотрим код страницы

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Видим, что на странице есть стандартные логин/пароль. Попробуем их ввести.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

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

1.3 logout Management

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Попробуем разлогиниться, нажав на гиперссылку «here».

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

После нажатия появилось всплывающее окно с подтверждением. Подтверждаем выход.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Если злоумышленник нажмет сейчас кнопку «Назад», то сессия пользователя восстановиться и он попадет на начальную страницу.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Таким образом при разлогинивании с сайта не происходит очистка сессий пользователя, что позволяет злоумышленнику продолжить ее, просто нажав на кнопку «Назад» или подменив ее на существующую.

1.4 Password Attacks

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Попробуем ввести произвольные логин/пароль.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Попробуем при помощи Burp Suite провести атаку перебора.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения


Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения


Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения


Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения


Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения


Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Нажимаем кнопку «Start attack» и смотрим результат.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Из отчета видно, что 15 запрос завершился без ошибки входа. Попробуем ввести данную пару логин/пароль в форму на сайте.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

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

1.5 Weak Passwords

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Попробуем ввести произвольные логин/пароль.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Попробуем при помощи Burp Suite провести атаку перебора (см. предыдущий пункт). Посмотрим на результат перебора.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Из отчета видно, что 13 запрос завершился без ошибки входа. Попробуем ввести данную пару логин/пароль в форму на сайте.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

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

1.6 Administrative Portals

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Посмотрим на URL

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

При помощи get-запроса передается параметр admin со значением 0. Попробуем изменить это значение на 1.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Таким образом нельзя проводить никакие проверки прав только на стороне пользователей. Всегда следует оставлять дополнительную проверку на стороне сервера.

2 XSS

2.1 Задание 1

1. Reflected (GET)

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Введем произвольные имя/фамилию и посмотрим на вывод.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Введенные данные отображаются прямо в html-коде страницы. Попробуем выполнить js-скрипт, чтобы проверить наличие XSS-уязвимости.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения


Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Таким образом на данной странице присутствуем XSS-уязвимость, позволяющая злоумышленнику выполнять произвольный js-код.

2.2 Задание 2

2.1 Reflected (POST)

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Введем произвольные имя/фамилию и посмотрим на вывод.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Введенные данные отображаются прямо в html-коде страницы. Попробуем выполнить js-скрипт, чтобы проверить наличие XSS-уязвимости.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения


Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Таким образом на данной странице присутствуем XSS-уязвимость, однако в отличие от предыдущего задания весь ввод передавался при помощи POST-запроса, что также не обезопасило Web-приложение от уязвимости.

2.3 Задание 3

2.3 Reflected (JSON)

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Попробуем выполнить стандартную проверку на наличие XSS.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Всплывающее окно не появилось, однако на html-форму отобразился фрагмент js-кода. Посмотрим исходный код страницы.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

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

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения


Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Таким образом при ошибках программистов злоумышленники все-равно могут выполнить произвольный js-код, что ведет к XSS-уязвимости.

2.4 Задание 4

2.4 Reflected (AJAX/JSON)

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Попробуем выполнить стандартную проверку на наличие XSS.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Посмотрим на то, как выполняется код на странице.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Каждую секунду выполняется метод proceed (), которые получает данные, введенные пользователем и выполняет код из функции handleServerResponse (). В этой функции выполняется запрос при помощи метода eval (). Давайте попробуем проэксплуатировать эту функцию.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Таким образом сайт позволяет выполнять произвольный js-код из-за ошибки программиста.

2.5 Задание 5

2.5 Reflected (AJAX/XML)

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Попробуем выполнить стандартную проверку на наличие XSS.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Ничего не произошло. Попробуем закодировать наш ввод при помощи XML-амперсанда.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

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

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Таким образом, даже несмотря на простое экранирование, сайт позволяет выполнять произвольный js-код.

2.6 Задание 6

2.6 Reflected (Back Button)

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Нажмем на кнопку Go back.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Посмотрим на исходный код страницы и запрос на страницу.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения


Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Заметим, что значение параметра Referer полностью совпадает с тем адресом, который встраивается в параметр onclick кнопки «Go back». Попробуем при загрузке подменить его на произвольный js-скрипт.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения


Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения


Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Таким образом нельзя встраивать ничего в код страницы без должного экранирования.

2.7 Задание 7

2.7 Reflected (Custom Header)

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Попробуем в запросе изменить значение заголовка bWAPP.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения


Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Попробуем воспроизвести XSS-инъекцию.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения


Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

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

2.8 Задание 8

2.8 Reflected (Eval)

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Посмотрим, что выполняется на странице.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения


Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Внутри eval () выполняется метод, передаваемый GET-запросом. Изменим данный метод.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения


Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения


Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Таким образом нельзя давать пользователям доступ к функции eval ().

2.9 Задание 9

2.9 Reflected (HREF)

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Введем произвольное имя

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения


Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Посмотрим на исходный код страницы.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Введенное имя встраивается во все гиперссылки, при нажатии на которые происходит голосование. Попробуем сначала закрыть тег <a>, а затем прописать наш код.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения


Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения


Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Таким образом любой пользовательский ввод должен быть экранирован.

2.10 Задание 10

2.10 Reflected (Login Form)

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Введем произвольные логин/пароль.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Попробуем вызвать ошибку SQL

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Попробуем внедрить XSS-инъекцию внутрь SQL-ошибки.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения


Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Таким образом нельзя выводить тексты никаких ошибок на сайт и пользовательский ввод без должного экранирования.

2.11 Задание 11

2.11 Reflected (PHP_SELF)

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Введем произвольные имя/фамилию и посмотрим на вывод.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Введенные данные отображаются прямо в html-коде страницы. Попробуем выполнить js-скрипт, чтобы проверить наличие XSS-уязвимости.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения


Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Таким образом на данной странице присутствуем XSS-уязвимость, позволяющая злоумышленнику выполнять произвольный js-код.

2.12 Задание 12

2.12 Reflected (Referer)

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Попробуем подменить Referer в запросе на XSS-инъекцию.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения


Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Таким образом на данной странице присутствуем XSS-уязвимость, позволяющая злоумышленнику выполнять произвольный js-код.

2.13 Задание 13

2.13 Reflected (User-Agent)

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Попробуем подменить User-Agent в запросе на XSS-инъекцию.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения


Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Таким образом на данной странице присутствуем XSS-уязвимость, позволяющая злоумышленнику выполнять произвольный js-код.

2.14 Задание 14

2.14 Stored (Blog)

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Добавим запись в блог с добавлением js-кода.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Теперь любой пользователь при заходе на страницу выполнит наш скрипт.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Таким образом на данной странице присутствуем XSS-уязвимость, позволяющая злоумышленнику выполнять произвольный js-код.

2.15 Задание 15

2.15 Stored (User- Agent)

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Изменим User-Agent в запросе на XSS-инъекцию.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Теперь любой пользователь при заходе на страницу выполнит наш скрипт.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

3 HTML Injection

3.1 Задание 1

3.1 HTML Injection — Reflected (GET)

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Попробуем выполнить js-скрипт, чтобы проверить наличие XSS-уязвимости.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения


Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

3.2 Задание 2

3.2 HTML Injection — Reflected (POST)

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Попробуем выполнить js-скрипт, чтобы проверить наличие XSS-уязвимости.

Бесплатный фрагмент закончился.

Купите книгу, чтобы продолжить чтение.