The app is writing flag somewhere… and it’s statically linked.

Solution

Первый взгляд

$ file mc3.elf
mc3.elf: ELF 64-bit LSB executable, x86-64, statically linked, stripped

Стрипнутый бинарь. В main видно, что программа что-то пишет, но куда?

int64_t main()
    sub_408710("Hello!")
    sub_408710("Now i will write the flag somewhere.")
    sub_408710("See if you can find it!")
    sub_400b17()
    sub_408710("Ok, it's there")
    sub_408710("Dunno if it was written OK, but i've done what i could")
    sub_408710("Good luck!")
    return 0

sub_400b17 — и есть то самое “написать куда-то”. Не буду разбирать статику, запущу под strace:

strace

$ strace ./mc3.elf
...
write(1, "Now i will write the flag somewh"..., 37) = 37
write(1, "See if you can find it!\n", 24) = 24
write(1337, "flag: c4ught_Wh4Ts_be1ng_wr1tten", 32) = -1 EBADF (Bad file descriptor)
write(1, "Ok, it's there\n", 15) = 15
...

Флаг пишется в файловый дескриптор 1337, которого нет. Поэтому программа считает, что “всё хорошо” — она записала, просто запись не прошла. strace поймал попытку.

c4ught_Wh4Ts_be1ng_wr1tten