SpartanCTF 2024

SpartanCTF 2024

Капибары

Общие впечатления: очень классное соревнование начального уровня 🤩 организаторы придумали кучу интересных задач, которые были интересны и достаточно несложны. Единственным жирным минусом стал рейтинг 0,0 на ctftime.

Оглавление:

Ссылка на архив со всеми файлами


Введение

С чего мы начинаем решение CTF? с поиска самой легкой задачи 😁 Для того, чтобы настроиться на положительные эмоции и уверенность в победе, понять как выглядит флаг, да и просто лучше решить свои задачи и получить удовольствие от участия, чем мучаться весь турнир и уйти "пустым".

Но не стоит забывать с поиска "подсказок" от оргов. Иногда это их Discord канал, в российских CTF зачастую закрывают глаза на подсказки в телеграм каналах. Поэтому обязательно краем глаза подглядываем, вдруг да что-нибудь интересное попадется.

В SpartanCTF пошли еще более легкой дорогой. CTF же начального уровня, поэтому они все, что может помочь поместили на отдельную страницу.

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


OSINT

Evesdropper

Задача, которая оказалось самой легкой, и помогла в решении остальных. Условие: My friend Eve hired me to find out who Bob has been messaging. She gave me some ciphertext from one of his messages, unfortunately, it's been encrypted with a cipher I don't recongize! This seems like a really tough hack. I wonder if there's an easier way to find out who he's talking to...

Format the flag like this: spartanCTF{name of person in all lowercase} ie; spartanCTF{mallory}, spartanCTF{trudy} (these are not the actual flag, but they are hints)

BEGIN CIPHERTEXT 78 105 99 101 32 106 111 98 32 114 101 99 111 110 103 105 122 105 110 103 32 65 83 67 73 73 44 32 98 117 116 32 116 104 105 115 32 119 97 115 32 106 117 115 116 32 97 32 114 101 100 32 104 101 114 114 105 110 103 33 32 82 101 109 101 109 98 101 114 44 32 104 97 99 107 105 110 103 32 105 115 32 97 98 111 117 116 32 102 105 110 100 105 110 103 32 116 104 101 32 101 97 115 105 101 115 116 32 119 97 121 32 116 111 32 103 101 116 32 116 104 101 32 100 97 116 97 32 121 111 117 32 110 101 101 100 46 32 73 110 32 97 32 114 101 97 108 32 119 111 114 108 100 32 115 99 101 110 97 114 105 111 44 32 121 111 117 32 109 105 103 104 116 32 116 114 121 32 103 111 111 103 108 105 110 103 32 66 111 98 32 116 111 32 115 101 101 32 119 104 111 32 104 101 39 115 32 107 110 111 119 110 32 116 111 32 98 101 32 114 101 103 117 108 97 114 108 121 32 105 110 32 99 111 110 116 97 99 116 32 119 105 116 104 32 40 115 111 99 105 97 108 32 109 101 100 105 97 47 98 108 111 103 32 112 111 115 116 115 44 32 112 105 99 116 117 114 101 115 44 32 98 117 115 105 110 101 115 115 32 112 114 111 102 105 108 101 115 44 32 101 116 99 41 46 32 77 97 121 98 101 32 121 111 117 32 99 111 117 108 100 32 101 118 101 110 32 116 114 121 32 103 111 111 103 108 105 110 103 32 115 101 118 101 114 97 108 32 111 102 32 116 104 101 32 110 97 109 101 115 32 112 114 111 118 105 100 101 100 32 116 111 103 101 116 104 101 114 32 97 110 100 32 115 101 101 32 119 104 97 116 32 121 111 117 32 103 101 116 46 46 46 END CIHPERTEXT

Решение: В глаза бросается, что это текст в ASCII кодировке, но результат оказался совсем не тот 😁

Nice job recongizing ASCII, but this was just a red herring! Remember, hacking is about finding the easiest way to get the data you need. In a real world scenario, you might try googling Bob to see who he's known to be regularly in contact with (social media/blog posts, pictures, business profiles, etc). Maybe you could even try googling several of the names provided together and see what you get...
или в переводе:
Хорошая работа по распознаванию ASCII, но это был всего лишь отвлекающий маневр! Помните, что хакинг — это поиск самого простого способа получить необходимые вам данные. В реальном сценарии вы можете попробовать погуглить Боба, чтобы узнать, с кем он регулярно общается (сообщения в социальных сетях/блогах, фотографии, бизнес-профили и т. д.). Может быть, вы могли бы даже попробовать поискать в Google несколько предоставленных имён и посмотреть, что вы получите...

Воспользовавшись этой подсказкой мы нашли статью "Алиса и Боб", в которой рассказывается про MitM атаки. В ней очень хороший перечень всех возможных участников, но как видно из названия - речь шла именно об Алисе.

Флаг: spartanCTF{alice}

Touch Base (25 баллов)

Самая простая задача, но с наскока ее взять не получилось, так как флаг сначала искали по шаблону "flag" 😁

Условие задачи: Добро пожаловать на первый в истории SpartanCTF! Этот конкурс спонсируется Клубом Нулевого Дня в Сент-Стивенсе. Если вы хотите узнать больше о ZDC, загляните на наш сайт!

Решение:

Очень сильно смущала подсказка на странице, что "флаг где то рядом".

Решив первую задачу, мы тут же скорректировали шаблон для поиска на "spartanCTF" и сразу получили результат

Флаг: spartanCTF{w3lc0m3_t0_th3_c1ub_bb78d66e} 

Recover (60) 

Условие задачи:

