День 39. OWASP Juice Shop
В этой комнате используется уязвимое веб-приложение Juice Shop, чтобы научиться выявлять и использовать распространенные уязвимости веб-приложений.
1. Открыто для бизнеса!
В этой комнате мы рассмотрим 10 самых распространенных уязвимостей в веб-приложениях по версии OWASP . Они встречаются во всех типах веб-приложений. Но сегодня мы поговорим о собственном изобретении OWASP — Juice Shop!
Перед прохождением этой комнаты рекомендуется пройти бесплатные комнаты Burpsuite « Burpsuite Basics » и « Burpsuite Repeater» !
Juice Shop — это большое приложение, поэтому мы не будем рассматривать все темы из топ-10.
Однако мы рассмотрим следующие темы, с которыми рекомендуем вам ознакомиться по мере прохождения этого раздела.
<------------------------------------------------->
Раскрытие конфиденциальных данных
Межсайтовая скриптовая атака (XSS)
<------------------------------------------------->
Для выполнения [Задания 3] и последующих заданий потребуется флажок, который отобразится по завершении задания.
Загрузка веб-приложения занимает от 2 до 5 минут , поэтому, пожалуйста, наберитесь терпения!
Временно отключите Burp в настройках прокси для текущего браузера. Обновите страницу, и флажок отобразится.
(Это не проблема самого приложения, а проблема Burp, из-за которой флаг не отображается. )
Если при выполнении XSS- атак проблема не решается, очистите файлы cookie и данные сайтов, так как это иногда может быть причиной.
Если вы уверены, что выполнили задание, но оно всё ещё не работает, перейдите к [Заданию 8] , это позволит вам проверить его выполнение.
Благодарим OWASP и Бьорна Кимминича за предоставленные материалы.
2. Давайте отправимся в приключение!
Прежде чем перейти к собственно взлому, стоит осмотреться. В Burp отключите режим перехвата и просмотрите сайт. Это позволит Burp регистрировать различные запросы с сервера, которые могут оказаться полезными в дальнейшем.
Запускаем бурп и кидаем проксирование
Это называется обходом приложения, что также является формой разведки !
Вопрос №1: Какой адрес электронной почты у администратора?
В отзывах указан адрес электронной почты каждого пользователя. А при нажатии на продукт Apple Juice отображается адрес электронной почты администратора!
Вопрос №2: Какой параметр используется для поиска?
При нажатии на значок лупы в правом верхнем углу приложения откроется строка поиска.
Затем мы можем ввести какой-либо текст, и нажатие клавиши Enter выполнит поиск только что введенного текста.
Теперь обратите внимание на URL-адрес, который обновится, отобразив только что введенный нами текст.
3. Введите сок
В этой задаче основное внимание будет уделено уязвимостям внедрения кода. Уязвимости внедрения кода представляют собой серьезную опасность для компании, поскольку могут привести к простоям и/или потере данных. Выявление точек внедрения в веб-приложении обычно довольно просто, поскольку большинство из них возвращают ошибку. Существует множество типов атак внедрения кода, некоторые из них:
SQL- инъекция — это когда злоумышленник вводит вредоносный или некорректный запрос для получения или изменения данных из базы данных. А в некоторых случаях — для входа в учетные записи.
Внедрение команд — это когда веб-приложения берут входные или управляемые пользователем данные и выполняют их как системные команды. Злоумышленник может изменить эти данные для выполнения собственных системных команд. Это можно наблюдать в приложениях, которые выполняют неправильно настроенные тесты ping.
Тут я попробовал вызвать ошибку
You successfully solved a challenge: Error Handling (Provoke an error that is neither very gracefully nor consistently handled.)
9c297196ecf8890bc1e900fcf3aebae8c9f9880a
Внедрение электронных писем — это уязвимость безопасности, позволяющая злоумышленникам отправлять электронные письма без предварительного разрешения почтового сервера. Это происходит, когда злоумышленник добавляет дополнительные данные в поля, которые сервер интерпретирует неправильно.
Но в нашем случае мы будем использовать SQL- инъекцию .
Для получения дополнительной информации: Инъекция
Вопрос №1: Войдите в учетную запись администратора!
После перехода на страницу входа введите данные в поля электронной почты и пароля.
Перед отправкой убедитесь, что режим перехвата включен .
Это позволит нам увидеть данные, отправляемые на сервер!
Теперь мы заменим " a " рядом с адресом электронной почты на: ' или 1=1-- и перешлем его на сервер.
You successfully solved a challenge: Login Admin (Log in with the administrator's user account.)
Ответ: 690fa3247a99d651e0b26f947baf0b79b4f404a9
- Символ ' закроет скобки в SQL-запросе.
- Оператор ' ИЛИ ' в SQL-запросе вернет true, если хотя бы одна его часть истинна. Поскольку 1=1 всегда истинно , весь запрос истинен. Таким образом, он сообщит серверу, что адрес электронной почты действителен, и выполнит вход в систему под идентификатором пользователя 0 , который является учетной записью администратора.
- Символ «--» используется в SQL для комментирования данных; любые ограничения на вход в систему больше не будут работать, поскольку они интерпретируются как комментарий. Это похоже на комментарии # и // в Python и JavaScript соответственно.
Вопрос №2: Войдите в учетную запись Bender!
Аналогично тому, что мы делали в вопросе №1 , теперь войдем в учетную запись Бендера! Снова перехватим запрос на вход, но на этот раз укажем в качестве адреса электронной почты: bender@juice-sh.op'-- .
Теперь перешлите это на сервер!
Но почему бы нам не поставить 1=1 ?
Итак, поскольку адрес электронной почты действителен (что вернет true ), нам не нужно принудительно устанавливать значение true . Таким образом, мы можем использовать '--' для обхода системы авторизации. Обратите внимание, что 1=1 можно использовать, когда адрес электронной почты или имя пользователя неизвестны или недействительны.
You successfully solved a challenge: Login Bender (Log in with Bender's user account.)
Ответ: 5ff5052e879e6fef64124e64c82c84ebc809c6c4
4. Кто взломал мой замок?!
В этой задаче мы рассмотрим использование уязвимостей аутентификации. Говоря об уязвимостях в аутентификации, мы подразумеваем механизмы, подверженные манипуляциям. Именно эти механизмы, перечисленные ниже, мы и будем использовать.
Слабые пароли в учетных записях с высокими привилегиями.
Страницы восстановления пароля
Дополнительная информация: Неработающая аутентификация
Вопрос №1: Подберите пароль от учетной записи администратора методом перебора!
Мы использовали SQL-инъекцию для входа в учетную запись администратора, но пароль нам по-прежнему неизвестен. Давайте попробуем атаку методом перебора! Мы снова перехватим запрос на вход, но вместо отправки его через прокси, мы отправим его в Intruder.
Перейдите в раздел «Позиции», затем выберите кнопку «Очистить §» . В поле пароля поместите два символа § внутри кавычек. Уточним: § § — это не два отдельных поля ввода, а реализация кавычек в Burp, например, "" . Запрос должен выглядеть как на изображении ниже.
Тут просят подобрать паль админа, почту мы уже знаем.
(но лучше перебирать не в бурпе - java очень медленный язык и с большим массивом данных он будет долго и тяжко справляться)
В качестве полезной нагрузки мы будем использовать файл best1050.txt из пакета seclists (который можно установить с помощью команды: apt-get install seclists ).
Список можно загрузить по адресу: /usr/share/wordlists/SecLists/Passwords/Common-Credentials/best1050.txt
После загрузки файла в Burp начните атаку. Вам потребуется отфильтровать запросы по статусу.
В случае неудачной попытки запроса будет отправлена ошибка 401 Unauthorized.
В случае успешного запроса будет возвращен код 200 OK .
После завершения войдите в учетную запись, используя пароль.
You successfully solved a challenge: Password Strength (Log in with the administrator's user credentials without previously changing them or applying SQL Injection.)
Ответ: ff4aebffe31b0ffdea9bdd0207a16a3c01ac6c56
Вопрос №2: Сбросить пароль Джима!
5. А! Не смотри!
Веб-приложение должно безопасно и надежно хранить и передавать конфиденциальные данные. Однако в некоторых случаях разработчик может не обеспечить надлежащую защиту своих конфиденциальных данных, что делает их уязвимыми.
В большинстве случаев защита данных не применяется единообразно во всем веб-приложении, что делает некоторые страницы доступными для общественности. В других случаях информация утекает в открытый доступ без ведома разработчика, что делает веб-приложение уязвимым для атак.
Дополнительная информация: Раскрытие конфиденциальных данных
Мы скачаем файл acquisitions.md и сохраним его. Похоже, здесь есть и другие файлы, представляющие интерес.
После загрузки перейдите на главную страницу , чтобы получить флаг!
You successfully solved a challenge: Confidential Document (Access a confidential document.)
Ответ: 8d2072c6b0a455608ca1a293dc0c9579883fc6a5
Вопрос №2: Войдите в учетную запись MC SafeSearch!
После просмотра видеоклипа некоторые фрагменты песни особенно запомнились.
Он отмечает, что его пароль — « Mr. Noodles », но он заменил некоторые « гласные на нули », то есть заменил только буквы «о» на нули.
Теперь нам известно, что пароль к учетной записи mc.safesearch@juice-sh.op — « Mr. N00dles ».
You successfully solved a challenge: Login MC SafeSearch (Log in with MC SafeSearch's original user credentials without applying SQL Injection or any other bypass.)
Ответ: bb105418e73708ceccf1a7b2491f434b8f5230e4
Вопрос №3: Скачайте файл резервной копии!
Теперь вернёмся в папку http://10.112.152.24/ftp/ и попробуем загрузить package.json.bak. Но, похоже, мы получаем ошибку 403, которая указывает, что можно загрузить только файлы .md и .pdf.
Чтобы обойти это ограничение, мы воспользуемся обходным путем для символов, называемым «ядовитым нулевым байтом». Ядовитый нулевой байт выглядит так: %00 .
Примечание: поскольку мы можем загрузить его по URL-адресу , нам потребуется закодировать его в формат, закодированный по URL-адресу.
Теперь "пустой байт" будет выглядеть так: %2500 . Добавление этого и расширения .md в конец позволит обойти ошибку 403!
«Отравленный нулевой байт» — это, по сути, нулевой символ-терминатор. Поместив нулевой символ в строку в определенном байте, вы дадите серверу команду завершить строку в этой точке, обнулив остальную часть строки.
You successfully solved a challenge: Poison Null Byte (Bypass a security control with a Poison Null Byte to access a file not meant for your eyes.)
Ответ: cfdeea14e8f01b4952722fd0e4a77f1928593c9a
6. Кто управляет этой штуковиной?
Современные системы позволяют нескольким пользователям иметь доступ к разным страницам. Администраторы чаще всего используют страницу администрирования для редактирования, добавления и удаления различных элементов веб-сайта. Вы можете использовать такие страницы при создании веб-сайта с помощью таких программ, как Weebly или Wix.
Обнаружение уязвимостей или ошибок в системе контроля доступа будет классифицировано по одному из двух типов :
Горизонтальная эскалация привилегий
Это происходит, когда пользователь может выполнить действие или получить доступ к данным другого пользователя с тем же уровнем прав доступа.
Вертикальная эскалация привилегий
Это происходит, когда пользователь может выполнить действие или получить доступ к данным другого пользователя с более высоким уровнем прав доступа.
Дополнительная информация: Нарушение контроля доступа
Вопрос №1: Зайдите на страницу администрирования!
Сначала откроем отладчик в Firefox .
Это можно сделать, перейдя по соответствующей ссылке в меню «Веб-разработчики».
Затем мы обновим страницу и найдем файл JavaScript для main-es2015.js.
Затем мы перейдём на эту страницу по адресу : http://10.112.152.24/main-es2015.js
Чтобы преобразовать текст в читаемый формат, нажмите кнопку { } внизу.
Теперь выполните поиск по запросу "admin".
Вы встретите несколько разных слов, содержащих "admin", но нам нужно слово "path: administration".
Это указывает на страницу под названием " /#/administration ", как видно из пути к разделу "О программе" несколькими строками ниже, но перейти на неё, не войдя в систему, не получится.
Поскольку это страница администратора, логично, что для ее просмотра нам необходимо войти в учетную запись администратора .
Хороший способ предотвратить доступ пользователей к этой информации — загружать только те части приложения, которые им необходимы. Это предотвратит утечку или просмотр конфиденциальной информации, такой как страница администратора.
Вопрос №2: Посмотрите корзину покупок другого пользователя!
Войдите в свою учетную запись администратора и нажмите «Ваша корзина». Убедитесь, что Burp запущен, чтобы вы могли перехватить запрос!
Пересылайте каждый запрос, пока не увидите: GET /rest/basket/1 HTTP/1.1
Теперь мы изменим цифру 1 после /basket/ на 2.
Теперь отобразится корзина пользователя с ID 2. Вы можете сделать это и для других пользователей с ID, при условии, что у них есть корзина!
Снова перейдите на страницу http://10.112.152.24 /#/administration и нажмите на значок корзины рядом с отзывом, отмеченным 5 звездами!
7. Откуда это взялось?
XSS , или межсайтовый скриптинг, — это уязвимость, позволяющая злоумышленникам запускать JavaScript в веб-приложениях. Это одна из наиболее распространенных уязвимостей в веб-приложениях. Сложность таких уязвимостей варьируется от простых до чрезвычайно сложных, поскольку каждое веб-приложение обрабатывает запросы по-своему.
Существует три основных типа XSS -атак:
DOM XSS (Document Object Model-based Cross-site Scripting) использует HTML-среду для выполнения вредоносного JavaScript. Этот тип атаки обычно использует HTML-тег <script></script> .
Постоянное (на стороне сервера)
Постоянная XSS-атака — это JavaScript-код, который выполняется при загрузке сервером страницы, содержащей этот код. Она может возникать, когда сервер не проверяет данные пользователя при их загрузке на страницу. Такие атаки часто встречаются в сообщениях блогов.
Отражённый (на стороне клиента)
Отражённая XSS-атака — это JavaScript-код, выполняемый на стороне клиента веб-приложения. Чаще всего она встречается, когда сервер не проверяет правильность поисковых данных.
Дополнительная информация: Межсайтовая скриптовая атака (XSS)
Вопрос №1: Выполните DOM XSS-атаку!
Мы будем использовать элемент iframe с тегом `<alert>` на JavaScript:
<iframe src="javascript:alert(`xss`)">
Ввод этого текста в строку поиска вызовет всплывающее окно.
Обратите внимание, что мы используем iframe , который является распространенным HTML-элементом, встречающимся во многих веб-приложениях; существуют и другие элементы, которые также дают аналогичный результат.
Этот тип XSS, также называемый XFS (Cross-Frame Scripting), является одним из наиболее распространенных способов обнаружения XSS в веб-приложениях.
Веб-сайты, позволяющие пользователю изменять iframe или другие элементы DOM, с наибольшей вероятностью будут уязвимы для XSS-атак.
Обычно поисковая строка отправляет запрос на сервер, который затем возвращает соответствующую информацию, но именно здесь кроется недостаток. Без надлежащей проверки входных данных мы можем осуществить XSS-атаку на поисковую строку.
Вопрос №2: Выполните постоянную XSS-атаку!
Сначала войдите в свою учетную запись администратора .
Для этой атаки мы перейдём на страницу " Последний IP-адрес входа ".
Должно быть указано, что последний IP-адрес — 0.0.0.0 или 10.xxx.
Поскольку в лог записывается «последний» IP-адрес входа, мы сейчас выйдем из системы, чтобы в лог записался «новый» IP-адрес.
Убедитесь, что функция перехвата запросов Burp включена , чтобы она перехватывала запросы на выход из системы.
Затем перейдём на вкладку «Заголовки», где добавим новый заголовок:
Затем перенаправьте запрос на сервер!
При повторном входе в учетную запись администратора и переходе на страницу с IP-адресом последнего входа вы увидите предупреждение об XSS-атаке!
Зачем нам отправлять этот заголовок?
Заголовок True-Client-IP аналогичен заголовку X-Forwarded-For ; оба сообщают серверу или прокси-серверу IP-адрес клиента. Поскольку в заголовке отсутствует проверка подлинности, мы можем выполнить XSS-атаку.
Вопрос №3: Выполните отражённую XSS-атаку!
Во-первых, нам нужно правильно настроиться, чтобы выполнить отраженную XSS-атаку!
Войдите в свою учетную запись администратора и перейдите на страницу « История заказов ».
Там вы увидите значок « Грузовик », нажав на него, вы перейдете на страницу результатов отслеживания. Вы также увидите, что заказу присвоен идентификатор.
Вместо кода 5267-f73dcd000abcc353 мы будем использовать XSS-атаку с использованием iframe, <iframe src="javascript:alert(`xss`)">.
После отправки URL-адреса обновите страницу, и вы получите предупреждение о XSS-атаке!
На сервере будет таблица соответствия или база данных (в зависимости от типа сервера) для каждого идентификатора отслеживания. Поскольку параметр 'id' не проходит проверку перед отправкой на сервер, мы можем выполнить XSS-атаку.
Вопрос №1: Выполните DOM XSS-атаку!
4a31a4fe0954199566e360a873802bf64d0d0a84
Вопрос №2: Выполните постоянную XSS-атаку!
c37da14686b69a220fd9febd09bb9593e7d0539f
Вопрос №3: Выполните отражённую XSS-атаку!
305021787d3e9cd9cebc057a021c2504550bb3b6
8. Исследование!
Если вы хотите попробовать свои силы в более сложных заданиях, не рассмотренных в этой комнате, загляните в раздел /#/score-board/ на Juice-shop. Там вы сможете увидеть выполненные вами задания, а также задания различной сложности.
Перейдите на страницу /#/score-board/
2614339936e8282e2f820f023d4d998a1f95e02a
Основная группа обучения ИБ
Lab-группу с полезным софтом / книгами / аудио.
Чат для обсуждений, задавай свои вопросы.
P.S. С вами был @Fnay_Offensive
До новой встречи, user_name!