# Гришанов Матвей Сергеевич – WEB Basic Практическая работа 3. Основные атаки и паттерны
[toc]
---
## **SQL-injection уязвимости:**
### SQL injection vulnerability allowing login bypass (Уязвимость SQL-инъекции, позволяющая обойти вход в систему)
Для реализации атаки на эту уязвимость необходимо использовать утилиту **Burp Suite**. Используя встроенное окно браузера в **Burp Suite**, мы можем перехватывать данные логина и пароля.
После скачивания приложения и его установки -- открываем встроенный браузер и заходим на сайт лабораторной работы.
:::info
:information_source: Предварительно необходимо зарегистрироваться на сайте и залогиниться!
:::

---
Далее переходим в **My account**. Там мы вводим логин **administrator** и любой пароль, но перед нажатием кнопки **Log in** -- включаем в **Burp Suite** режим **Intercept** (Перехват).

---
Нажимаем кнопку **Log in** и получаем перехваченные данные.

---
Для того, чтобы получить доступ к пользователю **administrator** нам необходимо изменить эти данные (Добавить после слова **administrator** символы: `'--` ).

---
После этого нажимаем кнопку **Forward** в **Burp Suite**.

---
:::success
:star: Успешно залогинились под пользователем **administrator**!
:::

---
### SQL injection vulnerability in WHERE clause allowing retrieval of hidden data (Уязвимость SQL-инъекций в предложении WHERE, позволяющая извлекать скрытые данные)
Данная уязвимость состоит в том, что через список категорий на сайте мы можем совершить атаку с внедрением таким образом, что сайт начнёт отображать сведения обо всех продуктах в любой категории, как выпущенных, так и не выпущенных.
:::info
:information_source: Пример SQL-запроса, который формируется при выборе категории на сайте:
```
SELECT * FROM products WHERE category = 'Gifts' AND released = 1
```
:::
Первым делом переходим на сайт.

---
Затем включаем режим перехвата и выбираем любую категорию.

---
Теперь в полученных данных нам необходимо изменить значение параметра category на `'+OR+1=1--` (В моём случае **Gifts** заменяется на этот параметр).

---
Далее жмём кнопку **Forward**.

---
:::success
:star: Успешно получаем полный список товаров!
:::

---
### SQL injection UNION attack, retrieving data from other tables (SQL-инъекция UNION-атака, получение данных из других таблиц)
Данная уязвимость основывается на фильтре категорий. Используя атаку UNION, мы можем извлекать данные из других таблиц. Наша атака формируется на использовании приёмов, которые были применены в предыдущих работах.
Зайдя на сайт, мы включаем режим перехвата в **Burp Suite**

---
Далее выбираем категорию и убеждаемся в том, что запрос возвращает два столбца, каждый из которых содержит текст.

---
Далее используем соответствующий **payload** для получения содержимого таблицы пользователей.
:::info
:information_source: Используемый **payload**:
```
'+UNION+SELECT+username,+password+FROM+users--
```
:::

---
После этого нажимаем кнопку **Forward** в **Burp Suite**.

---
Получаем таблицу **users**, где указаны пользователи, а также их пароли.

---
Далее переходим в раздел **My account** и логинимся, используя полученные данные:


---
:::success
:star: Мы успешно получили доступ к пользователю!
:::

---
### SQL injection attack, querying the database type and version on MySQL and Microsoft (Запрос типа и версии базы данных на MySQL и Microsoft)
Данная уязвимость также содержится в фильтре категорий продукции. Используя **UNION**, мы можем получить версию базы данных.
Заходим на сайт для проведения атаки.

---
Включаем режим перехвата и нажимаем на любую из категорий продукции на сайте.
Далее используем payload, чтобы отобразить текущую версию базы данных.
:::info
:information_source: Использованный payload:
```
'+UNION+SELECT+@@version,+NULL#
```
:::

---
После этого нажимаем кнопку **Forward** в **Burp Suite**.

---
:::success
:star: Мы успешно получили информацию о версии базы данных!
:::

