---
# System prepended metadata

title: WEB_Basic-Омаров_Джамалутин-Практика-3
tags: [WEB basic]

---

###### tags: `WEB basic`
# WEB_Basic-Омаров_Джамалутин-Практика-3
*Выполнил Омаров Джамалутин*
## Практическая работа №3 Основные атаки и паттерны 

### Часть 1. SQL-Injection

1.1 Login-bypass;
![](https://i.imgur.com/BXbl1C9.png)

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

![](https://i.imgur.com/rsDpQNy.png)

![](https://i.imgur.com/fD2Ic4X.png)

1.2 Hidden-data;
![](https://i.imgur.com/u4dYtaK.png)

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

![](https://i.imgur.com/nUX4Ion.png)

1.3 Hidden-data-from-other-tables;

Цель атаки: показать данные из других таблиц.
Реализация: воспользуемся `UNION` запросом. Но чтобы достать что-то из таблиц, нам необходимо понять какой тип значений там используется. Для этого будем совершать попытки.

Null - это пустое поле, без значения. Используем его, для понимания, на какое количество полей будет нужный нам результат;
![](https://i.imgur.com/mJD99jC.png)

Подставив 2 null, получил успешный для нас вывод. Теперь будем определять тип. Для этого вместо null можно подставить для начала либо строку, либо символ, либо цифру;
![](https://i.imgur.com/O1Xenbi.png)

Подставили строку, у нас вывелось поле, которое не должно было выводиться. Теперь попробуем обратиться к ожидаемым названиям колонн из таблицы: username и password;
![](https://i.imgur.com/arQa57h.png)

В начале определили, что тип колонны - строка, предполагаемо можно было вывести пароль и логин, что мы и сделали. Теперь войдем;
![](https://i.imgur.com/gGzFpzp.png)

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

![](https://i.imgur.com/nY2VhEW.png)

Цель атаки: показать версию sql.
Реализация: будем использовать `UNION` запрос, а также комментирование. Версии sql могут быть разные, чтобы понять какой синтаксис использовать, необходимо определить какая версия перед нами. Чем мы и займемся.

Будем пользоваться burp. Используем комментирование как в прошлый раз, но сервер выдает ошибку 500. Это означает, что ошибка не ожидалась, сервер не знает как на нее ответить. Возможно комментирование не сработало, проверим еще раз, испольщуя символ `#` (в burp при sql инъекциях необходима кодировка url);
![](https://i.imgur.com/Oa92K8v.png)

Сам запрос `order by 1` говорит сортировать по 1 полю. Код 200 говорит нам о том, что есть такое поле, попробуем 2 поле, а потом 3 поле;
![](https://i.imgur.com/LHQaXsx.png)

На 3 поле столкнулись с ошибкой 500, поэтому поля всего 2. Далее попробуем обратиться к этим полям через `UNION`;
![](https://i.imgur.com/pZkPzAb.png)

Увидели наше обращение к ним. Теперь можно определить какая версия sql используется;
![](https://i.imgur.com/qedhQkN.png)

### Часть 2. XSS

2.1 Выполнение скрипта в блоге;

Цель атаки: внедрения javascript в поле ввода.
Реализация: впишем скрипт `<script>alert(1)</script>`

![](https://i.imgur.com/btfGbi6.png)

Результат;
![](https://i.imgur.com/0LbN0va.png)

2.2 Внедрение кода через строку поиска;

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

![](https://i.imgur.com/va9cLTH.png)

Наш запрос находится внутри `<img src=...`. Будет использовать соответствующий тип картинок, но впишем туда скрипт.
![](https://i.imgur.com/TlTsrBR.png)

2.3 Кодирование угловых скобок;

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

![](https://i.imgur.com/ZeYcV3a.png)

Посмотрим куда записывается наш запрос;
![](https://i.imgur.com/aB3px8z.png)

Видим, что это javascript код. Там прооисходит encodeURIComponent. Вместо <> будем использовать - -;
![](https://i.imgur.com/EnkrPN2.png)

Результат;
![](https://i.imgur.com/OzQkLnx.png)

2.4 Обработка принимаемых данных небезопасным способом

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

Перехватили запрос;
![](https://i.imgur.com/FrTroZy.png)

Видим формат JSON. Далее нашли js файл.
![](https://i.imgur.com/7AgOMXG.png)

![](https://i.imgur.com/IpP5Kyn.png)

Проанализировав ее, сформирую запрос;
![](https://i.imgur.com/6w3mARL.png)

Результат;
![](https://i.imgur.com/xNgX7H9.png)


### Часть 3. CSRF

3.1 Функция изменения электронной почты уязвима.

Войдем в аккаунт;
![](https://i.imgur.com/kez9Bc6.png)

Обновим email аккаунт;
![](https://i.imgur.com/uYK9Pzw.png)

Нашли запрос на смену email в burp;
![](https://i.imgur.com/ubv8NEV.png)

Можем поменять email;
![](https://i.imgur.com/LNhoAQl.png)

Теперь перейдем на exploit сервер;
![](https://i.imgur.com/d0P8nbh.png)

Впишем скрипт, имитирующим замену email;
![](https://i.imgur.com/SrXnRQf.png)

email поменялся;
![](https://i.imgur.com/K2uj6Gp.png)

Теперь можно отправить эксплоит жертве и выполнить задание;
![](https://i.imgur.com/9GkuEB4.png)

![](https://i.imgur.com/wqHnaCo.png)

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

Заходим в аккаунт;
![](https://i.imgur.com/hDwVv60.png)

Перехватим смену email;
![](https://i.imgur.com/gftbbQu.png)

Присутствует csrf токен;
![](https://i.imgur.com/5F8we2x.png)

Мы передаем данные, используется метод POST. Мы можем попробывать поменять метод на GET и посмотреть, что из этого выйдет;
![](https://i.imgur.com/4DeIP7Z.png)

Код 200;
![](https://i.imgur.com/f6TZWaW.png)

Поменялся email;
![](https://i.imgur.com/5Qe9qO6.png)

А если удалить csrf токен? Будет ли email изменен?
![](https://i.imgur.com/wjpbrYP.png)

Да, email поменялся;
![](https://i.imgur.com/pCN2tse.png)

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

Теперь вставим скрипт в exploit сервер;
![](https://i.imgur.com/GR37N4N.png)

Email поменялся;
![](https://i.imgur.com/Xim6xyq.png)

Попробуем метод POST в скрипте;
![](https://i.imgur.com/Q0HhQMu.png)

Не получается;
![](https://i.imgur.com/0QoyzX5.png)

Убедились, что можно поменять метод и обойти защиту csrf токеном. Теперь отправим эксплоит жертве, чтобы выполнить задание;
![](https://i.imgur.com/EdEthk8.png)

### Часть 4. SSRF

4.1 Функция извлекает данные из внутренней системы;

Перехватываем запрос;
![](https://i.imgur.com/7aeAGno.png)

В перехваченном Request присутствует такой параметр;
![](https://i.imgur.com/CFPUf4h.png)

Вот ответ;
![](https://i.imgur.com/watbLvq.png)

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

А если поменять этот параметр, к примеру, на localhost? Давайте попробуем;
![](https://i.imgur.com/JkraTpt.png)

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

Дописали путь до admin;
![](https://i.imgur.com/H2a45J9.png)

К примеру, чтобы удалить пользователя, необходимо сформировать запрос по этому пути;
![](https://i.imgur.com/GuoKB4Q.png)

Удалили пользователя;
![](https://i.imgur.com/cHMu8gi.png)

У нас больше нет carlos;
![](https://i.imgur.com/GxgOJLM.png)

Задание выполнено!
![](https://i.imgur.com/aRndlXw.png)

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

Перехватили запрос;
![](https://i.imgur.com/DaV9mCA.png)

Вот так он выглядит, раскодировали;
![](https://i.imgur.com/2QpVmts.png)

А так выглядит переход к следующему продукту;
![](https://i.imgur.com/BnlKgFg.png)

Так выглядит ответ при проверке количества;
![](https://i.imgur.com/L4m8bNz.png)

На Localhost обратиться не получается;
![](https://i.imgur.com/bEXP2t7.png)

Посмотрим другой запрос, может там есть уязвимое место?
![](https://i.imgur.com/bJSwKr3.png)

Строчка с параметром path возможно уязвима, попробуем оттуда обратиться к localhost;
![](https://i.imgur.com/LHVYiRW.png)

Код 302. Теперь попробуем скопировать этот путь в предыдущий запрос;
![](https://i.imgur.com/wjo0Wdo.png)

Админ панель у нас в руках, теперь найдем путь для удаления carlos, но для начала зайдем в админ панель;
![](https://i.imgur.com/NCs8a96.png)

Видим ссылку на удаление Carlos;
![](https://i.imgur.com/GXoKTGy.png)

Удалили;
![](https://i.imgur.com/faSN5vN.png)

Задание выполнено;
![](https://i.imgur.com/5Y2ofrA.png)

### Часть 5. RCE

5.1 Внедрение команд ОС;

Перехватили запрос;
![](https://i.imgur.com/79eqUnz.png)

Анализируем;
![](https://i.imgur.com/FFKCaWs.png)

Добавляем известную нам команду и закодируем ее;
![](https://i.imgur.com/2PnNuOq.png)

Результат;
![](https://i.imgur.com/3MkCYjB.png)

**peter-dVKVwf**


### Часть 6. Path traversal

6.1 Обход пути (вариант 1);

Для начала добавим в фильтрацию image;
![](https://i.imgur.com/9Wvrde5.png)

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

Такой ответ image получаем;
![](https://i.imgur.com/IdXfAAh.png)

Отправим этот запрос в Repeater;
![](https://i.imgur.com/ZxwNCJP.png)

filename=8.jpg указывает на путь к картинке, значит туда можно записать путь к определенной директории. Укажем свой путь;
![](https://i.imgur.com/UY9QYBQ.png)

Задание выполнено;
![](https://i.imgur.com/eC3QFGi.png)

6.2 Обход пути (вариант 2);

Перехватываем запрос как в прошлый раз, теперь указываем путь таким образом;
![](https://i.imgur.com/aAtIO9W.png)

Вначале попытался указать подобный путь `../../../...../etc/passwd`, но попытка блокировалась, тогда указал так `/etc/passwd` обошел блокировку, заработало!

### Часть 7. Скриншоты выполненный лабораторный работ на PortSwigger

Скриншоты выполненных Лабораторных работ ниже.

![](https://i.imgur.com/fH0pIx4.png)

![](https://i.imgur.com/4uEsb4A.png)

![](https://i.imgur.com/mv3w3UN.png)

![](https://i.imgur.com/TtYw7Eo.png)

![](https://i.imgur.com/VNjZT8H.png)

![](https://i.imgur.com/rNwxmnz.png)

![](https://i.imgur.com/YURWvFF.png)

![](https://i.imgur.com/eCEP0Lj.png)

![](https://i.imgur.com/BUnUEN6.png)

![](https://i.imgur.com/gdS9HZe.png)

![](https://i.imgur.com/KD3UTuq.png)

![](https://i.imgur.com/LZxxrcs.png)

![](https://i.imgur.com/uibM6sj.png)

![](https://i.imgur.com/YRHvdi4.png)

![](https://i.imgur.com/9wDDh1G.png)

![](https://i.imgur.com/4NuOpO7.png)

![](https://i.imgur.com/LWvYTUI.png)

![](https://i.imgur.com/sMWaDrX.png)

![](https://i.imgur.com/MZhNWVB.png)

![](https://i.imgur.com/n4sEZ3T.png)

![](https://i.imgur.com/rvyD60o.png)

![](https://i.imgur.com/hC8T5Xe.png)



