ppc ctf что такое

Разбор задач по CTF

В начале декабря мы провели командные соревнования по информационной безопасности. Помимо OTUS, организаторами мероприятия для «белых хакеров» выступили Volga CTF и CTF.Moscow. Пожалуй, пришла пора подвести итоги и подробно рассказать о заданиях.

Во-первых, мероприятие удалось:

Во-вторых, задания были разными по сложности, поэтому решение оказалось не всем под силу:

ppc ctf что такое. Смотреть фото ppc ctf что такое. Смотреть картинку ppc ctf что такое. Картинка про ppc ctf что такое. Фото ppc ctf что такое

В-третьих, сразу после завершения онлайн-марафона мы провели три вебинара, где рассказали про победителей, дали правильные ответы и объявили окончательные результаты:

— итоги CTF: «Безопасность Linux и безопасная разработка»;

— итоги CTF: «Реверс-инжиниринг».

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

Направление 1: «Пентест»

Задание 1 — Databases

Сайт активно использует базы данных. Попробуй провести SQL-инъекции.
Ссылка на сайт: http://193.41.142.9:8001/shop/login

Идем в основной раздел магазина /shop/products/, потыкав в поле поиска, обнаруживаем sql-инъекцию.

Задание 2 — Cookies

Мой знакомый разработал платформу онлайн-магазина. Он попросил провести blackbox-тестирование. Проверь безопасность cookie, возможно, ты сможешь получить права администратора.

Ссылка на сайт: http://193.41.142.9:8001/shop/login

Логинимся, смотрим куки и видим куки secret:

Декодим base64, получаем бинарные данные: 1111011 100010 1110101 1110011 1100101 1110010 1101110 1100001 1101101 1100101 100010 111010 100010 1110101 1110011 1100101 1110010 100010 101100 100000 100010 1101001 1110011 1011111 1100001 1100100 1101101 1101001 1101110 100010 111010 100010 1000110 1100001 1101100 1110011 1100101 100010 1111101

Переводим в текст и получаем: <"username":"user", "is_admin":"False">, меняем False на True и декодим обратно:

01111011 00100010 01110101 01110011 01100101 01110010 01101110 01100001 01101101 01100101 00100010 00111010 00100010 01110101 01110011 01100101 01110010 00100010 00101100 00100000 00100010 01101001 01110011 01011111 01100001 01100100 01101101 01101001 01101110 00100010 00111010 00100010 01010100 01110010 01110101 01100101 00100010 01111101

Меняем значение куки на новое и заходим в профиль пользователя.
Flag: flag

Задание 3 — File reading

Зачастую мы сталкиваемся с утекающими исходниками и странной логикой работы. Возможные вектора атак обычно находятся фаззингом. Предлагаю тебе этим заняться.

Ссылка на сайт: http://193.41.142.9:8001/shop/login

Ознакомившись с исходником _source понимаем, что перед нами уязвимость Path Traversal + несколько простых фильтров.

В ответе на запрос будет флаг.

Направление 2: «Безопасность Linux и безопасная разработка»

А не дал ли нам заказчик чего лишнего?
В архиве содержится исходный код части сайта.
Ссылка на сайт: http://193.41.142.9:8002/
Вложение: task.7z

У нас новая задача. Провести проверку safe development. Заказчик предоставил архив с открытой частью разрабатываемого сайта. Для проверки своего алгоритма хеширования он предоставил хеш: 666c61677b32646733326473323334327d. Проверь алгоритм на возможность обратного преобразования.

В архиве содержится исходный код части сайта.
Ссылка на сайт: http://193.41.142.9:8002/
Вложение: task.7z

В исходных кодах есть алгоритм хеширования паролей. На самом деле, это не алгоритм хеширования, а просто преобразование данных из строкового формата в шестнадцатеричный.

Задание 3 — Files files files

Давай доводить аудит до конца. Ты тоже видишь эту уязвимость? Отлично. Значит, достать секретный файл тебе несложно.
В архиве содержится исходный код части сайта.
Ссылка на сайт: http://193.41.142.9:8002/
Вложение: task.7z

