# Гришанов Матвей Сергеевич – WEB Basic Практическая работа 3. Основные атаки и паттерны [toc] --- ## **SQL-injection уязвимости:** ### SQL injection vulnerability allowing login bypass (Уязвимость SQL-инъекции, позволяющая обойти вход в систему) Для реализации атаки на эту уязвимость необходимо использовать утилиту **Burp Suite**. Используя встроенное окно браузера в **Burp Suite**, мы можем перехватывать данные логина и пароля. После скачивания приложения и его установки -- открываем встроенный браузер и заходим на сайт лабораторной работы. :::info :information_source: Предварительно необходимо зарегистрироваться на сайте и залогиниться! ::: ![](https://i.imgur.com/WmrVoCG.jpg) --- Далее переходим в **My account**. Там мы вводим логин **administrator** и любой пароль, но перед нажатием кнопки **Log in** -- включаем в **Burp Suite** режим **Intercept** (Перехват). ![](https://i.imgur.com/euMggRk.png) --- Нажимаем кнопку **Log in** и получаем перехваченные данные. ![](https://i.imgur.com/3j6A00F.png) --- Для того, чтобы получить доступ к пользователю **administrator** нам необходимо изменить эти данные (Добавить после слова **administrator** символы: `'--` ). ![](https://i.imgur.com/N7sDkdj.png) --- После этого нажимаем кнопку **Forward** в **Burp Suite**. ![](https://i.imgur.com/mA9pHIt.png) --- :::success :star: Успешно залогинились под пользователем **administrator**! ::: ![](https://i.imgur.com/JEvVFsi.png) --- ### SQL injection vulnerability in WHERE clause allowing retrieval of hidden data (Уязвимость SQL-инъекций в предложении WHERE, позволяющая извлекать скрытые данные) Данная уязвимость состоит в том, что через список категорий на сайте мы можем совершить атаку с внедрением таким образом, что сайт начнёт отображать сведения обо всех продуктах в любой категории, как выпущенных, так и не выпущенных. :::info :information_source: Пример SQL-запроса, который формируется при выборе категории на сайте: ``` SELECT * FROM products WHERE category = 'Gifts' AND released = 1 ``` ::: Первым делом переходим на сайт. ![](https://i.imgur.com/ESheqKy.jpg) --- Затем включаем режим перехвата и выбираем любую категорию. ![](https://i.imgur.com/S3eoDZB.jpg) --- Теперь в полученных данных нам необходимо изменить значение параметра category на `'+OR+1=1--` (В моём случае **Gifts** заменяется на этот параметр). ![](https://i.imgur.com/PEuz7V6.jpg) --- Далее жмём кнопку **Forward**. ![](https://i.imgur.com/CJaRr4m.png) --- :::success :star: Успешно получаем полный список товаров! ::: ![](https://i.imgur.com/hP10HT5.jpg) --- ### SQL injection UNION attack, retrieving data from other tables (SQL-инъекция UNION-атака, получение данных из других таблиц) Данная уязвимость основывается на фильтре категорий. Используя атаку UNION, мы можем извлекать данные из других таблиц. Наша атака формируется на использовании приёмов, которые были применены в предыдущих работах. Зайдя на сайт, мы включаем режим перехвата в **Burp Suite** ![](https://i.imgur.com/EEgfoa2.png) --- Далее выбираем категорию и убеждаемся в том, что запрос возвращает два столбца, каждый из которых содержит текст. ![](https://i.imgur.com/H8xQzG1.png) --- Далее используем соответствующий **payload** для получения содержимого таблицы пользователей. :::info :information_source: Используемый **payload**: ``` '+UNION+SELECT+username,+password+FROM+users-- ``` ::: ![](https://i.imgur.com/ioavX7B.png) --- После этого нажимаем кнопку **Forward** в **Burp Suite**. ![](https://i.imgur.com/n9yUJhj.png) --- Получаем таблицу **users**, где указаны пользователи, а также их пароли. ![](https://i.imgur.com/6GkvaQy.png) --- Далее переходим в раздел **My account** и логинимся, используя полученные данные: ![](https://i.imgur.com/rpBGAAY.png) ![](https://i.imgur.com/yz7YZ04.png) --- :::success :star: Мы успешно получили доступ к пользователю! ::: ![](https://i.imgur.com/bUsae9k.png) --- ### SQL injection attack, querying the database type and version on MySQL and Microsoft (Запрос типа и версии базы данных на MySQL и Microsoft) Данная уязвимость также содержится в фильтре категорий продукции. Используя **UNION**, мы можем получить версию базы данных. Заходим на сайт для проведения атаки. ![](https://i.imgur.com/lvqlnO7.png) --- Включаем режим перехвата и нажимаем на любую из категорий продукции на сайте. Далее используем payload, чтобы отобразить текущую версию базы данных. :::info :information_source: Использованный payload: ``` '+UNION+SELECT+@@version,+NULL# ``` ::: ![](https://i.imgur.com/mGDlXaQ.png) --- После этого нажимаем кнопку **Forward** в **Burp Suite**. ![](https://i.imgur.com/Nd908Nd.png) --- :::success :star: Мы успешно получили информацию о версии базы данных! ::: ![](https://i.imgur.com/NcanVW7.png) --- ## **XSS уязвимости:** ### Stored XSS into HTML context with nothing encoded (Сохраненный XSS в контексте HTML без каких-либо кодировок) Уязвимость данной работы заключается в межсайтовом скриптинге функции комментирования. Для атаки данной уязвимости необходимо отправить комментарий, который вызывает функцию оповещения при просмотре сообщения в блоге. Заходим на сайт и выбираем любой из постов. ![](https://i.imgur.com/5li7VNM.jpg) --- Переходим к комментариям. ![](https://i.imgur.com/XLlh6zY.png) Далее необходимо оставить комментарий со скриптом. :::info :information_source: Содержание комментария: ``` <script>alert(1)</script> ``` ::: Также указываем ==отправителя, email и веб-сайт==. ![](https://i.imgur.com/aEciTRe.png) --- Отправляем комментарий! ![](https://i.imgur.com/XrHXeda.png) --- :::success :star: Скрипт успешно выполнился! ::: ![](https://i.imgur.com/TUSYp6W.png) --- ### DOM XSS in `document.write` sink using source `location.search` (Уязвимость межсайтового скриптинга на основе модели DOM XSS в функции отслеживания поисковых запросов) Здесь используется функция **JavaScript document.write**, которая записывает данные на страницу. Данная функция вызывается с данными из **location.search**. Этими данными можно управлять с помощью URL-адреса веб-сайта. Первым делом заходим на сайт, который будет подвержен атаке. ![](https://i.imgur.com/ScEzRQI.png) --- Далее необходимо ввести случайную буквенно-цифровую строку в поле поиска на сайте. ![](https://i.imgur.com/uZJGGyF.png) --- Выполняем поиск. ![](https://i.imgur.com/S733AY0.png) --- Случайная строка была помещена в атрибут ==`img src`==. ![](https://i.imgur.com/CJOg9BU.png) --- Выполняем поиск ещё раз, вставив заранее в строку алерт-функцию ==`"><svg onload=alert(1)>`==. ![](https://i.imgur.com/QDBDN9a.png) --- Функция сработала! ![](https://i.imgur.com/tV3nOUu.png) --- :::success :star: Работа успешно выполнена! ::: ![](https://i.imgur.com/vwaaXyR.png) --- ### Reflected XSS into a JavaScript string with angle brackets HTML encoded (Отраженный XSS в строку JavaScript с угловыми скобками, закодированный в HTML) В данной работе содержится отраженная уязвимость межсайтового скриптинга в функции отслеживания поисковых запросов, где закодированы угловые скобки. Отражение происходит внутри строки **JavaScript**. Переходим на сайт. ![](https://i.imgur.com/SWBaPBb.png) --- Отправляем случайную буквенно-цифровую строку в поле поиска, затем используем **Burp Suite** для перехвата. ![](https://i.imgur.com/TBkXF2H.png) --- Отправляем поисковый запрос в **Burp Repeater**. ![](https://i.imgur.com/aSAJrAM.png) --- Случайная строка была отражена внутри строки **JavaScript**. ![](https://i.imgur.com/hbEVSBM.png) --- Заменяем ввод следующим **payload'ом**, чтобы выйти из строки **JavaScript** и внедрить предупреждение. :::success :star: Триггер предупреждения сработал. ::: ![](https://i.imgur.com/uoRxnGe.png) --- ### Reflected DOM XSS (Отражение DOM XSS) Эта работа демонстрирует отраженную уязвимость **DOM**. Уязвимости отраженной модели **DOM** возникают, когда приложение на стороне сервера обрабатывает данные из запроса и повторяет данные в ответе. Затем скрипт на странице обрабатывает отраженные данные ==небезопасным способом==, в конечном итоге записывая их в опасный приемник. Заходим на сайт и включаем режим перехвата. В строку поиска вводим ==XSS==. ![](https://i.imgur.com/HuSRTpz.jpg) --- Форвардим запрос. ![](https://i.imgur.com/e4lKqxW.png) --- Замечаем, что строка отражается в ответе **JSON search-results**. ![](https://i.imgur.com/4vbCApB.png) --- Через **Site Map** открываем **searchResult.js** и убеждаемся, что ответ **JSON** используется вызовом функции **eval()**. ![](https://i.imgur.com/Q2fVpGc.png) --- Чтобы выполнить данную лабораторную работу необходимо ввести в строку поиска на сайте определенный запрос. :::info :information_source: Использованный запрос: ``` \"-alert(1)}// ``` ::: ![](https://i.imgur.com/MfU8WaV.png) --- :::success :star: Работа успешно выполнена! ::: ![](https://i.imgur.com/0vE6gII.png) --- ## **CSRF:** ### CSRF vulnerability with no defenses (Уязвимость CSRF без защиты) Атака на данную уязвимость заключается в создании некоторого **HTML-кода**, который использует атаку **CSRF** для изменения адреса электронной почты. Сначала необходимо зайти на сайт, на котором будет происходить атака. ![](https://i.imgur.com/0zojpeD.jpg) --- Заходим в свой аккаунт, используя логин и пароль. :::info :information_source: Данные для входа в аккаунт: login: `wiener` password: `peter` ::: ![](https://i.imgur.com/DQ9mr0X.png) --- Заменяем адрес электронной почты. ![](https://i.imgur.com/KzANJmg.png) --- Находим в **Burp Suite**, используя раздел **HTTP history**, запрос со сменой электронной почты. ![](https://i.imgur.com/8Ft02Ev.png) --- Копируем **URL**. Он будет необходим для создания эксплойта. ![](https://i.imgur.com/cT89ztC.png) --- Переходим в раздел **go to exploit server** на самом сайте. Заполняем поле **Body** в соответствии с шаблоном. После заполнения всех полей нажимаем **Store**. :::info :information_source: Код шаблона: ``` <html> <body> <form method="POST" action="https://0aa7006204882b7bc0a177cc001e008a.web-security-academy.net/my-account/change-email"> <input type="hidden" name="email" value="test1&#64;test&#46;ru" /> <input type="submit" value="Submit request" /> </form> <script> document.forms[0].submit(); </script> </body> </html> ``` ::: ![](https://i.imgur.com/pfcJpuw.png) --- Чтобы проверить **exploit** нажмём на кнопку **View exploit**. В разделе **HTTP history** мы видим, что он сработал. ![](https://i.imgur.com/WtqYJg5.png) --- Можно заметить, что наш адрес электронной почты поменялся на ==test1@test.ru==. ![](https://i.imgur.com/23a0TIb.png) --- Для того, чтобы выполнить работу необходимо доставить **exploit** до жертвы. В меню сервера нажимаем на кнопку **Deliver to victim**. :::success :star: Работа выполнена успешно! ::: ![](https://i.imgur.com/RxR0664.png) --- ### CSRF where token validation depends on request method (CSRF -- проверка токена зависит от метода запроса) Данная атака главным образом состоит в том, чтобы подменить метод запроса. Сменив метод запроса на тот, который не блокируется, мы можем добиться, например, замены адреса электронной почты. Первым делом заходим на сайт, на котором будет проводиться атака. ![](https://i.imgur.com/PIoGzYQ.jpg) --- Далее необходимо залогиниться под нашим пользователем. :::info :information_source: Данные для входа в аккаунт: login: `wiener` password: `peter` ::: ![](https://i.imgur.com/AgbELxh.png) --- Заменяем адрес электронной почты. ![](https://i.imgur.com/lsPQOqL.png) --- Находим запрос, который сигнализировал изменения почты. Его необходимо отправить в **Burp Repeater**. ![](https://i.imgur.com/eyPAMNd.png) ![](https://i.imgur.com/k5c2o8T.png) --- В самом **Burp Repeater** изменяем параметр **csrf** на любой другой и отправляем, нажимая кнопку **Send**. Можно заметить, что токен блокируется. ![](https://i.imgur.com/bOCEec5.png) --- Тогда необходимо заменить метод запроса с **POST** на **GET**. Для этого используем функцию **Change request method**. ![](https://i.imgur.com/vpFDgvF.png) --- Видно, что метод запроса поменялся на **GET**. ![](https://i.imgur.com/zkoUFDj.png) --- А после изменения метода запроса перестал блокироваться токен. ![](https://i.imgur.com/QzqLW8v.png) --- Копируем **URL** запроса **POST** на изменения пароля. Он понадопится нам при написании эксплойта. ![](https://i.imgur.com/8cTuJCM.png) --- Переходим в раздел **go to exploit server** на самом сайте. Заполняем поле **Body** в соответствии с шаблоном. После заполнения всех полей нажимаем **Store**. :::info :information_source: Код шаблона: ``` <html> <body> <form action="https://0a3e0054035f3989c0924da3002c00e6.web-security-academy.net/my-account/change-email"> <input type="hidden" name="email" value="test1&#64;test&#46;ru" /> <input type="hidden" name="csrf" value="1234" /> <input type="submit" value="Submit request" /> </form> <script> document.forms[0].submit(); </script> </body> </html> ``` ::: ![](https://i.imgur.com/qwLJBqs.png) --- Чтобы проверить **exploit** нажмём на кнопку **View exploit**. В разделе **HTTP history** мы видим, что он сработал. ![](https://i.imgur.com/cnjv8q1.png) Можно заметить, что наш адрес электронной почты поменялся на ==test1@test.ru==. ![](https://i.imgur.com/eJKmXas.png) ![](https://i.imgur.com/rAsItoF.png) --- Для того, чтобы выполнить работу необходимо доставить **exploit** до жертвы. В меню сервера нажимаем на кнопку **Deliver to victim**. ![](https://i.imgur.com/Qa5zKbN.png) --- :::success :star: Работа выполнена успешно! ::: ![](https://i.imgur.com/uXp0tjU.png) --- ## **SSRF:** ### Basic SSRF against the local server (Базовый SSRF против локального сервера) Атака в данной работе заключается в извлечении данных через уязвимость в функции проверки запасов. Попытаемся удалить одного из пользователей, используя эту уязвимость. Первым делом заходим на сайт, где будет происходить атака на уязвимость. ![](https://i.imgur.com/44eKguD.jpg) --- Включаем режим перехвата. ![](https://i.imgur.com/4U2bPAI.jpg) --- Заходим на страницу одного из товаров. ![](https://i.imgur.com/UqALQmO.jpg) --- Пробуем проверить запасы этого товара на складе. ![](https://i.imgur.com/tGwhazv.png) --- Получаем запрос, в котором содержится строчка **stockApi**. ![](https://i.imgur.com/apu1QbS.png) --- Изменяем параметр **stockApi** в данном запросе на тот, что отобразит нам интерфейс администратора. :::info :information_source: Используемая строка: ``` http://localhost/admin ``` ::: ![](https://i.imgur.com/j9UKXo4.png) --- Далее необходимо посмотреть **HTML-код** страницы и определить **URL**, который отвечает за удаление пользователей. ![](https://i.imgur.com/PUST1tL.png) --- Необходимый **URL** найден. ![](https://i.imgur.com/N2iUBOS.png) --- Далее мы повторяем запрос с проверкой товара на складе. Однако изменяем параметр **stockApi** на другой. :::info :information_source: Новый параметр: ``` http://localhost/admin/delete?username=carlos ``` ::: ![](https://i.imgur.com/ZPhkW7O.png) --- :::success :star: Пользователь успешно удалён! ::: ![](https://i.imgur.com/ZSz2HG1.png) ![](https://i.imgur.com/e7UYwHG.png) --- ### SSRF with filter bypass via open redirection vulnerability (SSRF с обходом фильтра через открытую уязвимость перенаправления) Атака в данной работе заключается в извлечении данных через уязвимость в функции проверки запасов. Попытаемся удалить одного из пользователей, используя доступ к интерфейсу по адресу `http://192.168.0.12:8080/admin`. Первым делом заходим на сайт, где будет происходить атака на уязвимость. ![](https://i.imgur.com/msMDfMJ.jpg) --- Далее переходим в один из товаров и при попытке проверить его наличие на складе получаем параметр **stockApi**. ![](https://i.imgur.com/jbjtgD0.png) ![](https://i.imgur.com/gKS528B.png) --- Пытаемся сделать запрос к администратору. :::info :information_source: Новый параметр: ``` http://192.168.0.12:8080/admin ``` ::: ![](https://i.imgur.com/wi4hn3r.png) --- Однако не всё так просто. Таким образом не получается открыть меню администратора и снизу выходит ошибка. ![](https://i.imgur.com/jIPZaPn.png) --- Пробуем перейти на следующую страницу и обращаем внимание на **path** параметр. Он является заголовочным и способен привести нас к открытому перенаправлению. ![](https://i.imgur.com/WYf5Ly3.png) --- Пытаемся ещё раз изменить параметр **stockApi**, но на этот раз используем **path**. :::info :information_source: Новый параметр: ``` /product/nextProduct?path=http://192.168.0.12:8080/admin ``` ::: ![](https://i.imgur.com/HVTFzmV.jpg) ![](https://i.imgur.com/j9JKECU.png) --- Операция проходит успешно! Мы смогли получить доступ к меню администратора. ![](https://i.imgur.com/T1jT6GE.png) --- Далее необходимо посмотреть **HTML-код** страницы и определить **URL**, который отвечает за удаление пользователей. ![](https://i.imgur.com/ZF1NMWM.png) --- Попробуем таким способом удалить пользователя **carlos**. :::info :information_source: Новый параметр: ``` /product/nextProduct?path=http://192.168.0.12:8080/admin/delete?username=carlos ``` ::: ![](https://i.imgur.com/IonlKQ1.png) --- :::success :star: Пользователь успешно удалён! ::: ![](https://i.imgur.com/XqlqGvZ.png) ![](https://i.imgur.com/f0Cgyuz.png) --- ## **RCE:** ### OS command injection, simple case (Внедрение команды ОС, простой случай) Суть уязвимости заключается в том, что приложение выполняет команду оболочки, содержащую предоставленные пользователем идентификаторы продуктов и магазинов, и возвращает необработанные выходные данные команды в своем ответе. Заходим на сайт для проведения атаки. ![](https://i.imgur.com/rQdLHJ8.jpg) --- Переходим на страницу одного из товаров. Включаем режим перехвата и проверяем наличие товара. ![](https://i.imgur.com/wyBxO6H.png) --- Получаем доступ к параметру **storeID**. Заменяем значение данного параметра, чтобы получить имя пользователя. :::info :information_source: Новый параметр: ``` 1|whoami ``` ::: ![](https://i.imgur.com/x02xa9z.png) --- Форвардим этот запрос. ![](https://i.imgur.com/OBRyqWq.png) --- :::success :star: Успешно получаем вывод имени пользователя! ::: ![](https://i.imgur.com/WCJnytl.png) --- ## **Path traversal:** ### File path traversal, simple case (Обход пути к файлу, простой случай) Атака заключается в использовании уязвимости обхода пути к файлу при отображении изображений продуктов. Перед началом выполнения работы необходимо в настройках **Proxy-->Intercept Server Responses** поставить галочку около **Intercept responses based on following rules**. ![](https://i.imgur.com/GmXKNvq.png) --- Далее заходим на сайт. ![](https://i.imgur.com/gRa3lVT.jpg) --- Включаем режим перехвата и выбираем один из товаров. ![](https://i.imgur.com/4ipymEj.png) --- Изменяем параметр **filename**. :::info :information_source: Новый параметр: ``` ../../../etc/passwd ``` ::: ![](https://i.imgur.com/uNWdtG4.png) --- ![](https://i.imgur.com/4AyOCLb.png) Убеждаемся, что в ответе есть содержимое файла `/etc/passwd`. ![](https://i.imgur.com/vj3g3yc.png) :::success :star: Задача выполнена! ::: ![](https://i.imgur.com/HMD0bic.png) --- ### File path traversal, traversal sequences blocked with absolute path bypass (Обход пути к файлу, последовательности обхода заблокированы с обходом абсолютного пути) Суть уязвимости заключается в том, что приложение блокирует последовательности обхода, но обрабатывает предоставленное имя файла как относящееся к рабочему каталогу по умолчанию. Перед началом выполнения работы необходимо в настройках **Proxy-->Intercept Server Responses** поставить галочку около **Intercept responses based on following rules**. ![](https://i.imgur.com/kxFFpgK.png) --- Включаем режим перехвата и выбираем один из товаров. ![](https://i.imgur.com/zzGUp5f.jpg) --- Изменяем параметр **filename**. :::info :information_source: Новый параметр: ``` /etc/passwd ``` ::: ![](https://i.imgur.com/NTDNEkb.png) ![](https://i.imgur.com/shwlR1c.png) --- Убеждаемся, что в ответе есть содержимое файла `/etc/passwd`. ![](https://i.imgur.com/BiahJZn.png) --- :::success :star: Задача выполнена! ::: ![](https://i.imgur.com/049URHX.png) --- ## Learning Progress ![](https://i.imgur.com/tp2piK3.png) ---