CTF. Курс молодого бойца. Начальные задания категории Crypto #4.
https://t.me/hacker_sanctuary
Данный пост будет носить практический характер. В нём мы рассмотрим задания начального уровня в категории Crypto. Данные задания часто встречаются в простых CTF'ах и иногда, как разминочные, в более крупных.
Задания будут взяты с известного сайта с различными задачами (CTF и не только) - https://www.root-me.org/
Будем решать задачи из категории: Cryptanalysis
Прямая ссылка: https://www.root-me.org/en/Challenges/Cryptanalysis/
Предыдущие задания из данной категории вы можете найти на канале.
Часть 1 - https://telegra.ph/CTF-Kurs-molodogo-bojca-Nachalnye-zadaniya-kategorii-Crypto-08-19
Часть 2 - https://telegra.ph/CTF-Kurs-molodogo-bojca-Nachalnye-zadaniya-kategorii-Crypto-2-09-01
Часть 3 - https://telegra.ph/CTF-Kurs-molodogo-bojca-Nachalnye-zadaniya-kategorii-Crypto-3-09-25
Пример 1.
Решим задание "ELF32 - PID encryption".
Прямая ссылка - https://www.root-me.org/en/Challenges/Cryptanalysis/ELF32-PID-encryption
Смотрим описание.

В описании говориться, что "плохая идея использовать предсказуемые материалы(значения)", а название задания объявляет, что будет использовать "PID encryption", то есть для шифрования данных используется номер текущего процесса. Также, нам дан исходник и возможность подключиться по SSH к серверу с заданием.

Подключаемся и глянем на исходник уже на машине.

Всё довольно просто, используется функция crypt с аргументами pid и строкой "$1$awesome", pid - номер текущего процесса. Результат работы функции сравнивается с переданной при запуске строкой.
Предсказуемость pid'а заключается в том, что все pid'ы лежат в определённом диапазоне (от о до 32768) при стандартных настройках ядра (будем полагать, что они стандартны).
Тогда мы можем заранее с генерировать некоторое значение, и запустить бесконечный цикл, который каждый раз будет запускать исполняемый файл с данной строкой и нам останется лишь подождать нужного момента, когда значения совпадут.
Генерируем выражение от pid'a 27001

Теперь напишем бесконечный цикл с запуском исполняемого файла.

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


Задание решено.