В исходном коде основного модуля программы можно заметить читалку файлов (это основное применение данного сервиса). Функция проверки существования файла никак не проверяет специальные символы и просто конкатенирует две строки => уязвимость path-traversal.

Также в Dockerfile, docker-compose.yml можно увидеть отображения файлов и структуру загрузки в контейнер. Используя эти знания, генерируем полезную нагрузку:

Направление 3: «Реверс-инжиниринг»

Задание 1 — Snake
100

Наша компания всегда пытается обойти любую защиту программ. Помоги нам разобраться с Питоном в этот раз.
Прилагается файл: task.pyc

Используем байт-код Python, декомпилирующийся модулем uncompyle6:
uncompyle6 task.pyc.
Декомпилируем, получаем флаг:

В этот раз нам попалось странное приложение, помоги найти пароль для входа.
Вложение: app.apk

Приложение на андроиде, поэтому достаточно загрузить его в статический анализатор типа BytecodeViewer и посмотреть восстановленный исходный код программы. Заметим, что это Kotiln, а в нем часто используется функциональное программирование, как и в этом случае. В одной из декомпилированных анонимных функций найдем проверку флага, сама проверка:

Видим что это похоже на закодированные печатные символы. Используем Python:

».join(chr(x) for x in [ 102, 97, 50, 98, 102, 54, 52, 54, 101, 52, 57, 97, 98, 53, 101, 53, 54, 102, 50, 98, 55, 52, 52, 56, 48, 98, 97, 54, 49, 48, 49, 55 ])

В этот раз нам попался бинарный файл. Задача все та же, достать секретный пароль.
Вложение: task

Решение:
Дан бинарный файл. Загружаем в дизассемблер и видим шесть функций проверки, написанных на С++.

Они выполнены идентично и вызываются друг в друге, проверяя флаг по кусочкам из 5 элементов.

Поэтапно восстанавливаем с помощью информации из дизассемблера. Получаем флаг частями:

0) проверка длины
1) flag <
2) feefa
3) _172a
4) k14sc
5) _eee>

Объединяем и получаем флаг:

Вот и всё, коллеги! Всем спасибо за участие, берегите себя, своих близких и свои данные! С наступающим Новым годом!

Источник

Мамкины хацкеры или мой путь в CTF

Это был далекий 2014 год, когда еще зеленые, недавно поступившие в универ, парни, услышали, что есть какие-то соревнования с завлекающим названием — «Capture the flag» (сокр. CTF, в переводе «Захват флага»).

ppc ctf что такое. Смотреть фото ppc ctf что такое. Смотреть картинку ppc ctf что такое. Картинка про ppc ctf что такое. Фото ppc ctf что такое

Фото с сайта securitylab.ru к новости про Facebook CTF 2016

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

Итак, давайте теперь я вам немножко поведаю:

1. CTF (Capture the flag или Захват флага) — командные соревнования (изредка бывают личными) в области компьютерной (информационной) безопасности.

2. Формат проведения :

2.1. Task-based (или jeopardy) — игрокам предоставляется набор тасков (заданий), к которым требуется найти ответ (флаг) и отправить его.
Пока все более чем просто, обычные правила, но только все задания в этом формате разделены на категории (расскажу про основные):

Криптография — задания связаны с расшифровкой сообщений, защищенных различными алгоритмами (от самых простейших до современных шифров);
Стеганография — наука о тайной передаче информации путем сокрытия самого факта передачи. Следовательно, вам нужно найти, как именно и какую информацию передали (очень интересная тема, позже накатаю статей);
Web — поиск уязвимостей на серверах и сайтах (используются специально развернутые сервера и сайты на них, не ведется взлом открытых платформ);
Реверс-инжиниринг — исследование кода программного обеспечения, дальше методы зависят от задания (очень муторная тема, для усидчивых);
Recon — моя любимая тема поиска информации по открытым источникам (OSINT, разведка). Тема, которой тоже будет посвящен отдельный блок статей;
Joy — развлекательные задачи разнообразной тематики.
2.2. Attack-Defense (или classic) — каждая команда получает выделенный сервер или небольшую сеть для поддержания её функционирования и защиты. Во время игры команды получают очки за корректную работу сервисов своего сервера, защиту своей информации и за украденную информацию (она же — «флаги») с серверов соперников.

3. Уровень соревнований
Международный уровень: самое престижное соревнование DEF CON CTF, которое ежегодно проходит в Лас-Вегасе и собирает сильнейшие команды мира (берет свое начало с девяностых годов).

Россия: имеет активное развитие с 2009 года. Проводятся множество локальных соревнований (в ВУЗах, городах, округах) в различных режимах.
Самый масштабный CTF в России — RuCTFE, победа в котором даёт возможность попасть на DEF CON CTF.
Интересный факт: В 2014 году в RuCTFE сражалось уже 322 команды из различных стран мира!

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

Следом, мы начали изучать сайт ctftime.org — тут размещено расписание всех соревнований (по всему миру) и рейтинг команд-участников (зарегистрированных на сайте).

Мы адекватно понимали, что Attack-Defense нам пока не светит, но порешать какие-нибудь задания в формате Task-based, чтобы набраться опыта, мы были готовы.

Первый в жизни CTF

Нам несказанно повезло, что один из ближайших CTF’ов был русский, а именно School CTF (организатор — команда SiBears), в котором было разделение между школьниками и не школьниками и указано время проведения — 8 часов (кажется это было именно так).

Конечно же, было очень важно зарегистрироваться… Но как? Какое название команды?

Как-то так получилось, что именно я организовал наше участие и стал негласным «капитаном» команды.

Это же был первый раз, а мы понимали, что морское ДНОэто как раз мы в этих соревнованиях… Собственно, не долго думая, я предложил и здравствуйте, Мы — команда DnO.

Мы вооружились ноутбуками, ручками, блокнотами и переживали, что нам еще может понадобиться.

Итак, началось… Мы открыли задания и для нас это были иероглифы, которые никак не складывались в предложения (тем более в задания).

Но, спасибо Google, мы постепенно начали разбираться что означает то или иное слово и наконец начали гуглить не просто слова, а уже пытаться решать задания и, стоит отметить, у нас это даже получалось…

ppc ctf что такое. Смотреть фото ppc ctf что такое. Смотреть картинку ppc ctf что такое. Картинка про ppc ctf что такое. Фото ppc ctf что такое
Предварительные результаты

Стоит отметить, что мы были на кураже, у нас многое получалось и мы чувствовали, что старт был более чем идеален. Как вы можете увидеть на предварительных результатах, мы держали 6 место, но потом сместились примерно на 10 (но с учетом количества команд, мы уже не думали об этом, а отмечали успешный старт).

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

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

Что за команда DnO?

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

Вдруг, произошло интересное событие, мы собрались на очный CTF (до этого всегда выступали только online), кажется это был QCTF и проходил он в Москве, а точнее в МИРЭА. Естественно, это совсем другая энергетика, вокруг все давит, потому что ты не сидишь себе на диване спокойно, но ощутить это тоже хочется.

ppc ctf что такое. Смотреть фото ppc ctf что такое. Смотреть картинку ppc ctf что такое. Картинка про ppc ctf что такое. Фото ppc ctf что такое
Фото одного из заданий QCTF

Была безумно интересная космическая тематика, задания различного уровня, мы выступали достойно, потому что эти соревнования были «для новичков», каковыми считались и мы.

Как итог, команда DnO из 20 команд заняла почетное 4 место (ну вы понимаете как было обидно), но когда мы вернулись в универ, нам сказали, что это обязательно надо рассказать всем, как там называется ваша команда?

Этот вопрос поставил нас в тупик… Конечно, парни особо не загонялись и такие: «Ну ты же предлагал DnO, теперь давай придумывай расшифровку, чтобы весь ВУЗ над нами не ржал в голос».

После часа штудирования словаря, придумал единственную адекватную расшифровку как Destroy Network of Opponent, что переводится как «Уничтожить сеть противника» (спасибо, что предлоги не учитываются в сокращениях).

