[VolgaCTF 2017 Teaser] Hasher writeup
Задание: hasher.zip
Задание состоит из скрипта на python и нативного модуля к нему. В скрипте нет ничего интересного, все идет внутрь модуля. Запустив скрипт он ничего не выдаст и будет висеть без завершения работы.
После открытия модуля в IDA сразу в глаза бросаются функции md5_init
, md5_update
, md5_final
. Решил сразу же самостоятельно взять md5 от строки и отослать как флаг, но к сожалению не подошло :)
Бегло просмотрев md5_init
и md5_update
ничего странного не заметил выглядят обычно. В md5_final
впихнули бесконечный цикл из-за чего скрипт и не может завершить работу. Скорей всего дело в md5_transform
, разбирать что там могли изменить не было желания.
Тут не нужно ничего обращать, нужно просто получить результат функции. Следовательно не нужно усложнять себе жизнь, просто заберем значение хеша с отладчика. Для отладки этого модуля нужно немного настроить отладчик. Т.к. это python модуль, который грузится с hasher.py
отлаживать мы будем сам python :)
Для этого нужно изменить поле Application
на /usr/bin/python3
, т.к. именно эту версию интерпретатора советуют создатели задания. А также задать аргументом путь к нашему скрипту, который вызывает функцию с модуля.
Что бы получить финальный хеш достаточно остановится на функции md5_transform
в md5_final
, она не имеет символьного имени, но кто знаком с реализацией md5
тот знает. В rdi
будет финальный кусок строки от которой считаем хеш, а в rsi
сам md5_ctx
в котором и содержится значение хеша.
Запускаем отладку, после того как остановились на брейкпоинте делаем еще один шаг и все. Теперь забираем наш хеш с памяти
VolgaCTF{EBA0EDF09B048610FCC94938F2E0F79F}