Codeby Games Write-Up Не Уцуцуга

vov4ick

Green Team
11.12.2022
54
125
BIT
1 007
Всем привет! Решил опубликовать решение одного интересного таска, из категории Веб "Не Уцуцуга" , площадки codeby.games .

Первое что мы видим это уровень сложности "Сложно" интрига, но мы знаем что мы сильнее этих машин =)

Заходим на сайт и видим форму регистрации

Screenshot_12.png


Сразу появляются какие то вектора в голове, но мы должны изучить полностью сайт, видим кнопку Register, тапаем по ней и регаемся

Screenshot_14.png

Заходим по своим кредам и видим страничку

Screenshot_15.png


Скажу сразу вектор я знал и он здесь очевиден для бывалых. После появления это странички портфолио с инфой я уже знал куда копать.
SQL injection будем пробовать. Из моего опыта я понимаю что это Фрагментированная инъекция. И есть несколько вариантов раскрутки именно этой инъекции, а способов может быть еще больше, будет показан один из них.

Инфы мало во "всемирной помойке" про эту инъекцию, но найти можно.
Вся фишка в том, что при каждом запросе нужно менять свои регистрационные данные, как? далее я покажу это, пробуем

Вставляем вот такой запрос в наше поле Profession , а в конце Email ставим \ символ.

Screenshot_16.png


Далее для простоты я использования burp suite
Вот наш запрос когда мы перехватываем его, видим наши данные которые передаются на сервер,так же обратите внимание на сам запрос как он сконфигурирован. здесь burp кодирует символы, но смысл думаю понятен. При каждом таком запросе и получения инфы, мы меняем данные на регу.
Screenshot_17.png


Мы зарегались, заходим по тем кредам которые вы указали и видим. Ура мы получили название базы. Не сложно. (Данные я немного изменил так как было много запросов после).

Screenshot_5.png

Складывается такая картина в голове, что есть какие то креды по которым нужно авторизоваться, и получить наш заветный флаг.
Из того что мы имеем это username и password это все что нам нужно в данном случае.
Делаем запрос на получение таблицы, не забываем менять данные на регу:
, (select table_name from information_schema.tables wheretable_schema=database()))-- -
Screenshot_21.png

Успех мы получили название нашей нужной таблицы

Screenshot_22.png


Чтобы получить название колонок придется указывать название таблицы в HEX или в CHAR, так как название указывается в кавычках, а они у нас не проходят.
Но мы уже в принципе понимаем что нам нужны две колонки это usrname и password.
Далее я застрял, тем же способом я не смог вывести данные, да и было бы просто. Далее я попросил небольшой хинт, и понял что данные можно вывести другой техникой. Я знал про нее, называется она DIOS(Dump In One Shot). Почитайте про нее, она правда крутая, и своеобразная.
Пробуем
,(select (@a) from (select(@a:=0x00),(select (@a) from
(portfolio_db.contractors)where (@a)in (@a:=concat(@a,username,password,0x3c62723e))))a))-- -
Получаем. нужны данные я успешно затер. Разобраться я думаю не сложно будет =)
_231129121153.png


Теперь выдыхаем и спокойно заходим под этими кредами

_231125223921.png


Оказался очень интересный таск, при прохождении много запросов крашилось, да и сайт не принимает большой запрос, приходилось приспосабливаться. Потребовалось время на все это, было увлекательно. Кстати с помощью Dios можно выводить так же данные, но вывести разом базу, таблицу и все колонки не получилось. Сайт просто не принимает такой длинный запрос, если у кого получилось отпишите будет очень интересно. В принципе все, вот такая комбинация. Такого вида инъекции можно раскручивать так же при помощи всем известных инструментов. В данном случае мы крутим в ручную.
Под конец вылезло такое =) еще один вектор? хм ...
Надеюсь было познавательно. И спасибо за внимание.
Screenshot_31.png
 

Вложения

  • Screenshot_13.png
    Screenshot_13.png
    8 КБ · Просмотры: 84
  • Screenshot_5.png
    Screenshot_5.png
    12 КБ · Просмотры: 61
  • Screenshot_15.png
    Screenshot_15.png
    6,5 КБ · Просмотры: 71
  • Screenshot_27.png
    Screenshot_27.png
    15,7 КБ · Просмотры: 78
  • Screenshot_27.png
    Screenshot_27.png
    15,7 КБ · Просмотры: 69
Последнее редактирование:

h0ndry4

One Level
21.08.2024
3
1
BIT
24
Можешь объяснить зачем нужен "\" в поле email? А так все остальное понятно.
 

vov4ick

Green Team
11.12.2022
54
125
BIT
1 007
Можешь объяснить зачем нужен "\" в поле email? А так все остальное понятно.
Отсутствие фильтрации символа
обратного слеша ("\") позволяет экранировать последующий символ одинарной
или двойной кавычки в запросе к БД. Это в свою очередь оставит строку
незавершённой, то есть не закрытой второй кавычкой. Скорее всего используется на беке функция preg_replace с удалением кавычки, но не бекслеша.
 
Последнее редактирование:

h0ndry4

One Level
21.08.2024
3
1
BIT
24
Отсутствие фильтрации символа
обратного слеша ("\") позволяет экранировать последующий символ одинарной
или двойной кавычки в запросе к БД. Это в свою очередь оставит строку
незавершённой, то есть не закрытой второй кавычкой. Скорее всего используется на беке функция preg_replace с удалением кавычки, но не бэкслеша.
Спасибо. Раз уж на то пошло то можешь объяснить как ты определил что надо использовать именно фрагментированную инъекцию? Просто я в этой теме совсем зеленый, лажу по форумам/сайтам, читаю посты такого же формата, пытаюсь понять как именно решается та или иная задача, куда автор обращает внимание для решения и куда стоит копать чтобы знаний набрать.
 

vov4ick

Green Team
11.12.2022
54
125
BIT
1 007
Спасибо. Раз уж на то пошло то можешь объяснить как ты определил что надо использовать именно фрагментированную инъекцию? Просто я в этой теме совсем зеленый, лажу по форумам/сайтам, читаю посты такого же формата, пытаюсь понять как именно решается та или иная задача, куда автор обращает внимание для решения и куда стоит копать чтобы знаний набрать.
При подстановке бекслеша в конце записи email, сервер выдал 500 ошибку, так же он не отвечал.Мне показалось это странным и я начал тестировать это поле. Если у тебя строк на запись как минимум две, то можно попробовать это сделать. Такие инъекции непросто найти, и в ряде случаев проэксплуатировать. Все зависит как написан бэкенд. В данном случае у нас черный ящик и мы просто тестируем разные варианты.
 

h0ndry4

One Level
21.08.2024
3
1
BIT
24
При подстановке бекслеша в конце записи email, сервер выдал 500 ошибку, так же он не отвечал.Мне показалось это странным и я начал тестировать это поле. Если у тебя строк на запись как минимум две, то можно попробовать это сделать. Такие инъекции непросто найти, и в ряде случаев проэксплуатировать. Все зависит как написан бэкенд. В данном случае у нас черный ящик и мы просто тестируем разные варианты.
Понял, спасибо.
 
  • Нравится
Реакции: vov4ick
Мы в соцсетях:

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