• XSS.stack #1 – первый литературный журнал от юзеров форума

Пример Routed SQL-инъекции

tabac

CPU register
Пользователь
Регистрация
30.09.2018
Сообщения
1 610
Решения
1
Реакции
3 332
Данный пост будет носить практический характер. В нём мы решим очередное задание на эксплуатацию уязвимостей веб-приложений в контексте заданий CTF.

Задания будут взяты с известного сайта с различными задачами (CTF и не только) - https://www.root-me.org/

Будем решать задачи из категории: Web - Server

Прямая ссылка: https://www.root-me.org/en/Challenges/Web-Server/

Разберём решение задания "SQL Injection - Routed". Очередное задание на разновидность SQL-инъекций. Как всегда посмотрим описание.

222812d39f4d7ee64f1f6.png

Как и всегда нам нужно найти пароль администратора. На этот раз у нас 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."

В примерах, приведённых в статьях достаточно подробно объясняется принцип внедрения ещё одной инъекции внутри первой.

Рекомендуем подробно ознакомится с статьями.

Перейдём к заданию.
0d0e32f6a985bbc6b3770.png

У нас есть сайт с стандартной формой логина, а также некоторая функция поиска. Попробуем базовые инъекции в форму логина и ничего не получим. В целом их можно даже не пробовать, потому что мы знаем про что задание, но ради приличия - почему бы и не потыкать.

Идём в меню поиска и попробуем найти аккаунт с именем "admin".

5afb88ec63a199db3893b.png

Отлично результаты поиска отображаются к нам на экран. Запустим Burp Suite, чтобы удобнее работать с запросами.

Попробуем нарушить SQL-синтаксис отправкой кавычки или любого другого терминирующего последовательно символа.

8d1610f1c68ad71bd34c8.png

Получаем ошибку синтаксиса, отлично. Теперь попробуем union-based инъекцию.

3b245aedcfdde87a4f228.png

Таким образом мы можем перечислять пользователей по их id. То есть мы можем управлять результатом второго запроса, который выводит нам информацию через первый, путём внедрения некоторого значения во второй запрос, которое также будет являться SQL-инъекцией. Получается что мы производим некоторую маршрутизацию инъекции.

Проверим это на простом запросе.

' union select ' or true -- ' -- '

Данный запрос должен выдать последний элемент из таблицы пользователей (то есть id=3).

d47decb1bc4a72aa512bd.png

К нашему удивлению мы получаем сообщение об обнаружении атаки. Давайте попробуем закодировать вторую часть в hex.

e4a7c5fe629d4483e1db5.png

Теперь наш запрос выглядит так.

' union select 0x27206f722074727565202d2d2027 -- '

704008850ffd9f8d52de3.png

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

Предположим, что таблица users и в ней есть поля - login и password, это предположение основано и на прошлых заданиях.

Таким образом просто делаем стандартный union-based запрос на доставание имени пользователя и пароля.

76d73e57ab51bcaf2b78b.png

Кодируем его и внедряем в первый запрос.

04a478e00a5d37f552eb3.png

В итоге получаем пароль для админа, под которым можем спокойно залогиниться.

2e46c52cf8c15bfec2b9e.png

И нам говорят, что данный пароль можно использовать для сдачи задания.

Отлично, мы решили задание.

авторство - Telegram-канал "Убежище Хакера"
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх