# Домашняя работа №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.

Попробуем выполнить несколько пройстейших типовых запросов прямо в адресную строку.

Один из них срабатывает. Флаг сдан.
2) Задача: SQL injection vulnerability allowing login bypass
Открываем задачу и видим, что нам доступна форма авторизации.

Попробуем авторизоваться. Безрезультатно.
Попробуем реализовать простую уязвимость добавив после логина кавычки для проверки уязвимости.

Сервер вернул ошибку, вероятно, он имеет уявзимость к SQLi.
Повторим запрос, добавив комментарий.

Флаг принят.
3) Задача: SQL injection UNION attack, determining the number of columns returned by the query
По описанию задачи, можно сделать вывод, что нам необходимо с помощью запросу узнать количество столбцов в таблице. Для решения будем использовать Burp. Переходим к задаче и открываем её в Burp (по описанию сразу открываем одну из категорий).

Добавляем конструкцию UNION к запросу.

Видим, что сервис уязвим, необходимо лишь найти количество столбцов. Добавляем по одному и проверяем ответ сервера.

Обнаруживаем, что их 3.
4) Задача: SQL injection UNION attack, finding a column containing text
Данная задача очень похожа на предыдущую. Берем предыдущий запрос и, судя по описанию, нам нужно найти столбец содержащий строки. По очереди будем добавлять вместо NULL, строчные значения.

В итоге найдя в каком столбце строки, уже в браузере подставим нужный текст.
5) Задача: SQL injection UNION attack, retrieving data from other tables
Обращаемся к описанию задачи, нам нужно используя предыдущий пример, найти юзеров и их пароли. Попробуем сделать это. Вначале, я попробую передать один столбец.

Получаем список пользователей. Добавим еще один столбец с паролями.

Авторизуемся под админом, получаем флаг.
6) Задача: SQL injection UNION attack, retrieving multiple values in a single column
Снова смотрим описание задачи, необходимо выполнить тоже самое, что и в предыдущей задаче, но объединить значения в один столбец, так как только в одном столбце используется тип данных `string`. Для этого смотрим в cheat sheet от portswigger.
На всякий случай проверяем сначало логины.

Теперь используем конкатенацию из мануала.

Находим нужный пароль, сдаем флаг.
7) Задача: SQL injection attack, querying the database type and version on Oracle
По описанию задачи, нам нужно узнать версию Oracle на используемом сайте с помощью уязвимости SQLi.
Открываем ресурс через burp и как мы уже делали ранее проверяем string столбцы.

Оба столбца подходят, подставим в один из них нужный нам запрос из примера в cheat sheet.

Задача выполнена.
8) Задача: SQL injection attack, querying the database type and version on MySQL and Microsoft
В данной задаче нужно выполнить аналогичные действия, но с СУБД Microsoft и Mysql.
Запускаем задачу и как в предыдущей задаче проверяем поля string, но только для соответствующих СУБД.

Теперь же проверяем версию.

9) Задача: SQL injection attack, listing the database contents on non-Oracle databases
По описанию задачи необходимо найти логин и пароль администратора выполняя поочередно необходимые запросы для этого. Начнем как обычно с определения столбца string.

Посмотрим пример запроса в cheat sheet и используем запрос оттуда для опеределения имя таблицы.

Сразу найдем нужную таблицу и теперь необходимо определить её содержание.

Получив название столбцов составляем запрос на получение их содержимого.

Заходим под паролем админа и сдаем флаг.
10) SQL injection attack, listing the database contents on Oracle
В данной задаче выполняем все аналогичные действия как в предыдущей задаче, но в cheat sheet используем запросы для oracle.




11) Задача: Blind SQL injection with conditional responses
Переходим к новому типу заданий "слепые" SQLi. Данные инъекции не показывают результат в явном виде.
Итак, открываем первое задание такого типа и поищем, где мы можем увидеть выполняется инъекция или нет. Открыв любую из страниц, видим, что появляется приветствие. Проверим его как триггер с помощью Burp. В запросе видим необычную Cookie - TrackingId, попробуем добавить к нему комментарий.

Приветствие пропало, делаем вывод, что имеется уязвимость SQLi.
Попробуем проверить запрос, который является истинным для проверки ответа.

Видим, что ответ приходит, мы нашли возможность проверять запрос. Нам нужно найти учетную запись, попробуем еще один запрос для поиска текстовых значений и сразу попробуем проверить есть ли таблица с пользователями.

Ответ возращается значит запрос отрабатывает.
Попробуем извлечь найти, есть ли в данной таблице учетная запись администратора.

Как видим, такая учетка есть.
Попробуем определить количество знаков в пароле данного пользователя.

Перебрав количество, обнаруживаем что пароль 20 символов.
Для подбора пароля будем использовать intruder и искать букву в каждой позиции пароля.

Перебирая каждый символ мы получили исходный пароль. Авторизуемся под админом.

Задача выполнена.
----
Также, выполним хотя бы одно задание с площадки root-me.
1) Задача: SQL injection - Authentication
Судя по всему такого вида задача нам встречалась на portswigger. Попробуем сразу передать в логин простую инъекцию `admin'--`.

Нам сразу выдается приветствие. Но не видно ключа. Попробуем вытащить из формы.

Сдаем ключ.