С тех самых пор мы следовали старой поговорке про судно… Как назвали, так и поплыло.

Первая победа «пополам»

В очередной раз мы решили попробовать свои силы на очном CTF, только в этот раз было решено посетить город-герой Волгоград.

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

ppc ctf что такое. Смотреть фото ppc ctf что такое. Смотреть картинку ppc ctf что такое. Картинка про ppc ctf что такое. Фото ppc ctf что такое
Команда DnO в Волгограде

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

Финальный «свисток» и мы… Вторые? Как? Но ведь… У нас одинаковое количество очков, но команда Life сдала последний флаг раньше нас по времени, из-за чего мы заняли второе место… Команда DnO впервые была близка к победе, но упустила её в последний момент.

ppc ctf что такое. Смотреть фото ppc ctf что такое. Смотреть картинку ppc ctf что такое. Картинка про ppc ctf что такое. Фото ppc ctf что такое
Финальный скорборд соревнований VolSUCTF

Первый Кубок CTF России

Прошло пару месяцев, мы не оставляли попытки добиться высоких результатов в различных online CTF’ах, но всё было тщетно, а тут мы еще узнали, что идёт набор на ПЕРВЫЙ «Кубок CTF России», а отбор на него идет по результатам отдельно выбранных организаторами CTF, проходивших с начала года.

Естественно, среди них был и VolSU CTF, в котором мы успешно заняли 2 место и, по сути не проходили на этот безумно интригующий ПЕРВЫЙ Кубок…

Однако, после мониторинга обстановки, нам стало известно, что команда Life, с которой мы поделили 1 место, участвует в данном мероприятии как организатор… Ииииииииии, да, команда DnO приглашается на «I Кубок CTF России», как призер VolSU CTF.

Естественно, не было известно абсолютно ничего про данное мероприятие и все, что нам оставалось, это усиленно готовиться.

Пропуская все нюансы подготовок, мы приезжаем в Инновационный центр Сколково, где собрались 20 лучших команд со всей страны.

ppc ctf что такое. Смотреть фото ppc ctf что такое. Смотреть картинку ppc ctf что такое. Картинка про ppc ctf что такое. Фото ppc ctf что такое
I Кубок CTF России. День первый. Task-based.

Нас встречают, выдают приколюхи (наклейки, футболки и самое главное, ФЛАЖКИ!)

ppc ctf что такое. Смотреть фото ppc ctf что такое. Смотреть картинку ppc ctf что такое. Картинка про ppc ctf что такое. Фото ppc ctf что такое
Тот самый, заветный флаг команды DnO

Быстрая жеребьёвка и мы узнаём какой у нас номер стола, ушли готовиться. Оперативно развернув свои печатные машинки, выступление организаторов мероприятия, где мы узнаём интересные новости, а именно:

1. Кубок проходит в 3 этапа за 2 дня;
2. Этап №1 Task-based (участвует 20 команд, проходят в следующий этап 10 лучших);
3. Этап №2 Attack-Defense (участвует 10 оставшихся команд, в следующий этап проходят 4 лучших);
4. Этап №3 Финал. (участвуют 4 команды, что будет происходить — тайна, покрытая мраком. ).

Не заглядывая вперед, начали готовиться к первому этапу сие мероприятия, которое обещало быть увлекательным…

Изнурительные 8 часов работы с приостановкой соревнований на обед. Мы выкладывались на полную, показывали лучшую командную работу, которая была когда-либо и за это получали заветные «флаги», очки, которые могли вывести нас в следующий раунд.

Забыв про Scoreboard (таблицу результатов), мы работали до последней секунды данного этапа и, не без везения, мы занимаем 6 строчку в таблице.

ppc ctf что такое. Смотреть фото ppc ctf что такое. Смотреть картинку ppc ctf что такое. Картинка про ppc ctf что такое. Фото ppc ctf что такое
Scoreboard после 1 тура Кубка CTF России

За нашим столом гробовое молчание… Никто не верит, что мы не просто прошли во второй этап, мы прошли уверенно.

