Решение задания с pwnable.kr 02 — collision. Коллизия в хеш-функции

image

В данной статье вспомним про колизии в хеш-функциях, и решим второе задание с сайта pwnable.kr.

Организационная информация

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

  • PWN;
  • криптография (Crypto);
  • cетевые технологии (Network);
  • реверс (Reverse Engineering);
  • стеганография (Stegano);
  • поиск и эксплуатация WEB-уязвимостей.

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

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

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

Коллизии в хеш функциях

Коллизия хеш-функции — это такая пара блоков x и y, результат хеш-функции hash() от которых дает в результате одинаковый блок z.

hash(x) = hash(y) = z

Коллизии возможны абсолютно у любой хеш-функции, так как множество входов на много превышает множетсво выходов хеш-функции.

image

Поэтому стойкость хеш-функции определяется тремя характеристиками:

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

Решение задания collision

Нажимаем на вторую иконку с подписью collision, и нам говорят, что нужно подключиться по SSH с паролем guest.

image

При подключении мы видим соотвтствующий баннер.

image

Давайте узнаем какие файлы есть на сервере, а также какие мы имеем права.

ls -l

image

Таким образом мы можем можем прочитать исходный код программы, так как есть право читать для всех, и выполнить с правами владельца программу fd (установлен sticky-бит). Давайте просмотрим исход код.

image

Из кода следует, что программа принимает в качестве параметра строку из 20 символов, передает в функцию, которая вычисляет хеш и сравнивает его с эталонным значением.

image

image

Внутри функции наша строка разбивается на 5 блоков по 4 байта, которые преобрауются в числа, после чего эти числа суммируются. Таким образом нам нужно 5 чисел, которые в сумме дадут 0x21dd09ec. Удовлеворяют условию: 0xd1d905e8 и 0x01010101.

image

Теперь нужно передать непечатуемые символы в командную строку в качестве параметра для программы. Для этого используем синтаксис bash и интерпретатор python. Важно отметить, что при в памяти компьютера эти числа будут хранится в обратном порядке, потому перевернем их.

./col $(python -с “print(‘\x01\x01\x01\x01’*4 + ‘\xe8\x05\xd9\x1d’)”)

image

Как результат, получаем три очка.

image

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


ссылка на оригинал статьи https://habr.com/ru/post/459866/

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

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