###### tags: `WEB basic`
# WEB_Basic-Омаров_Джамалутин-Практика-3
*Выполнил Омаров Джамалутин*
## Практическая работа №3 Основные атаки и паттерны
### Часть 1. SQL-Injection
1.1 Login-bypass;

Цель атаки: игнорировать пароль и войти как администратор.
Реализация: Запрос SQL выглядит так `SELECT firstname FROM users WHERE username='administrator' AND password='*****'` Можно воспользоваться комментированием, которое позволит игнорировать пароль.


1.2 Hidden-data;

Цель атаки: показать скрытые параметры (в данном случае продукты в магазине).
Реализация: воспользуемся уже известным комментированием, а также используем логику `OR 1=1`, то есть мы не указываем необходимую категорию, а превращаем запрос в true;

1.3 Hidden-data-from-other-tables;
Цель атаки: показать данные из других таблиц.
Реализация: воспользуемся `UNION` запросом. Но чтобы достать что-то из таблиц, нам необходимо понять какой тип значений там используется. Для этого будем совершать попытки.
Null - это пустое поле, без значения. Используем его, для понимания, на какое количество полей будет нужный нам результат;

Подставив 2 null, получил успешный для нас вывод. Теперь будем определять тип. Для этого вместо null можно подставить для начала либо строку, либо символ, либо цифру;

Подставили строку, у нас вывелось поле, которое не должно было выводиться. Теперь попробуем обратиться к ожидаемым названиям колонн из таблицы: username и password;

В начале определили, что тип колонны - строка, предполагаемо можно было вывести пароль и логин, что мы и сделали. Теперь войдем;

1.4 Lab-querying-database-version-mysql-microsoft;

Цель атаки: показать версию sql.
Реализация: будем использовать `UNION` запрос, а также комментирование. Версии sql могут быть разные, чтобы понять какой синтаксис использовать, необходимо определить какая версия перед нами. Чем мы и займемся.
Будем пользоваться burp. Используем комментирование как в прошлый раз, но сервер выдает ошибку 500. Это означает, что ошибка не ожидалась, сервер не знает как на нее ответить. Возможно комментирование не сработало, проверим еще раз, испольщуя символ `#` (в burp при sql инъекциях необходима кодировка url);

Сам запрос `order by 1` говорит сортировать по 1 полю. Код 200 говорит нам о том, что есть такое поле, попробуем 2 поле, а потом 3 поле;

На 3 поле столкнулись с ошибкой 500, поэтому поля всего 2. Далее попробуем обратиться к этим полям через `UNION`;

Увидели наше обращение к ним. Теперь можно определить какая версия sql используется;

### Часть 2. XSS
2.1 Выполнение скрипта в блоге;
Цель атаки: внедрения javascript в поле ввода.
Реализация: впишем скрипт `<script>alert(1)</script>`

Результат;

2.2 Внедрение кода через строку поиска;
Цель атаки: внедрение javascript
Реализация: будем смотреть куда записывается запрос в коде.

Наш запрос находится внутри `<img src=...`. Будет использовать соответствующий тип картинок, но впишем туда скрипт.

2.3 Кодирование угловых скобок;
Цель атаки: внедрить javascript
Реализация: перехватим запрос и посмотрим куда записывается наш запрос, далее внедряем javascript

Посмотрим куда записывается наш запрос;

Видим, что это javascript код. Там прооисходит encodeURIComponent. Вместо <> будем использовать - -;

Результат;

2.4 Обработка принимаемых данных небезопасным способом
Цель атаки: внедрить javascript
Реализация: перехватим запрос и посмотрим куда записывается наш запрос, далее внедряем javascript
Перехватили запрос;

Видим формат JSON. Далее нашли js файл.


Проанализировав ее, сформирую запрос;

Результат;

### Часть 3. CSRF
3.1 Функция изменения электронной почты уязвима.
Войдем в аккаунт;

Обновим email аккаунт;

Нашли запрос на смену email в burp;

Можем поменять email;

Теперь перейдем на exploit сервер;

Впишем скрипт, имитирующим замену email;

email поменялся;

Теперь можно отправить эксплоит жертве и выполнить задание;


3.2 Функциональность смены email. Попытки блокировать CSRF-атаки, но применение защиты только к определенным типам запросов;
Заходим в аккаунт;

Перехватим смену email;

Присутствует csrf токен;

Мы передаем данные, используется метод POST. Мы можем попробывать поменять метод на GET и посмотреть, что из этого выйдет;

Код 200;

Поменялся email;

А если удалить csrf токен? Будет ли email изменен?

Да, email поменялся;

Если будем использовать POST метод, то csrf токен будет ожидаться и удалить его не получится!
Теперь вставим скрипт в exploit сервер;

Email поменялся;

Попробуем метод POST в скрипте;

Не получается;

Убедились, что можно поменять метод и обойти защиту csrf токеном. Теперь отправим эксплоит жертве, чтобы выполнить задание;

### Часть 4. SSRF
4.1 Функция извлекает данные из внутренней системы;
Перехватываем запрос;

В перехваченном Request присутствует такой параметр;

Вот ответ;

Как можно понять нам возвращают количество какого-либо продукта, важным параметром является то, что я выделил на предыдущем скриншоте, без него не работает.
А если поменять этот параметр, к примеру, на localhost? Давайте попробуем;

Нам показана страница с админ панелью, это здорово! Localhost не аутентифицируется, доверие к тому, что я действительно localhost, только по названию!
Дописали путь до admin;

К примеру, чтобы удалить пользователя, необходимо сформировать запрос по этому пути;

Удалили пользователя;

У нас больше нет carlos;

Задание выполнено!

4.2 Функция извлекает данные из внутренней системы, удаляем carlos;
Перехватили запрос;

Вот так он выглядит, раскодировали;

А так выглядит переход к следующему продукту;

Так выглядит ответ при проверке количества;

На Localhost обратиться не получается;

Посмотрим другой запрос, может там есть уязвимое место?

Строчка с параметром path возможно уязвима, попробуем оттуда обратиться к localhost;

Код 302. Теперь попробуем скопировать этот путь в предыдущий запрос;

Админ панель у нас в руках, теперь найдем путь для удаления carlos, но для начала зайдем в админ панель;

Видим ссылку на удаление Carlos;

Удалили;

Задание выполнено;

### Часть 5. RCE
5.1 Внедрение команд ОС;
Перехватили запрос;

Анализируем;

Добавляем известную нам команду и закодируем ее;

Результат;

**peter-dVKVwf**
### Часть 6. Path traversal
6.1 Обход пути (вариант 1);
Для начала добавим в фильтрацию image;

Данная настройка была отключена по умолчанию, возможно она что-то нам даст.
Такой ответ image получаем;

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

filename=8.jpg указывает на путь к картинке, значит туда можно записать путь к определенной директории. Укажем свой путь;

Задание выполнено;

6.2 Обход пути (вариант 2);
Перехватываем запрос как в прошлый раз, теперь указываем путь таким образом;

Вначале попытался указать подобный путь `../../../...../etc/passwd`, но попытка блокировалась, тогда указал так `/etc/passwd` обошел блокировку, заработало!
### Часть 7. Скриншоты выполненный лабораторный работ на PortSwigger
Скриншоты выполненных Лабораторных работ ниже.





















