# WEB_Basic-Малышев_Роман-Практика-1 *Выполнил Малышев Роман* ## Установка и настройка Ubuntu 20 1. Скачаем образ диска Ubuntu 20.04 c https://releases.ubuntu.com/focal/. Desktop image. 2. Настроим в VirtualBox. То есть создадим новыю виртуальную машину. ![](https://i.imgur.com/xolkjBl.png) ![](https://i.imgur.com/U9DEe1u.png) 3. Запустим виртуальную машину Ubuntu20 и приступим к установке ОС. ![](https://i.imgur.com/5WzsheR.png) ![](https://i.imgur.com/NlffQ5O.png) ![](https://i.imgur.com/D3wFs18.png) ![](https://i.imgur.com/WNMLuWS.png) Успешно установленная ubuntu 20.04. ![](https://i.imgur.com/y2RZlby.png) ## Настроика подключение к репозиториям docker 1. Разрешим apt использовать репозиторий по протоколу HTTPS.![](https://i.imgur.com/4JjU7JS.png) ![](https://i.imgur.com/sVuFjFe.png) 2. Добавим официальный ключ GPG Docker.![](https://i.imgur.com/stPBC99.png) 3. Настроим репозиторий. ![](https://i.imgur.com/tpAH8WS.png) ## Установка Docker CE 1. Установим Docker CE. ![](https://i.imgur.com/krqBDqI.png) 2. Проверим, что Docker Engine установлен правильно. ![](https://i.imgur.com/RndoHRR.png) ## Установим веб-приложение juice-shop ![](https://i.imgur.com/3CuF3qe.png) ![](https://i.imgur.com/xpZpZ0Y.png) ![](https://i.imgur.com/ubHXwZv.png) ## Изучим запросы браузера к приложению  и форме регистрации пользователей Установим и откроем Burp Suite, затем **сделаем GET запрос.** ![](https://i.imgur.com/aZWOb3G.png) Про анализируем ответное сообщение http. Первая строка является строкой состояния, на ней указывается указывает протокол, версию, код состояния и описание. 1. Протокол http, версия 1.1, код состояния 200 и описание в порядке, 200 означает, что запрос клиента выполнен успешно. 2. Указывает браузеру разрешить доступ к ресурсу из любого источника. 3. HTTP-заголовок ответа `X-Content-Type-Options` является маркером, используемым сервером для указания того, что типы MIME, объявленные в заголовках Content-Type, должны соблюдаться и не изменяться. `nosniff` блокирует запрос, если запрошенный тип: "style" и его MIME не "text/css", или "script" и его MIME не JavaScript MIME-тип. 4. Страница может быть отображена только в том случае, если все фреймы-предки имеют то же происхождение, что и сама страница. 5. HTTP `Feature-Policy` определяет, разрешено ли текущему документу использовать Payment Request() API. Здесь установлено значение по умолчанию. 6. Дополнительный загаловок HTTP дял привлечения разработчиков. 7. Это маркер, который использует сервер, чтобы уведомить клиента о поддержке "запросов по кускам". Его значение указывает единицу измерения, которая может быть использована для определения диапазона чтения, в начем случае это байты. 8. Используется для задания инструкций кеширования как для запросов, так и для ответов. Инструкции кеширования однонаправленные: заданная инструкция в запросе не подразумевает, что такая же инструкция будет указана в ответе. `public` - указывает, что ответ может быть закеширован в любом кеше. `max-age=<seconds>` Задаёт максимальное время в течение которого ресурс будет считаться актуальным. 9. Заголовок `Last-Modified` в ответе HTTP содержит дату и время, в которую, по мнению удалённого сервера, запрашиваемый ресурс был изменён. 10. `ETag` является идентификатором специфической версии ресурса. 'W/' (чувствителен к регистру) указывает, что используется слабый валидатор. 11. `Content-Type` сообщает клиенту, какой будет тип передаваемого контента. 12. `Content-Length` указывает размер отправленного получателю тела объекта в байтах. 13. Заголовок ответа `Vary` определяет, как сопоставить будущие заголовки запроса, чтобы решить, можно ли использовать кешированный ответ, а не запрашивать новый с исходного сервера. 14. `Date` -- текущее время сервера. 15. Заголовок `Connection` определяет, остаётся ли сетевое соединение активным после завершения текущей транзакции (запроса). keep-alive -- соединение остаётся и не завершается, позволяя выполнять последующие запросы на тот же сервер. 16. Целое число, представляющее собой время в секундах, в течение которого хост позволит незанятому соединению оставаться открытым до его закрытия. **Сделаем GET запрос к форме регистрации.** ![](https://i.imgur.com/Z7c2eot.png) ## Запрос к приложению через curl Выполним аналогичный запрос через приложение curl ![](https://i.imgur.com/7hXwyqr.png) ![](https://i.imgur.com/1KnT2kl.png) ## Запрос к приложению через powershell Сделаем аналогичный запрос с хостовой Windows 10 к приложению juice-shop. ![](https://i.imgur.com/ZdCIOgu.png) ![](https://i.imgur.com/BXflrvS.png) ## Изучим ответ приложения и распарсим его с помощью утилит jq 1. Установим утилиту jq. ![](https://i.imgur.com/q50Auw5.png) 2. ![](https://i.imgur.com/S36Jdlr.png) 3. Можно записать в свой файл, чтобы потом на него накладывать фильтр, точнее работать с данными. ![](https://i.imgur.com/uUbUI9O.png) 4. Выведем конфиг. ![](https://i.imgur.com/iBIZ1nS.png) ![](https://i.imgur.com/ZaE799C.png) Можно также вывесит массив. Например загаловки в memories. ![](https://i.imgur.com/w72TyRZ.png)