Привет всем, я Никита Куртин , куратор Израильской высшей школы информационных технологий и безопасности ХакерУ Этим летом ведущая израильская компания по информационной безопасности Контрольно-пропускной пункт , опубликовал серию кибертестов.
Задания были разделены на шесть категорий: • Логика • Интернет • Программирование • Сеть • Реверс • Сюрприз Две задачи по каждому направлению.
В этом посте я расскажу, как я прошёл всего четыре теста, в следующих трёх: Контрольно-пропускной пункт До этого он уже заслужил уважение и интерес с моей стороны, поэтому я решил взять на себя эти задачи.
Однако из-за плотного графика я мог позволить себе взять на себя только 8 задач из 12 (из четырех разных категорий).
И мне удалось решить 7 из них.
Официально конкурс завершился к концу сентября 2018 года.
Поэтому теперь с чистой совестью могу шаг за шагом рассказать, как я прорвался к решению следующих задач:
• Логическая задача «PNG++»
• Веб-конкурс «Роботы вернулись»
• Веб-конкурс «Галерея Диего».
• Задача программирования «Осторожные шаги» • Задача по программированию «Пазл» • Сетевой вызов «Пинг-понг» • Сетевая задача «Протокол» Задача: PNG++ Описание: Это (ссылка на зашифрованный файл PNG) изображение было закодировано с использованием специального шифра.
Большую часть этого кода мы смогли прочитать здесь (ссылка на код Python).
К сожалению, кто-то по неосторожности пролил кофе на key_transformator.py.
Не могли бы вы помочь нам расшифровать это изображение?
Код Python:
Логика шифрования следующая:
1. Установите длину ключа (размер ключа) 4 байта.
2. Прочитайте байты файла «flag.png» в переменной «img» 3. Добавьте в файл дополнение к первому ближайшему числу, кратному четырем.
Заполнение равно количеству пропущенных байтов.
Например, если длина файла составляет 29 байт (3 отсутствуют), добавьте три байта с десятичным значением 3 (ASCII 0x03).
Другими словами, байт заполнения не может быть пустым (ASCII 0x00), поскольку его десятичное значение равно нулю, что не подразумевает заполнение.
4. Укажите исходный ключ четырьмя произвольными заглавными буквами ([A-Z]).
5. Проделайте то же самое со всеми байтами файла, шифруя цепочки по четыре байта за раз.
а.
Каждый байт в файле фиксируется байтом из ключа б.
Ключ постоянно трансформируется в другой ключ, за это отвечает key_transformator.transform(key) в.
Зашифрованные байты добавляются в enc_data. 6. Запишите enc_data (зашифрованные байты) в зашифрованный.
png.
Сначала я проверил заголовок PNG и обнаружил, что первые восемь байтов имеют следующий вид:
[137, 80, 78, 71, 13, 10, 26, 10]
Я взял первые восемь байтов зашифрованного файла и зафиксировал их с помощью этих восьми байтов:
Ключ первого блока получился такой:
[85, 80, 82, 81]
А второй блок такой:
[86, 81, 83, 82]
Поскольку каждый последующий ключ генерируется динамически с использованием предыдущего ключа (key = key_transformator.transform(key), мое понимание алгоритма заключается в добавлении одного к каждому байту в предыдущем ключе:
85 -> 86
80 -> 81
82 -> 83
81 -> 82
И тут я понял, что в названии челленджа скрывается довольно тонкий намек.
Я написал две «вспомогательные функции»: • «nextKey», который восстанавливает следующий ключ на основе предыдущего.
• «nextChar», который восстанавливает следующий символ и в большинстве случаев просто увеличивается на единицу, если он попадает в пределы байта (255).
Я преобразовал исходные 4 байта [85, 80, 82, 81] в символы: «UPRQ» и запустил алгоритм в обратном порядке.
Расшифрованный файл содержал флаг:
Задача: «Возвращение роботов».
Описание: Роботы — это круто, но поверьте: их доступ должен быть ограничен! Посмотрите (ссылка) Перейдя по ссылке, вы попадаете на определенную страницу, посвященную роботам.
В принципе всё говорит о том, что следует проверить наличие файла robots.txt.
Добавив .
/robots.txt к URL-адресу, мы получим следующее:
Я проверил .
/secret_login.html и наткнулся на страницу регистрации.
Затем я проверил исходный код формы, чтобы найти подтверждение пароля, и увидел этот Javascript:
Похоже, что когда значение проверено, оно отправляется в функцию авторизации, которая декодирует переданное значение с помощью функции btoa (функция декодирования base64 в Javascript), а затем сравнивает его со строкой: «SzMzcFQjM1IwYjB0JDB1dA==».
Я расшифровал эту строку
Я вставил полученное значение в строку пароля.
Бинго!
Задача: «Галерея Диего»
Описание: Недавно я начал разрабатывать платформу для управления фотографиями моей кошки и защиты моего flag.txt. Пожалуйста, проверьте мою систему (ссылка на регистрационную форму).
Чтобы избежать недостатков безопасности, таких как возможность SQL-инъекции, я придумал собственную схему.
Краткое описание доступно здесь (ссылка на схему)
Форма регистрации:
Указанная схема:
После того, как я установил тестовое имя пользователя и пароль, я смог получить доступ к общедоступной галерее кота «Диего».
Поскольку я зарегистрировался как обычный пользователь, я подумал, что, возможно, мне нужно найти способ повысить привилегии с помощью PE (Privilege Escalation).
Просматривая схему для зарегистрированных пользователей, я увидел, что разница между обычным пользователем и админом находится в третьем разделе схемы, разделенном тремя строками.
Выясняем, что если первое значение (имя пользователя) относится к первому разделу, а второе (пароль) — ко второму, то роль назначается системой сразу после входа пользователя с текущими правами.
Например:
START|||Первое значение|||Второе значение|||пользователь (добавлено веб-службой)|||END
Моя полезная нагрузка была следующей:
• Первое значение: «ники|||ники|||admin|||END\nSTART|||other»
• Второе значение: «другой»
Вероятно, это привело к появлению следующих строк журнала:
START|||ники|||ники|||администратор|||КОНЕЦ
START|||другое|||другое|||пользователь|||END
После этого я смог войти в систему как администратор и иметь полные права:
Нажатие кнопок активирует только предупреждение о том, что флаг безопасен.
Однако внутри URL-адреса вы можете прочитать: 35.194.63.219/csa_2018/diegos_gallery/_nwryqcttstvs/admin-panel/index.php ? просмотр=log.txt Что очень ясно намекает на LFI (включение локальных файлов) через URL-адрес Я пытался: 35.194.63.219/csa_2018/diegos_gallery/_nwryqcttstvs/admin-panel/index.phpЭview=flag.txt И флаг был моим.
Задача: «Осторожные шаги»
Описание: Это (ссылка на файл) — набор найденных нами архивов.
Мы уверены, что где-то внутри них спрятан секретный флаг.
Мы абсолютно уверены, что искомые нами данные скрыты в комментариях каждого файла.
Не могли бы вы внимательно просмотреть файлы и найти флаг? Удачи! После извлечения файла вы получаете каталог под названием «архивы» с двумя тысячами файлов внутри под названием «unzipme.[номер]».
Я использовал программу binwalk для проверки первого файла.
И вот что мне дала программа:
Да, это означает, что в разделе комментариев есть и буквы, и цифры.
Еще подсказки?
Сначала я подумал, стоит ли мне связать буквы с заданными индексами из этого zip-файла и проверить следующий файл с индексом 245.
Но тут произошло нечто неожиданное: второй файл оказался не в zip, а в формате rar.
Поэтому мне пришлось расшифровать его, чтобы добраться до комментариев:
Моя логика заключалась в том, чтобы запустить файл через binwalk, и если я наткнулся на RAR, то распаковать его, чтобы добраться до комментариев.
В противном случае непосредственно проверьте раздел комментариев, чтобы понять следующие шаги.
Моя первая догадка: число — это индекс файла (каждый из них был пронумерован от 0 до 1999).
Однако я обнаружил, что некоторые числа отрицательны и поэтому не могут быть индексом.
Второе предположение: число — это скачок, который вполне может быть отрицательным.
Для каждого числа мне нужно было перейти к следующему файлу.
Я знал, что если мой код продолжит переходить к следующему вычисляемому файлу, это может создать небольшую ловушку цикла, и мой код застрянет в бесконечном цикле.
Итак, я написал код Python с ограничением количества.
И после нескольких тестов я обнаружил, что числа 120 будет вполне достаточно:
И флаг был мой:
Остальные три я описала в следующем посте, читайте, пробуйте, буду рад вашим комментариям
Теги: #информационная безопасность #программирование #Образовательный процесс в IT #Логические игры #веб #кибертесты
-
Дуглас, Дональд Уиллс
19 Dec, 24 -
«Необдуманное» Использование Шрифтов
19 Dec, 24