Только после того, когда нас пришел поздравить наш куратор, мы осознали, что происходит и с нашего лица больше не сходила улыбка.

Это явно был наш день, мы его заслужили.Никаких разборов, только еда и хороший отдых перед вторым днём соревнований.

Да, мы понимали, что очень слабы в Attack-Defense, но всё равно были заряжены трудиться до последнего.

Когда мы сели за стол и снова развернули наши печатные машинки, удивлению не было предела…

ppc ctf что такое. Смотреть фото ppc ctf что такое. Смотреть картинку ppc ctf что такое. Картинка про ppc ctf что такое. Фото ppc ctf что такое
Наше «задание» второго этапа. Своя криптоферма.

Мы увидели эту, не сказать что огромную, коробку и сколько в ней всего, как там всё устроено и осознали, что попали по самое небалуй…

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

Стоит отметить, что наши старания не прошли мимо, мы все же подняли сервер и даже получили некоторую часть флагов, но, естественно, этого было мало, другие команды были куда более подготовлены…

Итог, 9 место на втором этапе. Конечно, есть небольшое расстройство, но задачу минимум мы выполнили, чем стоило гордиться.

ppc ctf что такое. Смотреть фото ppc ctf что такое. Смотреть картинку ppc ctf что такое. Картинка про ppc ctf что такое. Фото ppc ctf что такое
Scoreboard 2 этапа.

Этап длился всего 4 часа, а финал планировался на после обеда, смотреть его мы уже не пошли (честно, не было сил), но там было не менее интересно, потому что там была война роботов, правда управление ими было не через пультик, а с помощью программирования.

До такого уровня, нам явно было далековато…

Именно этим Кубком закончилось моё выступление в этой команде и как капитана и как участника… Я выпустился, другие ребята взяли всё на себя, которые были заряжены и готовы идти дальше.

Но это уже совсем другая история.

Отдельно хочется поблагодарить организаторов таких соревнований (различные CTF-команды, а также организацию АРСИБ), наставникам, кураторам, моим друзьям, выступавшим за эту команду, и ребятам, выступающим за другие команды.

Никто не забыт, огромное спасибо за это превосходное время!

То, что описано в этой статье, определенно развернуло мою жизнь градусов на 60 минимум:D
А успехи команды вы можете посмотреть вот тут.

Источник

Битвы хакеров: разбор заданий PHDays CTF и CTF Quals

Positive Hack Days CTF — международные соревнования по защите информации, которые проводятся по игровому принципу Capture the Flag. Несколько команд в течение заранее отведенного времени защищают свои сети и атакуют чужие. Основная задача участников — выявлять уязвимости в системах противников и получать доступ к секретной информации (флагам), при этом обнаруживая и устраняя подобные уязвимости в своей системе.

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

История и география

В этом году PHDays CTF состоится уже в четвертый раз. Впервые соревнования прошли во время форума Positive Hack Days в 2011 году, тогда победителями стали участники американской команды PPP, в следующем году победила российская команда Leet More, а на PHDays III чемпионами стали Eindbazen из Голландии. Каждый год в PHDays CTF принимают участие команды со всего мира — от США до Японии.

Для участия в отборочных соревнованиях в этом году зарегистрировалось больше 600 команд.

ppc ctf что такое. Смотреть фото ppc ctf что такое. Смотреть картинку ppc ctf что такое. Картинка про ppc ctf что такое. Фото ppc ctf что такое

Задания и атмосфера

По сложившейся традиции игровые задания и инфраструктура подготавливаются в соответствии с легендой соревнований — специальной сюжетной линией, которая превращает простой набор задач PHDays CTF в увлекательное состязание, у которого есть цель. Например, в прошлом году участники спасали от гибели вымышленный мир D’Errorim. Предстоящие соревнования продолжат этот сюжет.

Задания соревнований, как правило, основаны на реальных прототипах: уязвимости, заложенные в задания и сервисы CTF, можно встретить в различных системах в реальной жизни. Соревнования PHDays CTF интересны и оригинальными игровыми механиками, которые делают возможной реализацию разных и непохожих друг на друга стратегий ведения игры (подробнее на сайте PHDays).

