![]() |
Прежде всего, хочу подчеркнуть два ключевых момента:
1. Если вы не математик, для успешного выполнения задания вам потребуется уверенное владение языком программирования Python. Надеюсь, это понятно. 2. В процессе выполнения задания крайне важно не разрывать соединение с сервером, иначе придется начинать работу заново. Подключаемся к серверу: Bash: Код:
ncВ большинстве случаев, когда речь идет о RSA, мы сталкиваемся с реализацией этого алгоритма, имеющей определенные уязвимости. В данном случае уязвимость заключается в использовании двух экспонент e_1 и e_2 вместо одной e. Это "нововведение" сразу же наводит на мысль о возможности Common Modulus Attack. Я не буду углубляться в детали атаки, большинству читателей это вряд ли интересно — они пришли сюда за разбором задачи, с которой возникли трудности. Внимательно изучив скрипт, предоставленный автором таска, мы сможем понять логику работы сервера: одно и то же сообщение шифруется сначала с использованием экспоненты e_1 и модуля N, а затем с использованием экспоненты e_2 и того же модуля N. В результате мы получаем два различных шифртекста c1 и c2. Это серьезная уязвимость, и в рамках CTF мы еще не раз столкнемся с подобными задачами. Возвращаемся к серверу. Действия [1] и [2] можно игнорировать, так как они не понадобятся для решения задачи. Выбираем действие [4]. Сервер предоставит нам два шифртекста, каждый из которых представляет собой сообщение, зашифрованное с использованием одного и того же модуля, но разных экспонент. Думаю, вы уже догадались, что эти шифртексты подвержены Common Modulus Attack. Давайте обозначим первый шифртекст как c1, а второй — как c2. Однако шифртексты представлены в шестнадцатеричном формате. Поэтому прежде чем мы сможем с ними работать, необходимо преобразовать их из шестнадцатеричного формата в десятичный. Сделаем это с помощью Python: Python: Код:
c1_hexPython: Код:
fromBash: Код:
pipТеперь вернемся к серверу и выберем действие [3]. Введите расшифрованный ключ, и сервер предоставит вам флаг. |
| Время: 11:55 |