March 1

День 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-адрес, который обновится, отобразив только что введенный нами текст.

Теперь после /#/search? и буквы q мы видим параметр поиска.

3. Введите сок

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

SQL -инъекция

SQL- инъекция — это когда злоумышленник вводит вредоносный или некорректный запрос для получения или изменения данных из базы данных. А в некоторых случаях — для входа в учетные записи.

Внедрение команд

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

Тут я попробовал вызвать ошибку

и что то стригерил

You successfully solved a challenge: Error Handling (Provoke an error that is neither very gracefully nor consistently handled.)
9c297196ecf8890bc1e900fcf3aebae8c9f9880a

Внедрение email-адреса

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

Но в нашем случае мы будем использовать SQL- инъекцию .

Для получения дополнительной информации: Инъекция

Вопрос №1: Войдите в учетную запись администратора!

После перехода на страницу входа введите данные в поля электронной почты и пароля.

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

Это позволит нам увидеть данные, отправляемые на сервер!

Теперь мы заменим " a " рядом с адресом электронной почты на: ' или 1=1-- и перешлем его на сервер.

Опять стригирил что то

You successfully solved a challenge: Login Admin (Log in with the administrator's user account.)
Ответ: 690fa3247a99d651e0b26f947baf0b79b4f404a9

Почему это работает?

  1. Символ ' закроет скобки в SQL-запросе.
  2. Оператор ' ИЛИ ' в SQL-запросе вернет true, если хотя бы одна его часть истинна. Поскольку 1=1 всегда истинно , весь запрос истинен. Таким образом, он сообщит серверу, что адрес электронной почты действителен, и выполнит вход в систему под идентификатором пользователя 0 , который является учетной записью администратора.
  3. Символ «--» используется в 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 .

После завершения войдите в учетную запись, используя пароль.

пароль: admin123

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: Сбросить пароль Джима!

3c3e2d6ef99b733b947e92f8e2a9ed08bf57ea63

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.

Обнаружение уязвимостей или ошибок в системе контроля доступа будет классифицировано по одному из двух типов :

Горизонтальная эскалация привилегий

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

Вертикальная эскалация привилегий

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

Источник: Packetlabs.net

Дополнительная информация: Нарушение контроля доступа

Вопрос №1: Зайдите на страницу администрирования!

Сначала откроем отладчик в Firefox .

(Или источники в Chrome .)

Это можно сделать, перейдя по соответствующей ссылке в меню «Веб-разработчики».

Затем мы обновим страницу и найдем файл 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, при условии, что у них есть корзина!

IDOR - получили доступ до чужой корзины.

Ответ: e6982b34b6734ceadd28e5019b251f929a80b815

Снова перейдите на страницу http://10.112.152.24 /#/administration и нажмите на значок корзины рядом с отзывом, отмеченным 5 звездами!

Ответ:78231b75c0b2180b7e964dcbb1ab3c3f58639f2e

7. Откуда это взялось?

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

Существует три основных типа XSS -атак:

DOM (Special)

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!