# Web Basic Модуль Занятие 3
## Атаки на WEB
## SQL-инъекции
Вставки SQL-кода с целью получения доступа к базам данных
### Обход процесса входа
Переносим ссылку для выполнения работы в браузер BlupSuite, переходим во вкладку *My Account*, вводим какие-то данные в поля входа и отсылаем данные на сервер

Получаем ошибку, потому что наши данные неверные

Повторяем действия, но теперь задерживаем запрос с помощью интерцептора

В поле username можем произвести изменение данных. К примеру, вставить administrator\`-- (-- заблокирует часть запроса с паролем в SQL-запросе, из-за чего произойдет вход без ввода пароля только с логином пользователя)

После применения изменений и отправки запроса получаем такой ответ. Теперь мы администраторы.

### Инъекция в струкруту запроса WHERE с получением дополнительных данных
Здесь можно встроить инъекцию в фильтр category
При нажатии на любую картегорию в URL добавляется дополнительный ключ

Мы можем модифицировать его, давбив в категорию SQL выражение \`+OR+1=1-- (<что-то> OR 1=1, что выдаст все результаты)

Нажмем *Enter* и получим скрытые изначально товары


### Инъекция с запросом UNION и извлечение данных из других таблиц
С помощью интерцептора словим запрос при выборе категории товаров. Как и с прошлым вариантом, мы можем вторгунться и дописать свою часть запроса, но в этом раз добавим \'+UNION+SELECT+username,+password+FROM+users-- (SQL запись для получения данных username и password из таблицы users и объединения запроса с ранее вставленным значением)

При получении ответа получаем и данные аккаунтов и паролей пользователей


### Инъекция с запросом типа и версии базы данных
Отлавливаем запрос категории и вставляем \'+UNION+SELECT+@@version,+NULL# (выдаст тип и версию базы данных)

Теперь в конце страницы будут расположены тип и версия базы данных

## XSS уязвимости
Вставки HTML-гипертекста, в который можно вставить JS-код, который сохраняется на сервере
### XSS в HTML ввод без каких-либо кодировок
Попробуем оставить комментарий к одной из записей
Если поле с комментариями никак не обрабатывается, мы сможем загрузить даже тег script с JS-кодом внутри


Теперь при открытии странциы с комментариями, будем получать такое уведомление

### XSS с доступом к DOM-модели документа
Мы имеем поле поиска. Попробуем вставить какой-то текст и посмотреть, где окажется результат поиска в ответной странице

При просмотре через инспектор текст запроса оказался в теге img

Используем в запросе поиска какой-то тег и при его загрузке запустим JS код (предварительно для этого понадобится закрыть тег img)

В ответном сообщении выполнится вставленный в поиск JS-код

### XSS через отражение в JS-коде
Впишем в строку поиска любой текст.

При перехвате текст окажеся в search=

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

Можем этим воспользоваться и вставить туда свой JS-код

Код выполнится при получении ответа

### XSS через отражение во внешний JS-файл
Отправим запрос с любым текстом. В ответе от сервера получим место, к которому происхоидло обращение.

С помощью инспектора откроем файл searchResults.js, в нем увидим код, который использует наш запрос (запрос обрабатвается в eval()). Просто вставка JS-кода в запрос не выполнится

Мы можем воспользоваться eval() и вставить свой код с помощью экранирования символов

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

## CSRF уязвимости
При таких уязвимостях происходит подделка запросов клиента и отправка нужных злоумышленнику данных на сервер
### CSRF и изменение электронной почты пользоватея
Войдем на сайте с помощью данных wiener:peter. После входа у нас появляется возможность изменять email-адрес

Произведем изменение email-а

Найдем в истории запросов Burp Suitе наш запрос на изменение адреса

Теперь мы знаем, к какому месту можно обратиться, чтобы изменить email. Напишем на основе этого HTML форму, котрая будет скрыта и уже содержать нужные нам данные email-a, вставим его на эксплойт-сервер и посмотрим поведение (кнопка View exploit)
```html=
<html>
<body>
<form method="POST" action="https://0a4f00190429347dc0b2401100d70081.web-security-academy.net/my-account/change-email">
<input type="hidden" name="email" value="noany@mail.com"/>
<input type="submit" value="Submit request"/>
</form>
<script>
document.forms[0].submit();
</script>
</body>
</html>
```

Захватим пакет перед отправкой.
Теперь мы увидим, что при использовании эксплойта email-адрес в запросе поменялся на наш

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

Теперь можем отправить эксплойт жертве

### CSRF с токеном, валидация которого зависит от типа запроса
Заходим на сайт и находим запрос со входом в аккаунт. У нас теперь есть csrf-метка, которая мешает просто вставить код.

Отправим запрос в репитер

Если просто поменяем данные в запросе, получим ошибку о несоответствии токена.

Но если мы поменяем тип запроса

То сервер обработает наши новые данные

Теперь построим HTML форму, которая отдаст данные серверу, и отдадим ее на эксплойт-сервер

Протестируем, что она меняет почту

И отправим запрос жертве

## SSRF уязвимости
Тип атак подделывает сервер для клиента с отправкой необычных ответов клиенту
### Базовая SSRF атака на локальный сервер
Для начала проверим, есть ли у нас доступ к админ-панели. Для этого добавим в url /admin

Доступа не имеем.
Перейдем на любую страницу описания товара и нажмем проверку количества

В перехваченном запросе увидим strockAPI - замаскированную ссылку

Перекинем запрос в репитер и попробуем изменить ссылку stockAPI так, чтобы получить доступ к админ-панели (зайдем через localhost/admin)

В ответе получим HTML страницу, которая соответсвует admin панели

В этой странице найдем ссылку, которая удаляет пользователя carlos

Отредактируем stockAPI, добавив туда путь для удаления пользователя и отправим запрос

Получим ответ о случившейся операции

Теперь пользователь удален.

### SSRF c обходом фильтра через перенаправление
Выполним запрос на наличие товара

Отловим этом запрос

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


Тогда попробуем исследовать переход на следующий продукт


Он тоже содержит путь, но в атрибуте path содержится ссылка на порт сервера. Отправим запрос на репитер.
Попробуем приписать к этой ссылке /admin в stockAPI

Получим доступ к панели администратора

Промотаем ниже и найдем ссылку для удаления пользователя carlos

Добавим эту ссылку к атрибу path

В ответе от сервера получим сообщение, что пользователь удален


## RCE уязвимости
Позволяют запустить код на сервере
### Инъекция команд OC
Перехватим запрос на получение количетсва какого-либо товара. Видим интересную строку

Добавим к этой строке команду whoami

В ответе получим результат команды whoami (имя учетной записи)


## Path traversal уязвимость
Позволяет злоумышленнику получить доступ к файлам в системе
### Обход пути к файлу
Попробуем попросить сервер отдать изображение и перехватим запрос на выдачу

В запросе видим имя файла. Что, если к нему можно применить переход между папками?

Добавим выход из трех папко, после чего переход в /etc/passwd

В ответе увидим данные из файла /etc/passwd


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

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

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

Тогда попробуем обратиться от корня

Доступ к данным внутри файла получим

