⠀ ⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀![](https://i.imgur.com/l6GHi51.png) ⠀ ⠀ ⠀ # ⠀⠀⠀⠀⠀⠀Практическая работа №1 ⠀ :::info ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀:bulb:**Цель практической работы №1** ⠀ - Познакомиться с основами WEB технологий - Иметь представления об основных WEB протоколах - Научиться разворачивать WEB-сервер с помщью docker - Научиться создавать запросы к WEB приложению ::: ⠀ :::spoiler Часть 1. ⠀ ##### Установить и настроить Linux Ubuntu ![](https://i.imgur.com/wCHnDtF.png) ⠀ ##### Установка пакетов для доступа к репозитериям по HTTPS ![](https://i.imgur.com/QT2VpZa.png) ⠀ ##### Добавим в систему GPG-ключ для работы с официальным репозиторием Docker ![](https://i.imgur.com/tIfROqn.png) ⠀ ##### Добавим репозиторий Docker в локальный список репозиториев ![](https://i.imgur.com/qTn4bYS.png) ⠀ ##### Установка Docker-CE ![](https://i.imgur.com/xVb60c8.png) ⠀ ##### Проверка работы службы ![](https://i.imgur.com/5uCsY76.png) ⠀ ##### Добавим Docker в автозагрузку ![](https://i.imgur.com/RyE8bvo.png) ⠀ ##### Установка веб-приложения Juice-Shop > [color=#07b759] Команда *docker run* на скриншоте запускает установленное веб приложение ![](https://i.imgur.com/QTXfroE.png) ⠀ ##### Переходим на страницу веб приложения ![](https://i.imgur.com/UsbVdNE.png) ⠀ ![](https://i.imgur.com/FEJvLNF.png) ⠀ ##### Изучим запросы браузера к приложению и форме регистрации пользователей с помощью Burp Suite. > [color=#07b759] GET-запрос, возвращающий index.html ![](https://i.imgur.com/MArATLh.png) ⠀ ![](https://i.imgur.com/bqKmaRm.png) ⠀ > [color=#07b759] Воспользуюсь встроенным браузером Chromium в Burp, для удобного мониторинга всех HTTP запросов между нами и сервером. > При нажатии на кнопку Login - отправляется GET запрос *GET /rest/admin/application-configuration HTTP/1.1* ![](https://i.imgur.com/gd25wZe.png) ![](https://i.imgur.com/GjHhDMy.png) ⠀ > [color=#07b555] При попытке авторизации, клиент отправляет POST запрос (131), а после GET запрос (132) > [color=#07b555] Код ответа на статус ошибки HTTP 401 Unauthorized клиента указывает, что запрос не был применён, поскольку ему не хватает действительных учётных данных для целевого ресурса ![](https://i.imgur.com/tsnjmE3.png) ⠀ ![](https://i.imgur.com/fnxqr8x.png) ⠀ > [color=#07b555] Код "HTTP 304 Not Modified" клиента указывает, что нет необходимости повторно передавать запрошенные ресурсы. Это неявное перенаправление на кешированный ресурс ![](https://i.imgur.com/bDLx7wW.png) ⠀ > [color=#07b555] Попробуем зарегистрироваться. Отправится 2 запроса - GET и кодом 304, и POST с 400-м ответом ![](https://i.imgur.com/FORMMW6.png) ⠀ ![](https://i.imgur.com/Rot1rMn.png) ⠀ > [color=#07b555] На скриншотах видно, что POST запрос адресован на другой айпи, и Host - passwordsleakcheck-pa.googleapis.com. Предположу, что это сервис от Chrome https://security.googleblog.com/2020/10/new-password-protections-and-more-in.html ⠀ ##### Сформируем несколько запросов к приложению через cURL > [color=#07b555] Обычный GET запрос ![](https://i.imgur.com/YmbicBo.png) ⠀ > [color=#07b555] Отправим POST запрос ![](https://i.imgur.com/WChkLqR.png) ⠀ ##### Сформируем несколько запросов к приложению через powershell > [color=#07b555] Установим Powershell ![](https://i.imgur.com/4ww2u46.png) ⠀ > [color=#07b555] Отправим простой GET запрос. > По умолчанию Invoke-WebRequest выполняет HTTP-запрос с методом GET к ресурсу на веб‑сервере, адрес ресурса указывается в качестве значения параметра -Uri ![](https://i.imgur.com/QMdZIlp.png) ⠀ > [color=#07b555] Если отправить Invoke-WebRequest с аргументом -Method и значением POST, получим информацию об ответе сервера ![](https://i.imgur.com/L0sI8e2.png) ⠀ > [color=#07b555] Если отправим Invoke-RestMethod, увидим содержимое ответа от сервера ![](https://i.imgur.com/KtiPB8C.png) ⠀ ##### Изучим ответ приложения и распарсим его с помощью утилит jq > [color=#07b555] С помощью cURL отправляю гет запрос на сервер, и получаю "необработанный" JSON ![](https://i.imgur.com/r6iwPtV.png) ⠀ > [color=#07b555] Приведем наш вывод к удобочитаемому формату с помощью jq ![](https://i.imgur.com/BqnIFV3.png) ⠀ > [color=#07b555] Теперь выведу только содержимое *.config.server* ![](https://i.imgur.com/KNtZbfd.png) ::: ⠀ :::success *Материалы лекции изучены!* *Выполнил: Шурыгин Денис* ::: ⠀ ⠀ ###### tags: `Web Basic` {%hackmd @themes/notion %}