Task # Task #11

Discussion in 'Задания/Квесты/CTF/Конкурсы' started by Baskin-Robbins, 25 Apr 2020.

  1. Baskin-Robbins

    Baskin-Robbins Reservists Of Antichat

    Joined:
    15 Sep 2018
    Messages:
    239
    Likes Received:
    807
    Reputations:
    212
    task_11_main.png

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

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


    Правила:
    Срок:
    Таргет:

    Всем удачи!


    Scoreboard:
    @gurux13 1,2

    @Franky_T 1
    @joelblack 1
    @manfromkz 1,2



    Прохождение
     
    #1 Baskin-Robbins, 25 Apr 2020
    Last edited: 10 May 2020
    manfromkz, Spinus, joelblack and 5 others like this.
  2. Baskin-Robbins

    Baskin-Robbins Reservists Of Antichat

    Joined:
    15 Sep 2018
    Messages:
    239
    Likes Received:
    807
    Reputations:
    212
    Небольшое уточнение - админку не прятали глубоко.
    Она на поверхности, нужно внимательно посмотреть на задание.
    И что-то должно подсказать, как ее найти.

    Но админка - это одна из двух частей задачи. Простое нахождение ее ничего не даст.
    Поэтому начинать необязательно с нее.
     
  3. Baskin-Robbins

    Baskin-Robbins Reservists Of Antichat

    Joined:
    15 Sep 2018
    Messages:
    239
    Likes Received:
    807
    Reputations:
    212
    Наверное следует сделать еще одно уточнение.
    Найти админку != получить к ней доступ.
    Нахождение админки - часть задания.
    Получение доступа к ней - цель задания. Флаг в ней.
     
  4. Baskin-Robbins

    Baskin-Robbins Reservists Of Antichat

    Joined:
    15 Sep 2018
    Messages:
    239
    Likes Received:
    807
    Reputations:
    212
    Немного о способах прохождения.
    Таск задумывался с одним способом прохождения, несмотря на то что окончательных пэйлоадов много.
    @gurux13 выкатил еще один, достаточно интересный на мой взгляд.
    Я надеюсь по окончанию таска он с нами им поделится.
    Ну и всвязи с вновь открывшимися обстоятельствами этот вариант принимается тоже.
    Итог: задача имеет два варианта решения.
     
    Spinus and seostock like this.
  5. gurux13

    gurux13 Member

    Joined:
    4 Feb 2019
    Messages:
    8
    Likes Received:
    30
    Reputations:
    48
    Судя по всему, я нашёл оба :)
    Надо сказать, что первое найденное мной решение немного сложнее решения №1.

    Спасибо за таск! Временами я чувствовал себя котом, который сидит и смотрит на мышиную нору. Залитую бетоном.
     
    #5 gurux13, 28 Apr 2020
    Last edited: 28 Apr 2020
    Spinus, joelblack, undefo and 3 others like this.
  6. Franky_T

    Franky_T Level 8

    Joined:
    6 Nov 2018
    Messages:
    21
    Likes Received:
    66
    Reputations:
    58
    Огонь таск) много неожиданного по дороге узнается)
    Спасибо!
     
    ex0dus, Spinus, seostock and 2 others like this.
  7. joelblack

    joelblack Reservists Of Antichat

    Joined:
    6 Jul 2015
    Messages:
    244
    Likes Received:
    450
    Reputations:
    145
    Спасибо за таск, открыл для себя некоторые новые моменты)
     
    Spinus, Franky_T and Baskin-Robbins like this.
  8. Baskin-Robbins

    Baskin-Robbins Reservists Of Antichat

    Joined:
    15 Sep 2018
    Messages:
    239
    Likes Received:
    807
    Reputations:
    212
    1) Админка
    Мы с этим сталкивались, мы все это знаем.
    Встречается как на самописах, так и в CMS.
    И проверять это очень важно на самописах, на CMS и так знаем.

    2) Фильтр
    Байпас фильтра состоит из двух частей.
    Определить прошел/не прошел фильтр для каждой части не сложно, все на виду.
    И на мой взгляд проще работать с каждой частью по отдельности.
     
    Spinus and seostock like this.
  9. Baskin-Robbins

    Baskin-Robbins Reservists Of Antichat

    Joined:
    15 Sep 2018
    Messages:
    239
    Likes Received:
    807
    Reputations:
    212
    Наверное сделаю последнюю подсказку по поиску админки.
    Кое-что лишнее. И это кое-что должно
     
  10. Baskin-Robbins

    Baskin-Robbins Reservists Of Antichat

    Joined:
    15 Sep 2018
    Messages:
    239
    Likes Received:
    807
    Reputations:
    212
    Заметил некоторые сложности с нахождением админки.
    Наверное на этом моменте не цепляется глаз за то что нужно.
    После выходных скину путь, оставим еще немного времени для тех кто хочет самостоятельно найти её.
     
  11. manfromkz

    manfromkz New Member

    Joined:
    17 Apr 2019
    Messages:
    2
    Likes Received:
    4
    Reputations:
    14
  12. Baskin-Robbins

    Baskin-Robbins Reservists Of Antichat

    Joined:
    15 Sep 2018
    Messages:
    239
    Likes Received:
    807
    Reputations:
    212
  13. Baskin-Robbins

    Baskin-Robbins Reservists Of Antichat

    Joined:
    15 Sep 2018
    Messages:
    239
    Likes Received:
    807
    Reputations:
    212
    Нам предлагается получить доступ к административной панели,
    в которой находится заветный флаг. Взглянем на задание.

    Блог ИБ тематики.
    Тем кто участвовал в предыдущих тасках наверняка в глаза бросился порт на котором
    запущенно задание. Он четырехзначный(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.

    Вообще необязательно сравнивать содержимое бутстраповских скриптов.
    Тут немного иная идея.
    Встречается использование "своих" префиксов на самописных сайтах для имен файлов и
    директорий. Например 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.

     
  14. gurux13

    gurux13 Member

    Joined:
    4 Feb 2019
    Messages:
    8
    Likes Received:
    30
    Reputations:
    48
    Итак, по просьбам - врайтап о втором способе взлома.

    Смотрим на URL'ы страниц таска. Пример:
    Code:
    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.
    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.
    Code:
    216.58.206.110 = D8.3A.CE.6E = 0xD83ACE6E (hex) = 3627732590 (dec) = 033016547156 (oct)
    
    Все помнят, что IP адреса пишутся в прямом порядке байт (big-endian)?

    Итак, переходим на http://task.antichat.com:1111/reader/index.php?name=http://3627732590/ и видим (кажется, немецкий) гугл. Ура, умеем стучаться наружу. Можно было бы http://033016547156 или http://0xD83ACE6E, все три работают.
    Любопытно, что мой браузер (Chrome) тоже поддерживает это безобразие. Если кликнуть по ссылкам выше, то откроется гугл. The more you know.

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

    Немного читаем код php (брр!) и вспоминаем, что http:// враппер поддерживает редиректы.
    То есть, если что-то в интернете нам ответит
    Code:
    HTTP/1.0 302 Found
    Location: SOME_URL
    
    
    То PHP перейдёт по SOME_URL, если посчитает его безопасным. Обычно безопасные - http(s) / (s)ftp. То есть, можно сделать
    Code:
    HTTP/1.0 302 Found
    Location: http://localhost:1111/tpl_admin/
    
    
    и сервер перейдёт по редиректу и отдаст нам админку. Там могут быть ограничения на redirect follow, но не попробуешь - не узнаешь.

    Давайте же поднимем сервер (где-нибудь), который отдаст то, что сверху. Самое простое - так.
    Code:
    $ 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.
    Переходим на адрес
    Code:
    http://task.antichat.com:1111/reader/index.php?name=http://<32-bit IP of server>:12345/
    и видим флаг!
     
  15. Baskin-Robbins

    Baskin-Robbins Reservists Of Antichat

    Joined:
    15 Sep 2018
    Messages:
    239
    Likes Received:
    807
    Reputations:
    212
    Прохождения участников

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

    fandor9 Reservists Of Antichat

    Joined:
    16 Nov 2018
    Messages:
    630
    Likes Received:
    1,050
    Reputations:
    47
    Спасибо за таск, читаю прохождение со слезами на глазах :D с портом стормозил (самое главное знал ведь, что он фильтруется...)
    task.antichat.com был видет в футере ошибки, так что вместо localhost срабатывал и http://task/.
    И еще я заметил и меня это сильно удивило, что допустим http://task.antichat.com:1111/reader/index.php?name=http://ai/ или http://task.antichat.com:1111/reader/index.php?name=http://dk/ отдавал чужие страницы. Я сначала подумал что RFI, но заветное пхпинфо ничего не дало, а лишь выдало само себя как текст.
    Upd:
    Ах да, в порывах чувств забыл поблагодарить за таск)) Так что, спасибо, от души!
     
    #16 fandor9, 10 May 2020
    Last edited: 10 May 2020
  17. MichelleBoxing

    MichelleBoxing Reservists Of Antichat

    Joined:
    12 Nov 2018
    Messages:
    19
    Likes Received:
    32
    Reputations:
    57
    интересный таск, узнал много нового в ходе поиска решения, было очень интересно. Спасибо автору
    Само решение, оказалось для меня слишком, не логичным что ли...
    Админку я бы не нашел сам, поскольку когда пишут, что не нужен никакой брутфорс (то я автоматом исключаю какие то гадания и ищу нечто, что явно должно указывать на искомое, но это моя проблема, уже не в первом таске с этим обжигаюсь )
    По фильтру, к сожалению забрел в некуда. Вроде сразу понятно, что врапперы кроме 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, но мешает фильтруемый ? (делаю ошибочный вывод, после подсказки что это вторая часть фильтра, которую нужно обойти, уже пытаюсь найти инфу, как это можно обойти и ничего не нахожу )
    Сейчас, посмотрев решение, интерсно, сработает ли двойной редирект, через мой хост (хотя он там уже и не нужен...)
    Еще раз спасибо автору, много нового узнал для себя в ходе поиска решения.
     
    #17 MichelleBoxing, 11 May 2020
    Last edited: 11 May 2020
    Shubka75, fandor9 and Baskin-Robbins like this.
  18. Baskin-Robbins

    Baskin-Robbins Reservists Of Antichat

    Joined:
    15 Sep 2018
    Messages:
    239
    Likes Received:
    807
    Reputations:
    212
    Для решения задачки все таки требуется некоторая хакерская смекалка.
    Да, зайдет не всем и это логично. Но это тот момент, когда действительно
    уравниваются шансы как новичков так и спецов.

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

    Здесь наверное важно вынести такой момент - не стоит останавливаться, попробовав
    пару вариантов. Пробовать нужно все. Ну а если говорить о логичности работы одного
    представления и неработы другого - этот вопрос наверное лучше задать разрабам php.
    Для меня было важно чтобы хост был представлен в "непривычном" виде, а какой именно -
    на усмотрение проходящих, поэтому и был добавлен вариант с [::ffff:0:0].
     
    Franky_T, aberkroft, seostock and 3 others like this.