# Домашняя работа №4 (SQL Injection на portswigger и root me) ###### tags: `Домашние задания Web Application Penetration Testing` 1) Задача: Lab: SQL injection vulnerability in WHERE clause allowing retrieval of hidden data Необходимо выяснить имеется ли на ресурсе уязвимость. Откровем раздел из описания Gifts. ![](https://i.imgur.com/GlZxB7P.png) Попробуем выполнить несколько пройстейших типовых запросов прямо в адресную строку. ![](https://i.imgur.com/ozElMty.png) Один из них срабатывает. Флаг сдан. 2) Задача: SQL injection vulnerability allowing login bypass Открываем задачу и видим, что нам доступна форма авторизации. ![](https://i.imgur.com/dBjPGJw.png) Попробуем авторизоваться. Безрезультатно. Попробуем реализовать простую уязвимость добавив после логина кавычки для проверки уязвимости. ![](https://i.imgur.com/UpLswaW.png) Сервер вернул ошибку, вероятно, он имеет уявзимость к SQLi. Повторим запрос, добавив комментарий. ![](https://i.imgur.com/z6eMo5q.png) Флаг принят. 3) Задача: SQL injection UNION attack, determining the number of columns returned by the query По описанию задачи, можно сделать вывод, что нам необходимо с помощью запросу узнать количество столбцов в таблице. Для решения будем использовать Burp. Переходим к задаче и открываем её в Burp (по описанию сразу открываем одну из категорий). ![](https://i.imgur.com/Vt4GS97.png) Добавляем конструкцию UNION к запросу. ![](https://i.imgur.com/bpVNpUt.png) Видим, что сервис уязвим, необходимо лишь найти количество столбцов. Добавляем по одному и проверяем ответ сервера. ![](https://i.imgur.com/AX3LQ7r.png) Обнаруживаем, что их 3. 4) Задача: SQL injection UNION attack, finding a column containing text Данная задача очень похожа на предыдущую. Берем предыдущий запрос и, судя по описанию, нам нужно найти столбец содержащий строки. По очереди будем добавлять вместо NULL, строчные значения. ![](https://i.imgur.com/2KMBaud.png) В итоге найдя в каком столбце строки, уже в браузере подставим нужный текст. 5) Задача: SQL injection UNION attack, retrieving data from other tables Обращаемся к описанию задачи, нам нужно используя предыдущий пример, найти юзеров и их пароли. Попробуем сделать это. Вначале, я попробую передать один столбец. ![](https://i.imgur.com/xY3DjGr.png) Получаем список пользователей. Добавим еще один столбец с паролями. ![](https://i.imgur.com/P6NE87e.png) Авторизуемся под админом, получаем флаг. 6) Задача: SQL injection UNION attack, retrieving multiple values in a single column Снова смотрим описание задачи, необходимо выполнить тоже самое, что и в предыдущей задаче, но объединить значения в один столбец, так как только в одном столбце используется тип данных `string`. Для этого смотрим в cheat sheet от portswigger. На всякий случай проверяем сначало логины. ![](https://i.imgur.com/fc5gEmm.png) Теперь используем конкатенацию из мануала. ![](https://i.imgur.com/ylrkSK1.png) Находим нужный пароль, сдаем флаг. 7) Задача: SQL injection attack, querying the database type and version on Oracle По описанию задачи, нам нужно узнать версию Oracle на используемом сайте с помощью уязвимости SQLi. Открываем ресурс через burp и как мы уже делали ранее проверяем string столбцы. ![](https://i.imgur.com/18ZlNUg.png) Оба столбца подходят, подставим в один из них нужный нам запрос из примера в cheat sheet. ![](https://i.imgur.com/PwXgrSX.png) Задача выполнена. 8) Задача: SQL injection attack, querying the database type and version on MySQL and Microsoft В данной задаче нужно выполнить аналогичные действия, но с СУБД Microsoft и Mysql. Запускаем задачу и как в предыдущей задаче проверяем поля string, но только для соответствующих СУБД. ![](https://i.imgur.com/lDarhoN.png) Теперь же проверяем версию. ![](https://i.imgur.com/QwWD7DU.png) 9) Задача: SQL injection attack, listing the database contents on non-Oracle databases По описанию задачи необходимо найти логин и пароль администратора выполняя поочередно необходимые запросы для этого. Начнем как обычно с определения столбца string. ![](https://i.imgur.com/wGM4j5O.png) Посмотрим пример запроса в cheat sheet и используем запрос оттуда для опеределения имя таблицы. ![](https://i.imgur.com/2Cdb6xj.png) Сразу найдем нужную таблицу и теперь необходимо определить её содержание. ![](https://i.imgur.com/zRCo9XH.png) Получив название столбцов составляем запрос на получение их содержимого. ![](https://i.imgur.com/N6Lvkrf.png) Заходим под паролем админа и сдаем флаг. 10) SQL injection attack, listing the database contents on Oracle В данной задаче выполняем все аналогичные действия как в предыдущей задаче, но в cheat sheet используем запросы для oracle. ![](https://i.imgur.com/3TwGGyk.png) ![](https://i.imgur.com/e6DAxTg.png) ![](https://i.imgur.com/RF5Miw4.png) ![](https://i.imgur.com/qY8RHuv.png) 11) Задача: Blind SQL injection with conditional responses Переходим к новому типу заданий "слепые" SQLi. Данные инъекции не показывают результат в явном виде. Итак, открываем первое задание такого типа и поищем, где мы можем увидеть выполняется инъекция или нет. Открыв любую из страниц, видим, что появляется приветствие. Проверим его как триггер с помощью Burp. В запросе видим необычную Cookie - TrackingId, попробуем добавить к нему комментарий. ![](https://i.imgur.com/mgYWcSk.png) Приветствие пропало, делаем вывод, что имеется уязвимость SQLi. Попробуем проверить запрос, который является истинным для проверки ответа. ![](https://i.imgur.com/k2uAUcQ.png) Видим, что ответ приходит, мы нашли возможность проверять запрос. Нам нужно найти учетную запись, попробуем еще один запрос для поиска текстовых значений и сразу попробуем проверить есть ли таблица с пользователями. ![](https://i.imgur.com/17ywtsu.png) Ответ возращается значит запрос отрабатывает. Попробуем извлечь найти, есть ли в данной таблице учетная запись администратора. ![](https://i.imgur.com/F6xCcfk.png) Как видим, такая учетка есть. Попробуем определить количество знаков в пароле данного пользователя. ![](https://i.imgur.com/lrKfLeX.png) Перебрав количество, обнаруживаем что пароль 20 символов. Для подбора пароля будем использовать intruder и искать букву в каждой позиции пароля. ![](https://i.imgur.com/BE0uA9g.png) Перебирая каждый символ мы получили исходный пароль. Авторизуемся под админом. ![](https://i.imgur.com/3x7daQ4.png) Задача выполнена. ---- Также, выполним хотя бы одно задание с площадки root-me. 1) Задача: SQL injection - Authentication Судя по всему такого вида задача нам встречалась на portswigger. Попробуем сразу передать в логин простую инъекцию `admin'--`. ![](https://i.imgur.com/k71neJm.png) Нам сразу выдается приветствие. Но не видно ключа. Попробуем вытащить из формы. ![](https://i.imgur.com/esz23GK.png) Сдаем ключ.