Обычно организаторы готовят для команд необычные задания, напрямую не связанные со взломом. Например, во время PHDays 2012 дополнительные очки можно было заработать обнаружив бонусные флаги в специальном контейнере с мусором, а во время PHDays III команды должны были быстрее всех преодолеть «хакерский лабиринт» — полосу препятствий с лазерным полем, датчиками слежения, секретными дверьми, комнатой с жучками и другими интересными испытаниями.

Но основные баллы, конечно, зарабатываются исключительно в ходе решения разнообразных задач по информационной безопасности. Давайте разберем некоторые из них.

Разбор

Квалификационный этап соревнования (PHDays CTF Quals) относится к типу task-based CTF, то есть команды должны решать задания и получать за них очки. Задания могут относиться к одной из следующих категорий:

Неочевидные задания

Участникам PHDays IV CTF Quals в рамках одного из заданий нужно было расшифровать сообщение, скрытое в mp3-файле.

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

В нашем случае все несколько иначе. Если открыть предложенный файл в текстовом редакторе, то он выглядит вот так:
ppc ctf что такое. Смотреть фото ppc ctf что такое. Смотреть картинку ppc ctf что такое. Картинка про ppc ctf что такое. Фото ppc ctf что такое
В начале файла располагаются метаданные в формате ID3. Сначала идет тег TRCK (track number), а потом — какие-то куски текста:

RGB7 5,183, NULL RGB6 0,42,159 RGB5 194,244,68 RGB4 47,77,6 RGB3 44,73,141 RGB2 140,207,72 RGB1 120,156,203

Эту информацию можно разбить на семь записей (от RGB7 до RGB1):

RGB7 5,183, NULL
RGB6 0,42,159
RGB5 194,244,68
RGB4 47,77,6
RGB3 44,73,141
RGB2 140,207,72
RGB1 120,156,203

После каждого из RGB-идентификаторов стоит три значения. Обычно это числа, но в одном случае — NULL. Легко предположить, что это массив записей, каждая из которых содержит до трех однобайтовых значений. Можно записи отсортировать, объединить, превратить десятичные коды в символы и вывести в шестнадцатеричном виде, например, при помощи вот такой программы:

>>> a = [120,156,203, 140,207,72, 44,73,141, 47,77,6, 194,244,68, 0,42,159, 5,183]
>>> print «».join(map(chr, a)).encode(«hex»)

В результате получим:

Шестнадцатеричная последовательность начинается с байтов с кодами 0x78 0x9С, а это подсказывает нам, что используется алгоритм сжатия данных zlib. Если использовать zlib в режиме компрессии с параметрами по умолчанию, выходная последовательность будет начинаться именно с этих байтов.

Одним вызовом функции decompress библиотеки zlib в Python можно распаковать упакованное сообщение:

И тогда будет выведен текст:

Именно этот флаг нужно было отослать организаторам соревнований.

Неправильная криптография

Данное задание относится к категории Crypto. По легенде, был перехвачен сеанс связи, и командам нужно расшифровать переданные сообщения.
ppc ctf что такое. Смотреть фото ppc ctf что такое. Смотреть картинку ppc ctf что такое. Картинка про ppc ctf что такое. Фото ppc ctf что такое
Прежде всего, ясно виден процесс обмена ключами и затем передача зашифрованных данных. Необходимо понять, на основании какого криптографического базиса можно построить подобное общение.

Задание называется mars, можно предположить, что это означает Modified RSA.

Каждый ключ состоит из двух частей, и вторая часть в обоих случаях равна 0x010001 == 65537 — часто используемая публичная экспонента RSA (e). Значит, в сеансе связи сначала идет обмен открытыми ключами (n1/e1, n2/e2), а затем обмен зашифрованными на них сообщениями (c1, c2).

Если это действительно что-то похожее на RSA, то ci = pow(mi, ei, ni). Требуется найти m1 и m2.
pow — функция модульного возведения в степень, pow(val, еxp, modulus) == val exp % modulus.

