Нам удалось найти один из главный командных центров Arbalest of Siberia.
У нас даже есть образ запущенного сервера. Но в этот раз они позаботились о безопасности.
Мы не смогли начать исследовать его, потому что не знаем с какой стороны подступиться.
Если у тебя получится найти верный логин и пароль - сообщи нам информацию с сервера.
Сопротивление тебя не забудет.
nc <ip> <port>
Отдать командам бинарник из deploy/static и ip-адрес сервера
cd deploy/app
# cange port in serve.sh
./serve.sh
ELF 64bit, C++, strip, pack
Суть задания - найти верную пару Username+Password, а также обойти OTP
Задание довольно сложное и требует хороших навыков обратной разработки.
- Файл упакован UPX, но из него вырезаны строчки, поэтому просто так распаковать его не получится.
- Самый простой вариант - сдампить при переходе на OEP.
- После дампа получим пострипанный бинарь, написанный на С++
- Сразу подключаем отладчик (анти-отладки нет) и начинаем исследования.
- Имя пользователя должно быть длиной ровно 8 символов.
- Имя пользователя поступает в некоторую функцию, по константам можно найти, что это функция sha256 хеша.
- Верный хеш лежит в памяти, если забить его в поиск, то найдём, что это "admin123". Теперь у нас есть логин.
- Пароль должен быть длиной 32 символа
- Пароль проверяется по довольно простому алгоритму, из алфавита заложенного в бинарь достаются по индексам значения. Индекс формируется на основе sha256-хеша от имени пользователя. Таким образом можем достать пароль
- После ввода логина и пароля генерируется OTP и активируется alarm().
- OTP генерируется с помощью random() при этом он инициализируется предсказуемым значением
- Seed для раднома это: время + первый символ логина + первый символ пароля + размер логина + размер пароля. После seed XOR'ится с 0xdeadbeef.
- После успешного ввода пароля получаем доступ к меню, где все функции заблокированы, кроме первой, которая читает файл с флагом.
В данном случае эксплоит - это скрипт который подключается к серверу, вводит верный логин и пароль, а после рассчитывает OTP и получает флаг.
Cup{4aaabf6cba45d91f627ecef2dfff12208f4b5b2743cc80a05387ae0122af962f}