Skip to content

getflagchar

Az404 edited this page Mar 11, 2018 · 1 revision

Сервера Министерства обороны Курляндии были взломаны

  • Категория: Reverse
  • Стоимость: 150
  • Автор: Алексей Захаров
  • Репозиторий

Условие

Хакеры из группировки KXVX заявили, что они взломали сервера Министерства обороны Курляндии и в качестве подтверждения опубликовали бинарный файл, полученный с одного из серверов.

Файл был выложен в сеть без какого-либо описания, однако исследователи полагают, что это модуль, отвечающий за аутентификацию.

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

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

Решение

$ file scanner 
scanner: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=48274acd155654801d2c7edb9d23372bee42580e, not stripped

Бинарный файл из условия - это 32-битный исполняемый файл под Linux. Попробуем его запустить:

$ ./scanner
Welcome to flag scanner! Enter your flag:
QCTf
Fail!

Если ввести в качестве флага некоторый его префикс, например, QCTF, то программа продолжает ждать ввода. Однако, при первой же ошибке, набирая, например, QCTf, мы получаем сообщение Fail и программа завершается.

Отсюда следует один из вариантов решения: найти флаг перебором. Можно написать скрипт, который будет последовательно подбирать каждый следующий символ флага, передавая сканеру на вход известный на данный момент префикс флага и очередной символ. Если процесс завершается и печатает Fail - значит, текущий символ неверен. Если не завершается - символ угадан и можно подбирать следующий. Такой перебор отработает быстро, поскольку в худшем случае придётся перебирать не ALPHABET_LEN ^ FLAG_LEN, а всего лишь ALPHABET_LEN * FLAG_LEN символов.

Пример такого решения.

Второе из возможных решений не требует программирования: достаточно открыть выданный файл в IDA. В графовом представлении функции main сразу же можно заметить, что идёт посимвольное сравнение вводимых букв (возвращаемое значение функции getche) с некоторыми константами. Последовательно переписываем символы сверху вниз и получаем флаг.

Clone this wiki locally