По нашим оперативным данными, верхушка корпорации 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.
Суть задания - разбор очень простого бинарного формата файла
Анализируем исполняемый файл и понимает, что он парсит файл кошелька довольно простым образом.
- Первым байтом файла является размер зашифрованного логина, который лежит после этого байта.
- Данный байт является инициализирующим значение для генератора гаммы с которой XOR'ится логин.
- Такой же алгоритм используется для пароля.
- Достаточно вытащить пароль и логин из кошелька и открыть его с помощью предоставленного исполняемого файла.
- Теперь мы можем просматривать все поля кошелька, однако нам нужно загрузить свой кошелёк с определённым балансом.
- Разбираем формат кошелька дальше, это не сложно делать, т.к. внутри бинарника есть функция вывода информации о кошельке, что позволяет достаточно просто и быстро определить смещения на поля и увидеть как они обрабатываются.
- Баланс сохраняется в 4 байта после пароля и "шифруется" путём XOR'а с константой 0xdeadbeef
- После загрузки кошелька с верным балансом, скорее всего, будет получено уведомление о том, что количество последних операций должно быть выше 16.
- Операции сохраняются ещё проще. После баланса идёт количество операций, а следующий байт это размер операции, все операции сохраняются таким образом и шифруются XOR'ом с размером.
- После создания операций в необходимом количестве будет получена ошибка, указывающая, что данный кошелёк не приватный. За это отвечает поле "Info".
- Поле Info ксорится с ключом, который формируется из логина и пароля
- Помещаем в поле Info строку "Private" (на это явно указано в сообщении об ошибке от сервера)
- Загружаем кошелёк и покупаем токен.
- Токен - это и есть флаг.
Эксплоит в данном случае генерирует правильный кошелёк со всеми необходимыми данными, отправляет его на сервер и получает токен. Пример эксплоита
Cup{901caa40579a07ee5912514eebaf5526742ad03261971b233fd1cb88eee915ae}