ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Задания/Квесты/CTF/Конкурсы (https://forum.antichat.xyz/forumdisplay.php?f=112)
-   -   Write-Up Не Уцуцуга (https://forum.antichat.xyz/showthread.php?t=1642657)

vov4ick 29.11.2023 14:24

Всем привет! Решил опубликовать решение одного интересного таска, из категории Веб "Не Уцуцуга" , площадки Antichat.games .

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

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

https://forum.antichat.xyz/attachmen...08548148b9.png

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

https://forum.antichat.xyz/attachmen...6f28e20669.png

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

https://forum.antichat.xyz/attachmen...b7626af430.png

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

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

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

https://forum.antichat.xyz/attachmen...370302e2db.png

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

https://forum.antichat.xyz/attachmen...8a8a3977c7.png

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

https://forum.antichat.xyz/attachmen...b7fed5ae39.png

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

https://forum.antichat.xyz/attachmen...227854b319.png

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

https://forum.antichat.xyz/attachmen...7dc665e327.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))-- -
Получаем. нужны данные я успешно затер. Разобраться я думаю не сложно будет =)

https://forum.antichat.xyz/attachmen...fcfcf2712b.png

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

https://forum.antichat.xyz/attachmen...b559ce2031.png

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

https://forum.antichat.xyz/attachmen...da4874d3b0.png

h0ndry4 21.08.2024 05:56

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

vov4ick 21.08.2024 09:36

Цитата:


h0ndry4 сказал(а):

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


Отсутствие фильтрации символа
обратного слеша ("\") позволяет экранировать последующий символ одинарной
или двойной кавычки в запросе к БД. Это в свою очередь оставит строку
незавершённой, то есть не закрытой второй кавычкой. Скорее всего используется на беке функция preg_replace с удалением кавычки, но не бекслеша.

h0ndry4 22.08.2024 05:50

Цитата:


vov4ick сказал(а):

Отсутствие фильтрации символа
обратного слеша ("\") позволяет экранировать последующий символ одинарной
или двойной кавычки в запросе к БД. Это в свою очередь оставит строку
незавершённой, то есть не закрытой второй кавычкой. Скорее всего используется на беке функция preg_replace с удалением кавычки, но не бэкслеша.


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

vov4ick 22.08.2024 15:08

Цитата:


h0ndry4 сказал(а):

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


При подстановке бекслеша в конце записи email, сервер выдал 500 ошибку, так же он не отвечал.Мне показалось это странным и я начал тестировать это поле. Если у тебя строк на запись как минимум две, то можно попробовать это сделать. Такие инъекции непросто найти, и в ряде случаев проэксплуатировать. Все зависит как написан бэкенд. В данном случае у нас черный ящик и мы просто тестируем разные варианты.

h0ndry4 23.08.2024 04:38

Цитата:


vov4ick сказал(а):

При подстановке бекслеша в конце записи email, сервер выдал 500 ошибку, так же он не отвечал.Мне показалось это странным и я начал тестировать это поле. Если у тебя строк на запись как минимум две, то можно попробовать это сделать. Такие инъекции непросто найти, и в ряде случаев проэксплуатировать. Все зависит как написан бэкенд. В данном случае у нас черный ящик и мы просто тестируем разные варианты.


Понял, спасибо.


Время: 21:01