![]() |
Цитата:
Скорее всего после НГ, на праздники не всем будет интересно сидеть за компом. |
Готово.
|
Вообще изи )
Прошел. |
Сделано. Спасибо!
|
Прошел, ждем-с продолжения
|
Прошел
|
done
|
изи
|
Прошел
|
прошел
|
.done
|
Прошёл
|
71***be6
|
Done
|
блин, а у меня не получается... по идее нужно как то обмануть file_exists
Если написать http://task.antichat.com:10001/?f=../flag.php то обманывается, но тогда include не срабатывает ибо путь не верный |
Цитата:
Найдешь обязательно. |
Цитата:
|
file_exists не нормализует путь, ему вроде как только прочекать надо что файл есть и на остальное пофиг
ps много народу прошло, пусть будет хинт |
Надо же, прошёл с телефона.
|
Хм... подскажите, почему такой код не срабатывает?
Код:
include('./flag.php\x0/flag.php'); |
+done
|
Цитата:
|
Начнем с того, что задание не закрыто и вопросы если и нужно задавать, то не в этой теме.
Но мы только начинаем и только учимся решать задания, поэтому пока сделаем исключение: - и потому, что ядовитый ноль в инклюдах, уже в версии 5.3.4 был пропатчен (в 5.3.3.8 уже не работал ), а таск работает на версии 7.2.13. |
Для тех, кто прошел и не знает чем заняться.
Решение под виндовс отличается от решения под nix. По некоторым причинам не стал его рекомендовать. Но вот вчера хакеры повтыкали и говорят, что вполне себе весело. Кстати cerber3000 прислал оба прохождения. Задание закроем 28.12.2018. |
Пройдено
|
Больше часа ушло...
Пойду голову пеплом посыплю |
А я пока не прошел... блин
|
Цитата:
|
Задание закрыто.
Посмотрим еще раз на код. Первая строчка не сильно влияет на прохождение, но экономит время, отсеивая варианты с манипуляциями в имени файла. Ну и спасает интернеты от глобального похека, поскольку хакеры не остановятся только на решении таска, а обязательно доведут до rce, потом порутают систему, а когда поймут, что в докере - будут выбираться в хостовую систему. А там опять - рут, соседи, креды, интернет. Теперь две строчки, которые составляют суть задания Код:
if(file_exists($flag)){А ее единственное предназначение, как раз и проверять существование указанного файла или каталога. Логика простая и железная, не обойти. Тупик, опечатка, или что это? А это именно то пространство, в котором может работать хакер. Дьявол кроется в деталях. И в этих деталях обнаруживается другая логика, с которой уже можно работать. Оказывается include и file_exists используют не совсем одинаковые алгоритмы поиска .SpoilerTarget" type="button">Spoiler: url и запрос http://task.antichat.com:10001/?f=No...ir/../flag.php выполнит скрипт flag.php. Все дело в том, что инклюд в никсах работает и через несуществующий каталог (большинство знают это на собственном опыте), если после нормализации пути файл существует. А вот file_exists требует существования всех каталогов в пути. И этот баг известен аж с 2004 года. И не в узких кругах, если спросим у Гугла "bypass file_exists", то в топе получаем документ .SpoilerTarget" type="button">Spoiler: Документ https://seclists.org/fulldisclosure/2004/Feb/82 Можно конечно встать на защиту разработчиков: нормально же, include нашел файл, который мы запросили, да "ошиблись" немного в запросе, но "исправились" при помощи "../", вернулись на каталог выше и обнаружили нужный файл. Все нормально. И, если бы мы, на месте разработчиков писали функцию file_exists(), мы бы тоже не разрешили ей ходить через несуществующий каталог. Ну в самом деле: Что может существовать в несуществующем месте? Но, как программистам, нам важно, чтобы обе эти конструкции искали файл одинаково и file_exists не имеет самостоятельной ценности, а только в сочетании с другими функциями (и конструкциями) работающими с ФС. Поэтому баг, однозначно. Часть прохождений была найдена с помощью Гугла, это видно по логам сервера, а часть повтыкали "честно". Оба способа правильны, гуглить - быстрее, повтыкать - интереснее. Под виндовс запрос получается другой, для его объяснения можно заглянуть в тему https://rdot.org/forum/showthread.php?t=926, она широко известна. Для работы с файлами винда предоставляет поистине читерские возможности. .SpoilerTarget" type="button">Spoiler: Прохождения участников Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
↑ [URL="http://task.antichat.com:10001/index.php?f=%22%3E%3C/flag.php"]http://task.antichat.com:10001/index.php?f="> Итого. Можно сказать две вещи: - паблик жив. - паблик рулит! Собирается неплохая команда. Думаю, что это еще не все, еще много кто подтянется. Для тех, кто не решил. Не расстраивайтесь, заданий будет еще много, всяких и разных. Кто подтянулся уже после закрытия задания, не спешите заглянуть под спойлер, пробуйте повтыкать, это интереснее, чем просто чтение. И напоследок. Это очень простое задание, но из него можно извлечь уроки. Мне бы хотелось, чтобы зашел такой: Хакер часто работает из такого места, который не прописан явно в коде, но из него можно оказывать влияние на результаты работы скриптов. Я называю это: "В промежутках кода". Но можно называть и по-другому, "Второе дно", "Dark Side of the Moon", не очень важно, как назвать, важно знать, что существует нечто такое, куда программисты не стремятся заглядывать, но там обитают хакеры и неплохо рулят в свою пользу. Всем спасибо. Удачи и хорошего Нового Года! === PS, ну и после закрытия задания уже не так строго относимся к содержимому постов и самое время поделиться впечатлениями, находками, своим представлением. Может есть свое объяснение решениям таска. |
Цитата:
|
Прошу прощения, что открыл карты раньше времени. Думал что обсуждать можно как стукнет 28.12. За задание огромное спасибо!
|
Да, огромная благодарность автору.
Надеюсь будет ещё много заданий. Всех с наступающим! |
Вот блин, а я подставлял хлам не на уровень ниже а на уровень выше...
Спасибо позновательно |
.SpoilerTarget" type="button">Spoiler: cerber3000 undelete
[QUOTE="cerber3000"] ↑ вот некоторые из них, я предполагаю их больше но не проверял. index.php?f=>../flag.php index.php?f=<><><><>../flag.php index.php?f=<><><><> |
К слову(на всякий случай добавлю), не только file_exist.
PHP код:
|
Цитата:
|
| Время: 23:02 |