Добавить в корзинуПозвонить
Найти в Дзене

CTF web — kavichka

Как и обещал, разбираю первую задачку из нашего соревнования CTF. Задание называется kavichka, 100 баллов за флаг. Ссылка ведёт на URL: http://challenge01.root-me.org/web-serveur/ch9/ Нам предлагают пройти одно из испытаний на root-me.org. В комментариях к задаче сказано: флагом является пароль админа. Ссылки CTF - Capture The Flag Решение Обратим внимание на название — kavichka. Одно это наводит на мысль об SQL инъекции. SQL injection - это атака на базу данных, которая позволит выполнить некоторое действие, которое не планировалось создателем скрипта. Атака осуществляется путём внедрения (инъекции) стороннего кода в SQL запрос. Первый взгляд на задачку: У нас есть форма логин с двумя полями: логин и пароль. Можно предположить как происходит логин внутри запроса. Скорее всего в запросе написано нечто вроде: SELECT * FROM table1
WHERE user='' + user + '' AND Password = '' + password + '' Если разработчик не проверяет входные переменные, то в код можно внедрить инъекцию. Попробуем в по
Оглавление

Как и обещал, разбираю первую задачку из нашего соревнования CTF. Задание называется kavichka, 100 баллов за флаг.

-2

Ссылка ведёт на URL:

http://challenge01.root-me.org/web-serveur/ch9/

Нам предлагают пройти одно из испытаний на root-me.org. В комментариях к задаче сказано: флагом является пароль админа.

Ссылки

CTF - Capture The Flag

Решение

Обратим внимание на название — kavichka. Одно это наводит на мысль об SQL инъекции.

SQL injection - это атака на базу данных, которая позволит выполнить некоторое действие, которое не планировалось создателем скрипта. Атака осуществляется путём внедрения (инъекции) стороннего кода в SQL запрос.

Первый взгляд на задачку:

-3

У нас есть форма логин с двумя полями: логин и пароль. Можно предположить как происходит логин внутри запроса. Скорее всего в запросе написано нечто вроде:

SELECT * FROM table1
WHERE user='' + user + '' AND Password = '' + password + ''

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

' OR 1=1; --

Тогда код получится такой:

SELECT * FROM table1
WHERE user=' + user+ ' AND Passsword = ' + password + '
SELECT * FROM table1
WHERE user='asd' AND Password = '' OR 1=1;
--'

 В этом случае условие всегда выполняется. Пробуем.

-4

Бинго! Мы залогинились, вот только не под админом. Да и пароль скрыт, хотя, скрыт ли?

F12 — открываем в браузере консоль, смотрим что лежит в поле password:

-5

Ну вот, пароль лежит в открытом виде, а скрывается звёздочками только из-за того, что тип поля - password. Теперь мы можем спокойно логиниться под юзером user1.

TYsgv75zgtq

Как бы модифицировать инъекцию так, чтобы войти под админом? Угадаем логин админа, пусть будет "admin". Угадаем, что поле в таблице называется "user". Есть варианты не угадывать, а получить с помощью инъекции, но это не сегодня. Сегодня мы удачно угадываем... Хм, несложно придумать такой запрос:

SELECT * FROM table1
WHERE user='asd' AND Password = '' OR user='admin' ;
--'

Тогда в поле пароля вставляем:

' OR Username='admin'; --

Пробуем:

-6

Ага, залогинились под юзером admin! Тырим пароль админа — это и есть наш флаг.

t0_W34k!$

Безопасность

  • Защищайтесь от SQL инъекций. Одним из хороших способов является использование "параметризированных запросов".
  • Не используйте стандартные логины.
  • Названия полей таблицы не имеет смысла усложнять, инъекцию можно проводить по идентификаторам колонок.

Источник:
https://internet-lab.ru/ctf_web_kavichka

Если вам понравилась статья, то ставьте 👍🏻 каналу.
Пишите комментарии, задавайте вопросы, подписывайтесь.