---
## **XSS уязвимости:**
### Stored XSS into HTML context with nothing encoded (Сохраненный XSS в контексте HTML без каких-либо кодировок)
Уязвимость данной работы заключается в межсайтовом скриптинге функции комментирования. Для атаки данной уязвимости необходимо отправить комментарий, который вызывает функцию оповещения при просмотре сообщения в блоге.
Заходим на сайт и выбираем любой из постов.

---
Переходим к комментариям.

Далее необходимо оставить комментарий со скриптом.
:::info
:information_source: Содержание комментария:
```
<script>alert(1)</script>
```
:::
Также указываем ==отправителя, email и веб-сайт==.

---
Отправляем комментарий!

---
:::success
:star: Скрипт успешно выполнился!
:::

---
### DOM XSS in `document.write` sink using source `location.search` (Уязвимость межсайтового скриптинга на основе модели DOM XSS в функции отслеживания поисковых запросов)
Здесь используется функция **JavaScript document.write**, которая записывает данные на страницу. Данная функция вызывается с данными из **location.search**. Этими данными можно управлять с помощью URL-адреса веб-сайта.
Первым делом заходим на сайт, который будет подвержен атаке.

---
Далее необходимо ввести случайную буквенно-цифровую строку в поле поиска на сайте.

---
Выполняем поиск.

---
Случайная строка была помещена в атрибут ==`img src`==.

---
Выполняем поиск ещё раз, вставив заранее в строку алерт-функцию ==`"><svg onload=alert(1)>`==.

---
Функция сработала!

---
:::success
:star: Работа успешно выполнена!
:::

---
### Reflected XSS into a JavaScript string with angle brackets HTML encoded (Отраженный XSS в строку JavaScript с угловыми скобками, закодированный в HTML)
В данной работе содержится отраженная уязвимость межсайтового скриптинга в функции отслеживания поисковых запросов, где закодированы угловые скобки. Отражение происходит внутри строки **JavaScript**.
Переходим на сайт.

---
Отправляем случайную буквенно-цифровую строку в поле поиска, затем используем **Burp Suite** для перехвата.

---
Отправляем поисковый запрос в **Burp Repeater**.

---
Случайная строка была отражена внутри строки **JavaScript**.

---
Заменяем ввод следующим **payload'ом**, чтобы выйти из строки **JavaScript** и внедрить предупреждение.
:::success
:star: Триггер предупреждения сработал.
:::

---
### Reflected DOM XSS (Отражение DOM XSS)
Эта работа демонстрирует отраженную уязвимость **DOM**. Уязвимости отраженной модели **DOM** возникают, когда приложение на стороне сервера обрабатывает данные из запроса и повторяет данные в ответе. Затем скрипт на странице обрабатывает отраженные данные ==небезопасным способом==, в конечном итоге записывая их в опасный приемник.
Заходим на сайт и включаем режим перехвата. В строку поиска вводим ==XSS==.

---
Форвардим запрос.

---
Замечаем, что строка отражается в ответе **JSON search-results**.

---
Через **Site Map** открываем **searchResult.js** и убеждаемся, что ответ **JSON** используется вызовом функции **eval()**.

---
Чтобы выполнить данную лабораторную работу необходимо ввести в строку поиска на сайте определенный запрос.
:::info
:information_source: Использованный запрос:
```
\"-alert(1)}//
```
:::

---
:::success
:star: Работа успешно выполнена!
:::

---
## **CSRF:**
### CSRF vulnerability with no defenses (Уязвимость CSRF без защиты)
Атака на данную уязвимость заключается в создании некоторого **HTML-кода**, который использует атаку **CSRF** для изменения адреса электронной почты.
Сначала необходимо зайти на сайт, на котором будет происходить атака.

---
Заходим в свой аккаунт, используя логин и пароль.
:::info
:information_source: Данные для входа в аккаунт:
login: `wiener`
password: `peter`
:::

---
Заменяем адрес электронной почты.

---
Находим в **Burp Suite**, используя раздел **HTTP history**, запрос со сменой электронной почты.

---
Копируем **URL**. Он будет необходим для создания эксплойта.