Look. I forgot the password to my account for the email server. Can you help me figure it out? I do, in fact, have a hashed version of the password (not that you'd be able to do anything with it): 07fc8e7f9f675b4281b1ac40ca187eb5da698024cb6bf893be62a96da33cfad5

Note: submit flag in format spartanCTF{PASSWORD}

Решение:

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

Если совсем простыми словами, то хэш это одностороннее преобразование любых данных, то есть восстановить исходное значение никак кроме перебора не получится. Так как такая задача возникает постоянно, то в интернете существует куча ресурсов, где есть те или иные хэши. Нам нужно сначала понять, что это за хэш. Для этого можно использовать вот этот сайт или утилиту hashID (pip install hashid).

Ага! это SHA256. А вот для подбора лучше этот сайт. Вводим туда 07fc8e7f9f675b4281b1ac40ca187eb5da698024cb6bf893be62a96da33cfad5 и получаем пароль bigdork!

Флаг: spartanCTF{bigdork!}

Hide and Seek (150)

Условие задачи: Наша команда по подбору персонала нашла многообещающего кандидата в наш отдел исследований аппаратного обеспечения (даже если его специальность — ремонт дискет). Не могли бы вы взглянуть на его учетную запись X, чтобы убедиться, что все честно? Мы хотим получить представление о присутствии этого парня в Интернете, прежде чем нанимать его... и на этот раз предотвратить очередной пиар-кошмар.

Решение: мы видим две подсказки

Чувак завел свой блог
он удалил из него какой-то пост. Подсказка "ты знаешь где его искать"

еще в твиттере есть ссылка на линкедин, но он не работает совсем. Поиск в гугле ничего не дал, поэтому пробуем посмотреть, что происходило в блоге. сайт https://dstein1971.github.io/ , вроде как начат на HTML5, шаблонные шаги (robots.txt и т.д.) не подходят совсем, понимаем, что нужно искать удаленный файл как и говорилось в подсказке 😁

Типовой вариант для решения таких задач - это использование сервиса https://web.archive.org/. Но он не подходит. Вебархив видит только одну версию, уже чистенькую, без нужной страницы. Но у нас сайт на гитхабе. Гитхаб - классная штука, она очень помогает при совместной истории над проектом, да и просто когда проект сложный, то благодаря ему можно всегда понять где что пошло не так. Обязательно научитесь им пользоваться. А у гитхабовских сайтов как и остальных проектов - есть классное свойство. 

Просмотр истории изменений вики-сайта
Так как вики-сайты являются репозиториями Git, каждое изменение, которое вы вносите, будет фиксацией, которую можно просмотреть.

Для того, чтобы посмотреть на сайт, надо зайти в реппозитории пользователя. То есть вместо адреса https://dstein1971.github.io/ вводим адрес https://github.com/dstein1971. Видим репозиторий сайта, и о чудо - он публичный. Переходим туда. Там файлик Readme с таким содержанием.

Это будет действительно крутой блог. Оставайтесь с нами, чтобы узнать действительно эпическую информацию о моей личной жизни. Возможно, даже слишком много понимания. Вот увидишь. В этом блоге будет на 100% меньше конфиденциальную информацию (токены, пароли, флаги), чем мой последний. Ничего необычного искать здесь бесполезно.

Здесь могут быть несколько вариантов. Может быть это другая версия этого блога или вообще отдельный ресурс. Быстрый поиск старых версий не нашел ничего нового. 

Значит надо искать здесь. Так как репозиторий публичный, то его историю можно посмотреть, и видно, что коммитов было аж 4. При их просмотре бросается в глаза, что один файл удален. Смотрим - и вуаля. Там флаг!

 Флаг: spartanCTF{th1s_1s_n0t_a_great_1d3a_dcccfd40} 


Crypto

Whose Encoding Is It Anyway? [I] (30)

Это класс задач связан с криптографией. Слишком сложные, связанные с RSA ключами, нам решать еще рано, но в этой CTF все простые. Их обязательно стоит попробовать, чтобы просто познакомиться с этой областью. Первая задача - как и в OSINT'е немного неочевидна, несмотря на ее простоту :)

Условие задачи: You have been randomly selected to participate in a study focused on the inherent complexities of certain types of text encodings. Please attempt to translate the below text into a human readable format. ONYGC4TUMFXEGVCGPNVHK43UL5QW4MDUNBSXEXZQMJZTA3BTOQZV6ZLOMMYGIMLOM5PTIYJYGA4WGYRZPU======

Решение:

Да, в условии задачи есть подсказка, что перевести надо в ЧЕЛОВЕЧЕСКИЙ формат, но догадаться, что это "машинный" мне кажется, что ребенку очень сложно.

Важно: Стоит запомнить, что если в тексте только читаемые буквы и цифры и в конце символ равно (=), а если они еще и отформатированы по 80 символов в строке, то стоит копать в сторону машинных форматов для передачи данных или BASE16/32/58/64 формат. 

У нас только большие буквы и от A до Z, это BASE32 формат.

А еще можно воспользоваться очень хорошим сервисом от dCode со странички "Ресурсы" CTF. Он распознает более 200 шифров и в удобном виде выдает результат пользователю.

Результат анализа от dCode

Ищем любой BASE32 декодер, вбиваем строку и получаем флаг

Флаг: spartanCTF{just_an0ther_0bs0l3t3_enc0d1ng_4a809cb9}

Crossing the Rubicon [I] (30)

Условие задачи: Once you get into cryptography, you really can't go back! But, to learn how modern ciphers work, you have to go way back to the very fist ciphers. Hailing from Ancient Rome, this might just be the most famous code of all time, which means it isn't great for security. Take a stab (or 23) at cracking this one!

Qefp lkb'p molyxyiv ybpq ibcq ql efpqlov. Kfzb tloh! Cixd: pmxoqxkZQC{3_7r_Yor7b?37284749}

Решение: В названии и условии задачи есть подсказка про Древний Рим. Наиболее известный шифр того времени - шифр Цезаря. Надо только определить на сколько сдвигать алфавит и куда. Здесь поможет часть Cixd pmxoqxkZQC - это Flag: spartanCTF.

Стоит отметить, что и здесь можно воспользоваться qCode для распознавания алгоритма. Но злоупотреблять, все-таки, не надо. CTF - это поиск интересных решений, это разминка для мозгов, а не конкурс по скорости запуска общедоступных утилит 😁

Сравним Cixd с Flag, мы понимаем, что "сдвинуть" надо на 3 шага вперед. Запускаем "шифровальщик" и получаем

Флаг: spartanCTF{3_7u_Bru7e?37284749}

Something’s Fishy Here (30)

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

Условие задачи: My cousin finally stopped talking about mystery novels, but now he obsessed with this aquatic life book. He sent me this message. At least it's all letters this time...

iisiiiisdddddddddddddddooiiiiodddddddddddddddddddddoiiiiiiiiiiiiiiiiiooioddddddddddddddddddoiiiiiiiiiiiiiiiiiiiiiiiiioddodddddddddddddddddddddddoiiiiiiiiiiiiiiiiiooiiioddddddddddddddddddddoiiiiiiiiiiiiiiiiiooiiiiioddddddddddddddddddddddoiiiiiiiiiiiiiiiiiiiiiiiiioddodddddddddddddddddddddddoiiiiiiiiiiiiiiiiioododdddddddddddddddoiiiiiiiiiiiiiiiiiiiiiioiodddddddddddddddddddddddoiiiiiiiiiiiiiiiiiiiiiiiioddddoddddddddddddddddddddoiiiiiiiiiiiiiiiiiiiiiiiodddddddoddddddddddddddddoiiiiiiiiiiiiiiiiioioiodddddddddddddddddddoiiiiiiiiiiiiiiiiiooiiiiodddddddddddddddddddddoiiiiiiiiiiiiiiiiiooiiiiiiiiodddddddddddddddddddddddddoiiiiiiiiiiiiiiiiiiiioiiiiiodddddddddddddddddddddddddoiiiiiiiiiiiiiiiiiodoiiiiiiiiiodddddddddddddddddddddddddoiiiiiiiiiiiiiiiiiodoiiiiiiiiiodddddddddddddddddddddddddoiiiiiiiiiiiiiiiiiiiioiiiiiodddddddddddddddddddddddddoiiiiiiiiiiiiiiiiioododdddddddddddddddoiiiiiiiiiiiiiiiiiodoiiiodddddddddddddddddddoiiiiiiiiiiiiiiiiiiiiiiiiioddddodddddddddddddddddddddoiiiiiiiiiiiiiiiiiooiiiiiiiiodddddddddddddddddddddddddoiiiiiiiiiiiiiiiiiiiioiiiiiodddddddddddddddddddddddddoiiiiiiiiiiiiiiiiiooiiiiioddddddddddddddddddddddoiiiiiiiiiiiiiiiiiodoiiiioddddddddddddddddddddoiiiiiiiiiiiiiiiiiiiiiiiiioddddodddddddddddddddddddddoiiiiiiiiiiiiiiiiiooiiiiioddddddddddddddddddddddoiiiiiiiiiiiiiiiiiodoiiiioddddddddddddddddddddoiiiiiiiiiiiiiiiiiiiiioddddodddddddddddddddddoiiiiiiiiiiiiiiiiiiiiiiiiioddddodddddddddddddddddddddoiiiiiiiiiiiiiiiiiodoiioddddddddddddddddddoiiiiiiiiiiiiiiiiiiiioiiiiiodddddddddddddddddddddddddoiiiiiiiiiiiiiiiiiooiiiiodddddddddddddddddddddoiiiiiiiiiiiiiiiiiodoiiiioddddddddddddddddddddoiiiiiiiiiiiiiiiiiiiioiiiiiodddddddddddddddddddddddddoiiiiiiiiiiiiiiiiiiiiioddddodddddddddddddddddoiiiiiiiiiiiiiiiiiooiiiiodddddddddddddddddddddoiiiiiiiiiiiiiiiiiiiiioioddddddddddddddddddddddoiiiiiiiiiiiiiiiiiiiiioodddddddddddddddddddddoiiiiiiiiiiiiiiiiiiiiiodddddoddddddddddddddddoiiiiiiiiiiiiiiiiiiiiioiiodddddddddddddddddddddddoiiiiiiiiiiiiiiiiiiiiiodddoddddddddddddddddddoiiiiiiiiiiiiiiiiiiiiioodddddddddddddddddddddoiiiiiiiiiiiiiiiiiiiiiododdddddddddddddddddddoiiiiiiiiiiiiiiiiiiiiiodddoddddddddddddddddddoiiiiiiiiiiiiiiiiiiiiiodddddoddddddddddddddddoiiiiiiiiiiiiiiiiiiiiioiiodddddddddddddddddddddddoiiiiiiiiiiiiiiiiiiiiiodddddoddddddddddddddddoiiiiiiiiiiiiiiiiioioiiio

Перепробовали кучу вариантов. Да, в условие задачи есть подсказки и про рыбу и про что то водное, но в чистом виде поиск не находил ничего.  Как мы не бились, но, все-таки, пришлось использовать qCode, который выдал:

А дальше уже анализ статьи Deadfish Language, преобразование в ASCII и Ура!!! Есть готовый результат 😁

Флаг: spartanCTF{sw1mm1ng_w1th_th3_f1sh13s87294764292}

Crossing the Rubicon [II] (35)

Условие задачи: Welcome to the sequel! Repeating a lucky number can be dangerous when encoding, so someone thought to choose an unlucky one to encode messages. I think this challenge will be a good addition to the practice rotation!

Ubj'q lbh yvxr gur frdhry? EBG-13 vf erpvcebpny, ohg abg irel fnsr. Avpr unpx! Urer'f lbhe cevmr: fcnegnaPGS{13_12a'g_YhPX7_4sg3e_411.27453829}

Решение: У нас аккуратный текст, с читаемыми шифрами, значит перед нами что-то из шифров замены. Аналогия с задачей про Цезаря подталкивает к мысли, что может быть изменился "шаг" замены. В тексте есть словосочетание "EBG-13" которое может быть подсказкой про один из вариантов шифра Цезаря (ROT-13) и желанный флаг spartanCTF в виде fcnegnaPGS.

Проверка строки на "шифровальщике" позволяет сразу получить ответ:

How'd you like the sequel? ROT-13 is reciprocal, but not very safe. Nice hack! Here's your prize: spartanCTF{13_12n't_LuCK7_4ft3r_411.27453829}

Флаг: spartanCTF{13_12n't_LuCK7_4ft3r_411.27453829}

Whose Encoding is it Anyway? [II] (50)

Условие задачи: You have been randomly selected to participate in a study focused on the inherent complexities of certain types of text encodings. Please attempt to translate the text (found within the attached image) into a human readable format.

Flag should follow outline format as shown in image.

Решение: Для поиска ответа мы воспользовались сервисом поиска картинок

для расшифровки пробежались глазами и получили строку вида: who_is_this_chappe_guy

Флаг: spartanCTF{who_is_this_chappe_guy}

Numbers on the Orient Express (80)

Условие задачи: My cousin is really obsessed with mystery novels. He just finished one by his favorite author, Caeser Eightrows the Eighth, called "Rail Fence" . My uncle gave me this message he wrote, but it seems to be encoded somehow...

k_1h3S40s309}jS25l{S1sXJ0fLV6U!

Решение: Сначала мы перевели условие задачи:

Мой двоюродный брат действительно одержим детективными романами. Он только что закончил работу своего любимого автора Caeser Eightrows the Eighth под названием «Rail Fence». Мой дядя передал мне это послание, которое он написал, но оно, кажется, каким-то образом закодировано...

Жирным выделены подсказки от организаторов 😁 Шифр "Rail fence" относится к перестановочным шифрам и взламывается методом перебора. Можно использовать скрипт на питоне, а можно воспользоваться и сервисом от dCode.

Но автомат ничего хорошего нам не выдал 😁 и вот здесь приходит на помощь вторая подсказка Eightrows the Eighth. Задаем вот такие параметры:

Меняем число Rows на 8

и получаем результат чуть чуть более похожий на правду

Здесь у нас уже фигурные скобки на своих местах, первые 7 букв (spartan) маленькие, 3 следующие (CTF) большие и что то похожее внутри. Да, это шифр Цезаря со сдвигом на 🠞18 (🠜8). Запускаем dCode и получаем флаг, после понимания что в этой задаче двигать нужно и цифры!

Флаг: spartanCTF{A11_A80ARD!48937298}


Forensics

In Plain Sight (50)

Условие задачи: A graphic designer sent us a simple logo that we can use for our club. They even said that they left a little easter egg in the image. I took a look already but couldn't find anything. Maybe you can?

Картинка

Решение: используем steghide или сервис от организаторов.

Находим вот такое сообщение: c3BhcnRhbkNURntoMWRkZW5fMW5fcGxhMW5fc2lnaHRfYWJiNTA2NWF9Cg==

Вспоминаем правило из Whose Encoding Is It Anyway?

Такие строки указывают на машинный формат передачи данных. Большие и маленькие буквы - это BASE64. Запускаем декодер и получаем флаг.

Флаг: spartanCTF{h1dden_1n_pla1n_sight_abb5065a}

Desist (60)

Условие задачи: Some punk keeps on trying to pressure us to taking down our website with these bogus cease and desist letters. Would you mind looking at one to see if you can figure out who is really sending them?

Файл

Решение: Небольшая статья о том, что такое метаданные и почему важно их очищать.

Флаг находится в поле Producer метаданных файла. Можно посмотреть lister от Total Commander, можно любым сервисом pdf metadata online, а можно программами.

Флаг: spartanCTF{n3v3r_f0rget_th3_m3tadata_5b1bfc6e}

Lack of Authority (99)

Условие задачи: I'm trying to get the new website up and running. The only problem is that I can't seem to get anyone to sign my SSL cert. Can you figure out why no CAs will take it?

Файл

Решение: Небольшая статья о том, что такое SSL сертификаты и как они помогают защититься от злоумышленника.

Флаг находится в полях Name и Issue. Их можно посмотреть или при помощи большой программы openSSL или маленькой утилиты showcert.

Флаг

Флаг: spartanCTF{w3lc0me_t0_th3_w0rld_0f_auth0r1ty}

Can You Hear the Music (120)

Условие задачи: We hired a freelancer off of the Internet to produce some on-hold music for our phone lines. It seems like the file we received though is partially corrupted. Could you take a look at the audio and see what's up?

Файл

Решение задачи: wav - это звуковые файлы. При попытке его проиграть слышно как на заднем плане что то непонятно пищит, но музыка все глушит. Такие задачи решаются через Audacity, наверное, лучший звуковой редактор для подобных целей. Грузим туда файл и видим, что в одном канале музыка, а в другом какой то шифр.

Результат работы Audacity

Иногда бывает так, что раскидано по отдельным трекам (так еще проще, просто удаляем ненужный трэк). В данном случае мы просто выкручиваем баланс на наш канал и принудительно экспортируем только его. Получается какое то пиликание.

Первая мысль была, что это азбука Морзе. Но нет, здесь нет "точки тире", а только точки, но у них разный тон. Это называется DTMF или тональный набор. 

На слух декодировать его в отличие от азбуки Морзе не получится. Делали на сайте https://dtmf.netlify.app/ Он выдал вот такую последовательность: 1151129711411697110678470123108511169510951951045211851959711712095110511201169511649109101955652985151989748125

Что это? правильно. Это ASCII (от 32 до 127), но слепленная в кучу. Разбиваем пробелами 115 112 97 114 116 97 110 67 84 70 123 108 51 116 95 109 51 95 104 52 118 51 95 97 117 120 95 110 51 120

и скармливаем нашему скрипту

ps = str.split(" ")
p = ""
for q in ps:
  p += int(q.strip())
print(p)

и получаем

Флаг: spartanCTF{l3t_m3_h4v3_aux_n3xt_t1me_84b33ba0}


Interactive

Talk to Me [I] (80)

Условие задачи: Let's see if you know your way around a terminal. All you have to do is connect and play along.

Connect to the service for this challenge with the connection info listed below.

0.cloud.chals.io:33987

Решение:

Тем ребятам кто пользуется Linux решить такую задачу очень просто. Нужно подключиться netcat'ом к этому серверу.

На Windows это сделать сложнее netcat и telnet в состав Windows сейчас не входят. Надо ставить что то похожее. Обычное решение - nmap, но он достаточно сложен и громоздок.

Поэтому давайте мы вспомним наш первый урок и включим виртуальную машину с Kali Linux. Там в терминале вбиваем nc 0.cloud.chals.io:33987 и после приветственных сообщений сервер выдаст нам флаг.

К сожалению, мы его не сохранили 🤷‍♂️


Misc

Day by Day (99)

Условие задачи: I was going back through our service logs to verify that no one has been tampering with our defensive security measures. I generated a list of dates -- days that our firewall was proven to be online on. Alas, it seems like someone disabled our firewall for one day. I need your help to figure out what day that was. Also, the list is not in any particular order. Good luck.

The flag is in the format spartanCTF{DATE}, where DATE is in the form of YYYYMMDD

Файл

Решение: Нам в файле из 10000 строк с датами нужно найти пропущенный день. Файл не сортирован. Руками это сделать невозможно. Задача решается с помощью скрипта на любом языке.

Мы выбрали Питон. Алгоритм простой:

  • читаем файл в массив, убирая лишние пробелы и переводя в даты
  • сортируем массив
  • проходим по каждому элементу и проверяем разницу с предыдущим
  • как только нашли больше суток, останавливаемся и сообщаем о том, что нашли

Код скрипта

import datetime
p = open("dates", "r").readlines()
p.sort()
last = None
for a in p:
    t = datetime.datetime.strptime(a.strip(), '%Y%m%d')
    if last != None:
        if (t-last).total_seconds() > 86400:
            print(a)
            break
    last = t

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

Флаг: spartanCTF{19990919}

Down the Rabbit Hole (170)

Условие задачи: I found this file on a USB drive that was left by somebody after the last club meeting. I'm not at my computer right now so I can't open the archive myself. Would you mind looking through the archive to figure out what's on it?

Файл

Решение: По правильному - надо было бы писать скрипт, который все делал красиво, но выбрали путь короче. С использованием свойств тоталкоммандера и winrar. Алгоритм простой:

  1. копируем файл в отдельную директорию, меняем расширение на rar
  2. Выделяем через + и маску "*.rar" все файлы и распаковываем их с выбор "Переименовать для всех" при первом совпадении
  3. Выделяем через + и маску "*.rar" все файлы и удаляем их
  4. Выделяем через + и маску "*.zip" все файлы и f6 меняем расширение на *.rar
  5. Повторяем шаги 2-4 до тех пор пока не появятся куча файлов rabbit
  6. alt-f7 и поиск в каталоге текста spartanCTF

в результате получаем файлик rabbit(306), в котором и лежит

Флаг: spartanCTF{th4nk_y0u_m0rpheus_11ec1158}

Ссылка на архив со всеми файлами

Report Page