Согласно алгоритму RSA:

Воспользуемся реализацией расширенного алгоритма Евклида на Python:

Найдем НОД (наибольший общий делитель) чисел n1 и n2:

НОД(n1, n2) имеет длину 1024 бита. Найдем другие делители чисел n1 и n2:

p1 и p2 — простые числа длиной 512 бит, gcd — составное число длиной 1024 бита (скорее всего 512*512), и оно также слишком велико для факторизации…

Рассмотрим случай, когда искомые сообщения mi могут быть представлены числами, не превосходящими pi.

Пусть ni = pi*q*r, тогда при 0 its_n0t_ab0ut_p4dd1ng ».

Криптографическое задание secc

Дано: архив source.tar.gz, содержащий файлы ecc.py и task.py, в которых содержится схема верификации ключа, реализованная с помощью эллиптической криптографии. Известно, что подключившись по адресу 195.133.87.171 на порт 5555, можно установить соединение с каким-то сервером:

nc 195.133.87.171 5555
password: secch4l*

Поскольку даны исходники, то стоит начать с их анализа. Можно их даже запустить.
Так как у меня не было модуля libnum, пришлось написать его самому. В нем достаточно реализовать уже упомянутую ранее функцию модульной инверсии и используемый ею расширенный алгоритма Евклида:

Итак, функция main из task.py :

Читается строка, SHA-1 от которой должно быть равно заданному значению («secch4l*»).
Потом генерируется случайный 8-байтовый префикс, отправляемый клиенту. Байты кодируются как hex-строка. В ответ клиент должен прислать строку не длиннее 16 байт, при этом чтобы она начиналась с заданного префикса, а первые 3 байт значения SHA-1 от этой строки должны быть нулевыми. Если все этапы пройдены успешно — вызывается функция goflag().

Следующий фрагмент кода соединяется с сервером, отправляет пароль, получает префикс, вычисляет и отправляет ответ:

После выполнения этого кода на стороне клиента сервер выполняет функцию goflag(), выводящей примерно следующий текст:

EC PASSWORD CHECK
R = 572115218124168948525078362547166172445820217705568707355669424304224832114
SHARED SECRET = R ^ PASSWORD
ENCRYPTED MESSAGE: 7a93846a011e0d0382e94f32d705239e6298169dcec20da5d6

Что же происходит в функции goflag из task.py :

Используется асимметричная криптография на эллиптических кривых. Выбрана кривая P-256, рекомендованная NIST. Реализация операций над точками кривой не содержит очевидных уязвимостей.

Мы знаем значение R, но без знания значения PASSWORD (которое читается сервером из файла password.txt) мы не можем вычислить S. Знание S позволило бы нам легко вычислить key. Так может быть шифрование реализовано с ошибкой?

Функция encrypt из task.py :

По коду видно, что зашифрованному сообщению предшествует случайный 8-байтовый вектор инициализации iv, а шифрование выполняется как XOR флага c гаммой, сгенерированной как выход двух вычислений SHA-256. Без знания значения key получить гамму нереально. Но как key получается в программе?

Функция derive из task.py:

Оказывается, значение точки S (состоящее из двух координат — x и y) используется как вход SHA-256. Фактически на вход хеша подается значение str(int(x*1024/y)). Так как x и y имеют близкие значения (это большие целые числа), то результат арифметических действий должен близок к 1024 (хотя может и превышать его в разы).

Таким образом, из-за особенностей реализации функции derive, значение key может принимать совсем небольшое количество состояний. Можно просто перебрать их все, попытаться на каждом ключе расшифровать сообщение, и если оно состоит только из печатных символов — мы достигли успеха.

Таким образом, флагом является строчка «ecc_is_too_s3cure».

Реверс-инжиниринг. Shadelt900

Обратная разработка — еще одна популярная категория заданий. Помимо CTF, в конкурсной программе PHDays присутствует конкурс Best Reverser.

