Хабрахабр

Решение задания с 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 чисел, которые в сумме дадут 0x21dd09ec. Внутри функции наша строка разбивается на 5 блоков по 4 байта, которые преобрауются в числа, после чего эти числа суммируются. Удовлеворяют условию: 0xd1d905e8 и 0x01010101.

image

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

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

image

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

image

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

Теги
Показать больше

Похожие статьи

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

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

Кнопка «Наверх»
Закрыть