- PVSM.RU - https://www.pvsm.ru -
В данной статье вспомним про колизии в хеш-функциях, и решим второе задание с сайта pwnable.kr [1].
Вдобавок к этому я поделюсь своим опытом в компьютерной криминалистике, анализе малвари и прошивок, атаках на беспроводные сети и локальные вычислительные сети, проведении пентестов и написании эксплоитов.
Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram [2] и группу для обсуждения любых вопросов [3] в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем [4].
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.
Коллизия хеш-функции — это такая пара блоков x и y, результат хеш-функции hash() от которых дает в результате одинаковый блок z.
hash(x) = hash(y) = z
Коллизии возможны абсолютно у любой хеш-функции, так как множество входов на много превышает множетсво выходов хеш-функции.
Поэтому стойкость хеш-функции определяется тремя характеристиками:
Нажимаем на вторую иконку с подписью collision, и нам говорят, что нужно подключиться по SSH с паролем guest.
При подключении мы видим соотвтствующий баннер.
Давайте узнаем какие файлы есть на сервере, а также какие мы имеем права.
ls -l
Таким образом мы можем можем прочитать исходный код программы, так как есть право читать для всех, и выполнить с правами владельца программу fd (установлен sticky-бит). Давайте просмотрим исход код.
Из кода следует, что программа принимает в качестве параметра строку из 20 символов, передает в функцию, которая вычисляет хеш и сравнивает его с эталонным значением.
Внутри функции наша строка разбивается на 5 блоков по 4 байта, которые преобрауются в числа, после чего эти числа суммируются. Таким образом нам нужно 5 чисел, которые в сумме дадут 0x21dd09ec. Удовлеворяют условию: 0xd1d905e8 и 0x01010101.
Теперь нужно передать непечатуемые символы в командную строку в качестве параметра для программы. Для этого используем синтаксис bash и интерпретатор python. Важно отметить, что при в памяти компьютера эти числа будут хранится в обратном порядке, потому перевернем их.
./col $(python -с “print(‘x01x01x01x01’*4 + ‘xe8x05xd9x1d’)”)
Как результат, получаем три очка.
Сейчас мы рассмотрели очень простой пример коллизии, а в следующей статье решим третье задание и разберем такую уязвимость, как переполнение буфера в стеке. До встречи в следующих статьях.
Автор: RalfHacker
Источник [5]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/informatsionnaya-bezopasnost/323829
Ссылки в тексте:
[1] pwnable.kr: https://pwnable.kr/index.php
[2] канал в Telegram: https://t.me/RalfHackerChannel
[3] группу для обсуждения любых вопросов: https://t.me/RalfHackerPublicChat
[4] рассмотрю лично и отвечу всем: https://t.me/hackerralf8
[5] Источник: https://habr.com/ru/post/459866/?utm_source=habrahabr&utm_medium=rss&utm_campaign=459866
Нажмите здесь для печати.