Данный пост будет носить практический характер. В нём мы решим очередное задание на эксплуатацию уязвимостей веб-приложений в контексте заданий CTF.
Задания будут взяты с известного сайта с различными задачами (CTF и не только) - https://www.root-me.org/
Будем решать задачи из категории: Web - Server
Прямая ссылка: https://www.root-me.org/en/Challenges/Web-Server/
Разберём решение задания "SQL Injection - Routed". Очередное задание на разновидность SQL-инъекций. Как всегда посмотрим описание.
Как и всегда нам нужно найти пароль администратора. На этот раз у нас Routed SQLi, о ней не особо слышно в контексте баг-баунти и поиска уязвимостей, однако данного рода SQLi имеет место быть.
Немного почитав об этой техники тут и тут, понимаем, что она не совсем проста, но основная концепция заключается в том, что ваши данные подставляются в некоторый запрос вывод которого вы не увидите, но этот вывод будет отправлен в некоторый другой запрос.
В примерах, приведённых в статьях достаточно подробно объясняется принцип внедрения ещё одной инъекции внутри первой.
Рекомендуем подробно ознакомится с статьями.
Перейдём к заданию.
У нас есть сайт с стандартной формой логина, а также некоторая функция поиска. Попробуем базовые инъекции в форму логина и ничего не получим. В целом их можно даже не пробовать, потому что мы знаем про что задание, но ради приличия - почему бы и не потыкать.
Идём в меню поиска и попробуем найти аккаунт с именем "
Отлично результаты поиска отображаются к нам на экран. Запустим Burp Suite, чтобы удобнее работать с запросами.
Попробуем нарушить SQL-синтаксис отправкой кавычки или любого другого терминирующего последовательно символа.
Получаем ошибку синтаксиса, отлично. Теперь попробуем union-based инъекцию.
Таким образом мы можем перечислять пользователей по их id. То есть мы можем управлять результатом второго запроса, который выводит нам информацию через первый, путём внедрения некоторого значения во второй запрос, которое также будет являться SQL-инъекцией. Получается что мы производим некоторую маршрутизацию инъекции.
Проверим это на простом запросе.
Данный запрос должен выдать последний элемент из таблицы пользователей (то есть id=3).
К нашему удивлению мы получаем сообщение об обнаружении атаки. Давайте попробуем закодировать вторую часть в hex.
Теперь наш запрос выглядит так.
Отлично, он сработал. Осталось дело за малым, необходимо вытащить пароль для администратора.
Предположим, что таблица users и в ней есть поля -
Таким образом просто делаем стандартный union-based запрос на доставание имени пользователя и пароля.
Кодируем его и внедряем в первый запрос.
В итоге получаем пароль для админа, под которым можем спокойно залогиниться.
И нам говорят, что данный пароль можно использовать для сдачи задания.
Отлично, мы решили задание.
авторство - Telegram-канал "Убежище Хакера"
Задания будут взяты с известного сайта с различными задачами (CTF и не только) - https://www.root-me.org/
Будем решать задачи из категории: Web - Server
Прямая ссылка: https://www.root-me.org/en/Challenges/Web-Server/
Разберём решение задания "SQL Injection - Routed". Очередное задание на разновидность SQL-инъекций. Как всегда посмотрим описание.
Как и всегда нам нужно найти пароль администратора. На этот раз у нас Routed SQLi, о ней не особо слышно в контексте баг-баунти и поиска уязвимостей, однако данного рода SQLi имеет место быть.
Немного почитав об этой техники тут и тут, понимаем, что она не совсем проста, но основная концепция заключается в том, что ваши данные подставляются в некоторый запрос вывод которого вы не увидите, но этот вывод будет отправлен в некоторый другой запрос.
"the injectable query is not the one which gives output but the output of injectable query goes to the query which gives output."В примерах, приведённых в статьях достаточно подробно объясняется принцип внедрения ещё одной инъекции внутри первой.
Рекомендуем подробно ознакомится с статьями.
Перейдём к заданию.
У нас есть сайт с стандартной формой логина, а также некоторая функция поиска. Попробуем базовые инъекции в форму логина и ничего не получим. В целом их можно даже не пробовать, потому что мы знаем про что задание, но ради приличия - почему бы и не потыкать.
Идём в меню поиска и попробуем найти аккаунт с именем "
admin".
Отлично результаты поиска отображаются к нам на экран. Запустим Burp Suite, чтобы удобнее работать с запросами.
Попробуем нарушить SQL-синтаксис отправкой кавычки или любого другого терминирующего последовательно символа.
Получаем ошибку синтаксиса, отлично. Теперь попробуем union-based инъекцию.
Таким образом мы можем перечислять пользователей по их id. То есть мы можем управлять результатом второго запроса, который выводит нам информацию через первый, путём внедрения некоторого значения во второй запрос, которое также будет являться SQL-инъекцией. Получается что мы производим некоторую маршрутизацию инъекции.
Проверим это на простом запросе.
' union select ' or true -- ' -- 'Данный запрос должен выдать последний элемент из таблицы пользователей (то есть id=3).
К нашему удивлению мы получаем сообщение об обнаружении атаки. Давайте попробуем закодировать вторую часть в hex.
Теперь наш запрос выглядит так.
' union select 0x27206f722074727565202d2d2027 -- '
Отлично, он сработал. Осталось дело за малым, необходимо вытащить пароль для администратора.
Предположим, что таблица users и в ней есть поля -
login и password, это предположение основано и на прошлых заданиях.Таким образом просто делаем стандартный union-based запрос на доставание имени пользователя и пароля.
Кодируем его и внедряем в первый запрос.
В итоге получаем пароль для админа, под которым можем спокойно залогиниться.
И нам говорят, что данный пароль можно использовать для сдачи задания.
Отлично, мы решили задание.
авторство - Telegram-канал "Убежище Хакера"