- PVSM.RU - https://www.pvsm.ru -

PHDays HackQuest 2017: RanSomWare — небольшой криптор на GO

Всем доброго времени суток, только что подошел к концу двухнедельный HackQuest [1] от PHDays [2]. Не смотря на преобладание заданий связанных с WEB, организаторы не оставили без внимания и задания связанные с реверсом. Решение одного из таких заданий (erawmosnar [3]), я бы хотел сегодня рассмотреть. К тому же думаю после WannaCry подобная тема станет ещё актуальнее.
К заданию была всего 1 подсказка:

Warn: erawmosnar == ransomware, do not run it, if you do not know what you doing.

Начнём

Скачиваем файл и открываем его в IDA, и страдаем идём гуглить ибо перед нами over1000 безымянных функций, и судя по всему это Golang:
PHDays HackQuest 2017: RanSomWare — небольшой криптор на GO - 1

Быстрый поиск в гугл показал решение [4] этой проблемы. Скачиваем скрипт, запускаем его в IDA и наслаждаемся.
PHDays HackQuest 2017: RanSomWare — небольшой криптор на GO - 2

Запустив всё же бинарник, видим приглашение для ввода 8-значного пин-кода, и сообщение об его некорректности в случае провала.
PHDays HackQuest 2017: RanSomWare — небольшой криптор на GO - 3

Используя это как отправную точку, не сложно найти функцию, которая всё это обрабатывает. После обработки кода скриптом, эта функция получила название main_main.
Начинается всё с того, что в буфер записывается некий хеш:
PHDays HackQuest 2017: RanSomWare — небольшой криптор на GO - 4

Затем нас просят ввести пин:
PHDays HackQuest 2017: RanSomWare — небольшой криптор на GO - 5

Затем от него высчитывается SHA1 хеш, и сверяется с эталоном, ну а далее всё просто, либо мы видим флаг, либо шифруется содержимое текущей директории:
PHDays HackQuest 2017: RanSomWare — небольшой криптор на GO - 6

Устанавливаем несколько точек останова, для наглядности:

gdb-peda$ break *0x4015B4
Breakpoint 1 at 0x4015b4
gdb-peda$ break *0x4015D5
Breakpoint 2 at 0x4015d5
gdb-peda$ break *0x401669
Breakpoint 3 at 0x401669
gdb-peda$ 

Первый брейкпоинт срабатывает до вызова функции runtime_concatstring2, в стек отправляются какой-то хеш, и наш пин, вместе с символом "n":
PHDays HackQuest 2017: RanSomWare — небольшой криптор на GO - 7

Жмем продолжить, попадаем на следующую точку останова, где наглядно виден результат конкатенации введённого нами пин-кода с солью:
PHDays HackQuest 2017: RanSomWare — небольшой криптор на GO - 8

На третьем брейкпоинте просто сверяются хеши. Теперь имея всю необходимую информацию, осталось только сбрутить хеш. Создаём словарь для перебора:

gh0st3rs@gh0st3rs-pc:erawmosnar$ crunch 8 8 1234567890 -o /media/DATA/passwdlst/8digits.lst

И запускаем перебор:

gh0st3rs@gh0st3rs-pc:erawmosnar$ sudo hashcat -m 110 --hex-salt hash /media/DATA/passwdlst/8digits.lst

PHDays HackQuest 2017: RanSomWare — небольшой криптор на GO - 9

Пин успешно подобран, осталось забрать флаг:
PHDays HackQuest 2017: RanSomWare — небольшой криптор на GO - 10

Автор: GH0st3rs

Источник [5]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/informatsionnaya-bezopasnost/255153

Ссылки в тексте:

[1] HackQuest: https://hackquest.phdays.com/

[2] PHDays: https://www.phdays.ru

[3] erawmosnar: https://rosnadzorcom.ru/erawmosnar

[4] решение: https://github.com/strazzere/golang_loader_assist

[5] Источник: https://habrahabr.ru/post/328114/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best