###### 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)