Надо сделать переполнение переменной username в bss секции и стать админом.

IMG

Solution

Строк почти нет. Перейду к реверсу.

Анализ main

  int32_t main(int32_t argc, char** argv, char** envp)

      is_admin = 0
      printf(format: "Enter your name: ")
      __isoc99_scanf(format: "%s", &username)
      
      if (is_admin == 0)
          printf(format: "Welcome, %s!\n", &username)
      else
          printf(format: "Welcome back, admin!\nHere is your flag: %s\n", getenv(name: "FLAG"))
      
      return 0

is_admin и username хранятся в секцие .bss.

.bss - это секция, содержащая неинициализированные глобальные и статические переменные.

При этом username лежит над is_admin:

IMG

Посмотрю меcто обращения к username:

IMG

Отлично. Запись в username идет через scanf прямо в main. Для того, чтобы получить доступ к флагу, нужно записать не нулевое значение в переменную is_flag.

Создание пейлоада

Между этими значениями 0x4041a0 - 0x4040a0 = 256 байт расстояния. Значит для переполнения нужно ввести 256 любых символов и не нулевое значение в is_admin.

Введу 257 рандомных символов:

IMG

Отлично. Получу флаг:

IMG

spbctf{this_is_simple_overflow}