---
Переходим в раздел **go to exploit server** на самом сайте.
Заполняем поле **Body** в соответствии с шаблоном. После заполнения всех полей нажимаем **Store**.
:::info
:information_source: Код шаблона:
```
<html>
<body>
<form method="POST" action="https://0aa7006204882b7bc0a177cc001e008a.web-security-academy.net/my-account/change-email">
<input type="hidden" name="email" value="test1@test.ru" />
<input type="submit" value="Submit request" />
</form>
<script>
document.forms[0].submit();
</script>
</body>
</html>
```
:::

---
Чтобы проверить **exploit** нажмём на кнопку **View exploit**. В разделе **HTTP history** мы видим, что он сработал.

---
Можно заметить, что наш адрес электронной почты поменялся на ==test1@test.ru==.

---
Для того, чтобы выполнить работу необходимо доставить **exploit** до жертвы. В меню сервера нажимаем на кнопку **Deliver to victim**.
:::success
:star: Работа выполнена успешно!
:::

---
### CSRF where token validation depends on request method (CSRF -- проверка токена зависит от метода запроса)
Данная атака главным образом состоит в том, чтобы подменить метод запроса. Сменив метод запроса на тот, который не блокируется, мы можем добиться, например, замены адреса электронной почты.
Первым делом заходим на сайт, на котором будет проводиться атака.

---
Далее необходимо залогиниться под нашим пользователем.
:::info
:information_source: Данные для входа в аккаунт:
login: `wiener`
password: `peter`
:::

---
Заменяем адрес электронной почты.

---
Находим запрос, который сигнализировал изменения почты. Его необходимо отправить в **Burp Repeater**.


---
В самом **Burp Repeater** изменяем параметр **csrf** на любой другой и отправляем, нажимая кнопку **Send**.
Можно заметить, что токен блокируется.

---
Тогда необходимо заменить метод запроса с **POST** на **GET**. Для этого используем функцию **Change request method**.

---
Видно, что метод запроса поменялся на **GET**.

---
А после изменения метода запроса перестал блокироваться токен.

---
Копируем **URL** запроса **POST** на изменения пароля. Он понадопится нам при написании эксплойта.

---
Переходим в раздел **go to exploit server** на самом сайте.
Заполняем поле **Body** в соответствии с шаблоном. После заполнения всех полей нажимаем **Store**.
:::info
:information_source: Код шаблона:
```
<html>
<body>
<form action="https://0a3e0054035f3989c0924da3002c00e6.web-security-academy.net/my-account/change-email">
<input type="hidden" name="email" value="test1@test.ru" />
<input type="hidden" name="csrf" value="1234" />
<input type="submit" value="Submit request" />
</form>
<script>
document.forms[0].submit();
</script>
</body>
</html>
```
:::

---
Чтобы проверить **exploit** нажмём на кнопку **View exploit**. В разделе **HTTP history** мы видим, что он сработал.

Можно заметить, что наш адрес электронной почты поменялся на ==test1@test.ru==.


---
Для того, чтобы выполнить работу необходимо доставить **exploit** до жертвы. В меню сервера нажимаем на кнопку **Deliver to victim**.

---
:::success
:star: Работа выполнена успешно!
:::

---
## **SSRF:**
### Basic SSRF against the local server (Базовый SSRF против локального сервера)
Атака в данной работе заключается в извлечении данных через уязвимость в функции проверки запасов. Попытаемся удалить одного из пользователей, используя эту уязвимость.
Первым делом заходим на сайт, где будет происходить атака на уязвимость.

---
Включаем режим перехвата.

---
Заходим на страницу одного из товаров.

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

---
Получаем запрос, в котором содержится строчка **stockApi**.

---
Изменяем параметр **stockApi** в данном запросе на тот, что отобразит нам интерфейс администратора.
:::info
:information_source: Используемая строка:
```
http://localhost/admin
```
:::

---
Далее необходимо посмотреть **HTML-код** страницы и определить **URL**, который отвечает за удаление пользователей.

---
Необходимый **URL** найден.