Задание Shadelt900, так же как и три предыдущих, было частью программы PHDays IV CTF Quals, прошедших в январе 2014 года. Команды должны были расшифровать изображение под названием ‘derrorim_enc.bmp’. Было известно средство, примененное для его зашифрования, — оно как раз и называется Shadelt9000.exe, но декриптор обнаружить не удалось. Вот это изображение:

ppc ctf что такое. Смотреть фото ppc ctf что такое. Смотреть картинку ppc ctf что такое. Картинка про ppc ctf что такое. Фото ppc ctf что такое

При ближайшем рассмотрении файла Shadelt9000.exe становится ясно, что приложение использует OpenGL. Также есть копирайт inflate 1.2.8 Copyright 1995-2013 Mark Adler, указывающий на то, что в программе используется популярная библиотека компрессии zlib.

Если в дизассемблере посмотреть, откуда идут обращения к функциям zlib, можно довольно быстро найти вот такой кусок кода:

ppc ctf что такое. Смотреть фото ppc ctf что такое. Смотреть картинку ppc ctf что такое. Картинка про ppc ctf что такое. Фото ppc ctf что такое

По адресам 0x47F660 и 0x47F7B8 расположены массивы данных, упакованные zlib. Распакуем их:

После распаковки файл 1.txt содержит пиксельный шейдер:

Файл 2.txt содержит вершинный шейдер:

Главная информация о пиксельном шейдере выделена красным:

ppc ctf что такое. Смотреть фото ppc ctf что такое. Смотреть картинку ppc ctf что такое. Картинка про ppc ctf что такое. Фото ppc ctf что такое

В переменной t оказывается текущий элемент обрабатываемой текстуры (входного файла),
а в переменной g — текущий элемент гаммы (сгенерированной псевдослучайным образом).
В переменной s мы видим некоторое значение, используемое позже для циклического сдвига s.
Выходное значение фактически вычисляется как

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

Найдем, как генерируется гамма:

Видно, что она зависит от текущего времени.

Из исходного архива можно узнать, что файл derrorim_enc.bmp создан 21.01.2014 в 18:37:52.
Получаем значение, которое в тот момент вернула бы функция time():

Теперь копируем файл ShadeIt9000.exe в ShadeIt9000_f.exe и исправляем его.

По смещению 00015557 надо байты

Это эквивалентно замене

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

В файле 00_enc.bmp окажется результат зашифрования картинки, состоящий из нулевых байтов. Это и будет гамма в чистом виде.

В файле XX_enc.bmp окажется результат зашифрования картинки, состоящий из байтов со значением 2. Это поможет нам узнать, на сколько битов циклически сдвигался каждый байт.

Наконец, расшифровыванием Shadelt9000:

ppc ctf что такое. Смотреть фото ppc ctf что такое. Смотреть картинку ppc ctf что такое. Картинка про ppc ctf что такое. Фото ppc ctf что такое

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

Сразу за вершинным шейдером по адресам 0x47F848 и 0x47F9A0 лежит упакованный zlib-код пиксельного и вершинного шейдера для выполнения обратного преобразования. Возможно, он был случайно забыт разработчиком задания. А может и оставлен намеренно.

Коды вершинного шейдера для зашифрования и расшифрования идентичны, так что трогать их не имеет смысла. А что будет, если подменить пиксельный шейдер?

Копируем ShadeIt9000_f.exe в ShadeIt9000_d.exe и исправляем его:

00015775: 60 F6 ==> 48 F8

Затем запускаем ShadeIt9000_d.exe derrorim_enc.bmp. И получаем на выходе расшифрованный файл derrorim_enc_enc.bmp, который (за исключением мелких артефактов) совпадает с тем, который мы расшифровали скриптом на Python.

На сегодня все! Всем спасибо за внимание, будем рады ответить на вопросы в комментариях.

Напоминаем, что финал PHDays IV CTF состоится 21 и 22 мая во время проведения форума Positive Hack Days. Следить за ходом соревнований можно будет не только непосредственно на площадке, но и с помощью мобильных приложений. Следите за новостями!

P. S. Архив всех заданий PHDays CTF и CTF Quals можно найти на сайте PHDays. Так что, если есть желание испытать себя — вперед!

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *