intmain(void) { setbuf(stdout, NULL); char input[64]; volatileint give_flag = 0; puts("hi, how can i help?"); gets(input); if (strcmp(input, "give me the flag") == 0) { puts("lol no"); } elseif (strcmp(input, "please give me the flag") == 0) { puts("no"); } elseif (strcmp(input, "help, i have no idea how to solve this") == 0) { puts("L"); } elseif (strcmp(input, "may i have the flag?") == 0) { puts("not with that attitude"); } elseif (strcmp(input, "please please please give me the flag") == 0) { puts("i'll consider it"); sleep(15); if (give_flag) { puts("ok here's your flag"); system("cat flag.txt"); } else { puts("no"); } } else { puts("sorry, i didn't understand your question"); exit(1); } }
give_flag 변수 값을 입력 값을 통해서 바꿔줄 수가 없다. 다행히 system 함수 주소가 존재하니 bss 영역에 ‘/bin/sh\x00’을 쓰고 system 함수를 실행시키면 된다.