---
Далее мы повторяем запрос с проверкой товара на складе. Однако изменяем параметр **stockApi** на другой.
:::info
:information_source: Новый параметр:
```
http://localhost/admin/delete?username=carlos
```
:::

---
:::success
:star: Пользователь успешно удалён!
:::


---
### SSRF with filter bypass via open redirection vulnerability (SSRF с обходом фильтра через открытую уязвимость перенаправления)
Атака в данной работе заключается в извлечении данных через уязвимость в функции проверки запасов. Попытаемся удалить одного из пользователей, используя доступ к интерфейсу по адресу `http://192.168.0.12:8080/admin`.
Первым делом заходим на сайт, где будет происходить атака на уязвимость.

---
Далее переходим в один из товаров и при попытке проверить его наличие на складе получаем параметр **stockApi**.


---
Пытаемся сделать запрос к администратору.
:::info
:information_source: Новый параметр:
```
http://192.168.0.12:8080/admin
```
:::

---
Однако не всё так просто. Таким образом не получается открыть меню администратора и снизу выходит ошибка.

---
Пробуем перейти на следующую страницу и обращаем внимание на **path** параметр. Он является заголовочным и способен привести нас к открытому перенаправлению.

---
Пытаемся ещё раз изменить параметр **stockApi**, но на этот раз используем **path**.
:::info
:information_source: Новый параметр:
```
/product/nextProduct?path=http://192.168.0.12:8080/admin
```
:::


---
Операция проходит успешно! Мы смогли получить доступ к меню администратора.

---
Далее необходимо посмотреть **HTML-код** страницы и определить **URL**, который отвечает за удаление пользователей.

---
Попробуем таким способом удалить пользователя **carlos**.
:::info
:information_source: Новый параметр:
```
/product/nextProduct?path=http://192.168.0.12:8080/admin/delete?username=carlos
```
:::

---
:::success
:star: Пользователь успешно удалён!
:::


---
## **RCE:**
### OS command injection, simple case (Внедрение команды ОС, простой случай)
Суть уязвимости заключается в том, что приложение выполняет команду оболочки, содержащую предоставленные пользователем идентификаторы продуктов и магазинов, и возвращает необработанные выходные данные команды в своем ответе.
Заходим на сайт для проведения атаки.

---
Переходим на страницу одного из товаров. Включаем режим перехвата и проверяем наличие товара.

---
Получаем доступ к параметру **storeID**. Заменяем значение данного параметра, чтобы получить имя пользователя.
:::info
:information_source: Новый параметр:
```
1|whoami
```
:::

---
Форвардим этот запрос.

---
:::success
:star: Успешно получаем вывод имени пользователя!
:::

---
## **Path traversal:**
### File path traversal, simple case (Обход пути к файлу, простой случай)
Атака заключается в использовании уязвимости обхода пути к файлу при отображении изображений продуктов.
Перед началом выполнения работы необходимо в настройках **Proxy-->Intercept Server Responses** поставить галочку около **Intercept responses based on following rules**.

---
Далее заходим на сайт.

---
Включаем режим перехвата и выбираем один из товаров.

---
Изменяем параметр **filename**.
:::info
:information_source: Новый параметр:
```
../../../etc/passwd
```
:::

---

Убеждаемся, что в ответе есть содержимое файла `/etc/passwd`.

:::success
:star: Задача выполнена!
:::

---
### File path traversal, traversal sequences blocked with absolute path bypass (Обход пути к файлу, последовательности обхода заблокированы с обходом абсолютного пути)
Суть уязвимости заключается в том, что приложение блокирует последовательности обхода, но обрабатывает предоставленное имя файла как относящееся к рабочему каталогу по умолчанию.
Перед началом выполнения работы необходимо в настройках **Proxy-->Intercept Server Responses** поставить галочку около **Intercept responses based on following rules**.

---
Включаем режим перехвата и выбираем один из товаров.

---
Изменяем параметр **filename**.
:::info
:information_source: Новый параметр:
```
/etc/passwd
```
:::


---
Убеждаемся, что в ответе есть содержимое файла `/etc/passwd`.

---
:::success
:star: Задача выполнена!
:::

---
## Learning Progress

---