# Катенин Владимир - WEB Basic. Занятие 3. Основные атаки и паттерны [toc] ## SQL-injection уязвимости ### **Lab: SQL injection vulnerability allowing login bypass** Открываем лабораторную работу ![](https://i.imgur.com/brlpzPj.jpg) Открываем вкладку **My account** и вводим логин `administrator` и случайный пароль ![](https://i.imgur.com/QMcSgNT.jpg) Добавляем `'--` после логина ![](https://i.imgur.com/470sc9q.jpg) Отправляем запрос с помощью `Forward` **Успешная авторизация** ![](https://i.imgur.com/FzEK11g.jpg) --- ### **Lab: SQL injection vulnerability in WHERE clause allowing retrieval of hidden data** Открываем лабораторную работу, включаем intercept и выбираем категорию ![](https://i.imgur.com/mAqyHhd.jpg) Вместо категории вставляем `'+OR+1=1--` ![](https://i.imgur.com/YQTiD8A.jpg) Отправляем запрос и видим скрытые товары ![](https://i.imgur.com/6hxoOrn.jpg) --- ### **Lab: SQL injection UNION attack, retrieving data from other tables** Открываем лабораторную работу, включаем intercept и выбираем категорию и изменяем значение `category` на `'+UNION+SELECT+'abc','def'--` ![](https://i.imgur.com/XAOAy29.jpg) Убедимся, что запрос возвращает две колонки ![](https://i.imgur.com/x3hS0oz.jpg) Всё верно, получим таблицу `users` с помощью `'+UNION+SELECT+username,+password+FROM+users--` ![](https://i.imgur.com/dOnmqq5.jpg) Видим таблицу с пользователями ![](https://i.imgur.com/GNRcQGH.jpg) Пробуем авторизоваться под логином администратора ![](https://i.imgur.com/1GstjuD.jpg) Успех ![](https://i.imgur.com/rRv1Ynt.jpg) --- ### **Lab: SQL injection attack, querying the database type and version on MySQL and Microsoft** Открываем лабораторную работу, включаем intercept и выбираем категорию и изменяем значение `category` на `'+UNION+SELECT+'abc','def'#` ![](https://i.imgur.com/C3xLPTg.jpg) Убедимся, что запрос возвращает две колонки Всё верно, получим версию БД с помощью `'+UNION+SELECT+@@version,+NULL#` ![](https://i.imgur.com/BMNmsI7.jpg) Успех ![](https://i.imgur.com/aqQl1wy.jpg) --- ## XSS уязвимости ### Lab: Stored XSS into HTML context with nothing encoded Открываем лабораторную работу, переходим в любой пост и пишем в окне с новым комментарием `<script>alert(1)</script>`. Также введем имя и почту в соответствующие поля. ![](https://i.imgur.com/XoTWMIY.jpg) Запостим ![](https://i.imgur.com/APTZJF6.jpg) Нажмём кнопку `Back to blog` ![](https://i.imgur.com/IwiRXqv.jpg) **Скрипт выполнился** --- ### Lab: DOM XSS in document.write sink using source location.search Открываем лабораторную работу, вводим в поисковой строке случайный набор символов ![](https://i.imgur.com/qoB5XAY.jpg) Запрос помещен в тэг `img` ![](https://i.imgur.com/FzTLrz8.jpg) Попробуем вставить в поиск `"><svg onload=alert(1)>` ![](https://i.imgur.com/6kfGE0e.jpg) Скрипт сработал ![](https://i.imgur.com/xdxBgbL.jpg) --- ### Lab: Reflected XSS into a JavaScript string with angle brackets HTML encoded Открываем лабораторную работу, вводим в поисковой строке случайный набор символов ![](https://i.imgur.com/mxVewX6.jpg) Включаем перехват запросов, делаем поиск в браузере и отправляем данные в Repeater ![](https://i.imgur.com/vobK1A7.jpg) Видим, что искомая строка помещена в JS строку ![](https://i.imgur.com/nt2ffpU.jpg) Теперь вводим `'-alert(1)-'` в поисковую строку и нажимаем "Поиск" ![](https://i.imgur.com/03ESoLU.jpg) Скрипт сработал ![](https://i.imgur.com/8LVpmp2.jpg) --- ### Lab: Reflected DOM XSS Открываем лабораторную работу, вводим в поисковой строке случайный набор символов ![](https://i.imgur.com/aHFvqcR.jpg) Включаем перехват запросов, делаем поиск в браузере и отправляем данные ![](https://i.imgur.com/LSlbQkh.jpg) Находим поисковый запрос в HTTP History с методом GET, видим, что отработка запроса происходит в файле searchResult.js Откроем этот файл, видим функцию небезопасную eval() ![](https://i.imgur.com/zPlJqpK.jpg) Попробуем ввести в поиск `\"-alert(1)}//` ![](https://i.imgur.com/6UzSD6S.jpg) Скрипт сработал ![](https://i.imgur.com/oh4EuW8.jpg) --- ## CSRF ### Lab: CSRF vulnerability with no defenses Открываем лабораторную работу, входим в данный условием задачи аккаунт `wiener:peter` ![](https://i.imgur.com/YjZwFIi.jpg) Включаем перехват запросов и отправляем запрос на смену почты ![](https://i.imgur.com/9lifDhs.jpg) Переходим в HTTP History и перехватываем запрос методом POST, копируем URL ![](https://i.imgur.com/X9jzQk4.jpg) Переходим на эксплойт-сервер, пишем скрипт, вставляя наш URL ![](https://i.imgur.com/XDThOAr.jpg) Скрипт сработал ![](https://i.imgur.com/noRfV1m.jpg) --- ### Lab: CSRF where token validation depends on request method Открываем лабораторную работу, входим в данный условием задачи аккаунт `wiener:peter` ![](https://i.imgur.com/YJgDnnH.jpg) Отправим запрос на смену почтового адреса ![](https://i.imgur.com/FTAueIN.jpg) Переходим в HTTP History и перехватываем запрос методом POST, копируем URL Отправляем в Repeater и подменяем `csrf` параметр ![](https://i.imgur.com/HFs0XCI.jpg) Отправляем запрос, видим, что он блокируется ![](https://i.imgur.com/VN6sUP6.jpg) Поменяем метод с POST на GET ![](https://i.imgur.com/rslwM8G.jpg) Пишем эксплойт и отправляем жертве ![](https://i.imgur.com/d04cAyu.jpg) Скрипт сработал ![](https://i.imgur.com/SW7B0j0.jpg) --- ## SSRF ### Lab: Basic SSRF against the local server Открываем лабораторную работу, видим, что не можем напрямую попасть в админ-панель ![](https://i.imgur.com/tkJTtVd.jpg) Заходим в любой продукт, нажимаем `check stock`, перехватываем запрос ![](https://i.imgur.com/WXaA6CP.jpg) Отправляем в Repeater и видим значение `stockApi` ![](https://i.imgur.com/DKB3NzY.jpg) Меняем `stockApi` на `http://localhost/admin` и отправляем запрос Видим список пользователей ![](https://i.imgur.com/L9m4s29.jpg) Попробуем удалить пользователя `carlos`, изменив `stockApi` на `http://localhost/admin/delete?username=carlos` ![](https://i.imgur.com/M1d1NRG.jpg) Успех ![](https://i.imgur.com/OEFwmPi.jpg) --- ### Lab: SSRF with filter bypass via open redirection vulnerability Открываем лабораторную работу, заходим в любой продукт, нажимаем `check stock`, перехватываем запрос ![](https://i.imgur.com/BxF2c31.jpg) Пробуем зайти в админ-панель через `stockApi` `http://192.168.0.12:8080/admin` ![](https://i.imgur.com/urQOuRj.jpg) Не получилось ![](https://i.imgur.com/qlzSQPA.jpg) При нажатии на next product появляется строчка с path ![](https://i.imgur.com/oAhqXNt.jpg) Переходим на страницу ![](https://i.imgur.com/3SzrZ8Q.jpg) Попробуем подменить `stockApi` на `/product/nextProduct?path=http://192.168.0.12:8080/admin` ![](https://i.imgur.com/HYPRQIF.jpg) Видим таблицу пользователей ![](https://i.imgur.com/MIgVz3b.jpg) Теперь удалим пользователя `carlos`, изменив `stockApi` на `/product/nextProduct?path=http://192.168.0.12:8080/admin/delete?username=carlos` ![](https://i.imgur.com/L65qdHk.jpg) Пользователь удален ![](https://i.imgur.com/pwAcd42.jpg) --- ## RCE ### Lab: OS command injection, simple case Открываем лабораторную работу, заходим в любой продукт, нажимаем `check stock`, перехватываем запрос ![](https://i.imgur.com/YnXI8gt.jpg) Изменим `storeID` на `1|whoami` ![](https://i.imgur.com/7JaZIii.jpg) Видим имя пользователя ![](https://i.imgur.com/UCh6ZS6.jpg) --- ## Path traversal ### Lab: File path traversal, simple case Открываем лабораторную работу, включаем перехват, заходим в любой продукт ![](https://i.imgur.com/vrDvRv0.jpg) Нажмем `Forward` и увидим, что страница получает картинку по GET запросу ![](https://i.imgur.com/2zQ2oUw.jpg) Изменим параметр `filename` на `../../../etc/passwd` ![](https://i.imgur.com/qPArUZd.jpg) Видим Response в HTTP History на наш запрос ![](https://i.imgur.com/S7jdR3C.jpg) --- ### Lab: File path traversal, traversal sequences blocked with absolute path bypass Открываем лабораторную работу, включаем перехват, заходим в любой продукт ![](https://i.imgur.com/7bJ5ZHP.jpg) Нажмем `Forward` и увидим, что страница получает картинку по GET запросу ![](https://i.imgur.com/saGGSF0.jpg) Изменим параметр `filename` на `/etc/passwd` ![](https://i.imgur.com/CsSjSDY.jpg) Видим Response в HTTP History на наш запрос ![](https://i.imgur.com/OxClCY2.jpg) --- ## Прогресс ![](https://i.imgur.com/i46AbW3.jpg)