Skip to content

Latest commit

 

History

History
63 lines (47 loc) · 4.85 KB

File metadata and controls

63 lines (47 loc) · 4.85 KB

Reverse | Arbacoin wallet

Информация

По нашим оперативным данными, верхушка корпорации Arbalest of Siberia использует защищённые криптокошельки.

Силами группировок и жизнью несколько добропорядочных агентов нам удалось раздобыть приложение для просмотра кошельков.

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

Мы также нашли сервер, где генерируются эти кошельки.

На нём можно приобрести приватный токен для доступа к закрытому клубу.

Однако у нас не хватает денег, чтобы получить его. К счастью на сервер можно загрузить свой кошелёк.

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

nc <ip> <port>

Запуск

Отдать командам бинарник из deploy/static и ip-адрес сервера

cd deploy
# change port in run.sh
./serve.sh 

Описание

ELF 64bit, C++, no strip, no pack.

Суть задания - разбор очень простого бинарного формата файла

Решение

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

  1. Первым байтом файла является размер зашифрованного логина, который лежит после этого байта.
  2. Данный байт является инициализирующим значение для генератора гаммы с которой XOR'ится логин.
  3. Такой же алгоритм используется для пароля.
  4. Достаточно вытащить пароль и логин из кошелька и открыть его с помощью предоставленного исполняемого файла.
  5. Теперь мы можем просматривать все поля кошелька, однако нам нужно загрузить свой кошелёк с определённым балансом.
  6. Разбираем формат кошелька дальше, это не сложно делать, т.к. внутри бинарника есть функция вывода информации о кошельке, что позволяет достаточно просто и быстро определить смещения на поля и увидеть как они обрабатываются.
  7. Баланс сохраняется в 4 байта после пароля и "шифруется" путём XOR'а с константой 0xdeadbeef
  8. После загрузки кошелька с верным балансом, скорее всего, будет получено уведомление о том, что количество последних операций должно быть выше 16.
  9. Операции сохраняются ещё проще. После баланса идёт количество операций, а следующий байт это размер операции, все операции сохраняются таким образом и шифруются XOR'ом с размером.
  10. После создания операций в необходимом количестве будет получена ошибка, указывающая, что данный кошелёк не приватный. За это отвечает поле "Info".
  11. Поле Info ксорится с ключом, который формируется из логина и пароля
  12. Помещаем в поле Info строку "Private" (на это явно указано в сообщении об ошибке от сервера)
  13. Загружаем кошелёк и покупаем токен.
  14. Токен - это и есть флаг.

Эксплоит в данном случае генерирует правильный кошелёк со всеми необходимыми данными, отправляет его на сервер и получает токен. Пример эксплоита

Флаг

Cup{901caa40579a07ee5912514eebaf5526742ad03261971b233fd1cb88eee915ae}