easy pwn! just have fun ISCTF{5033fc9a-b09c-4fd3-8551-0cb22283d299}
OK,直接给flag,那就没什么说的了。
girlfriend
先看一下开启了哪些保护
[*] '/mnt/d/国内赛/ISCTF2024/girlfriend' Arch: amd64-64-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x400000) SHSTK: Enabled IBT: Enabled Stripped: No
[*] '/mnt/d/国内赛/ISCTF2024/ez_game/ez_game' Arch: amd64-64-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x400000) SHSTK: Enabled IBT: Enabled Stripped: No
放入ida中进行分析
int __fastcall main(int argc, const char **argv, const char **envp) { int v4; // [rsp+Ch] [rbp-1A4h] BYREF _BYTE v5[400]; // [rsp+10h] [rbp-1A0h] BYREF unsigned int seed; // [rsp+1A0h] [rbp-10h] int v7; // [rsp+1A8h] [rbp-8h] int n20000; // [rsp+1ACh] [rbp-4h]
init(argc, argv, envp); seed = 1; puts("Welcome to ISCTF's pwn mini-game."); puts("This procedure is only 15 seconds"); signal(14, handle_sigalrm); alarm(0xFu); printf("Enter your username: "); gets(v5); srand(seed); for ( n20000 = 0; n20000 <= 20000; ++n20000 ) { v7 = rand() % 7 + 1; printf("Round %d\n", n20000 + 1); printf("Please enter the number you want to guess: "); __isoc99_scanf("%d", &v4); if ( v7 != v4 ) { puts("Wrong, goodbye"); exit(1); } puts("Congratulations, you win!"); } getshell(); return 0; } int getshell() { puts("It's your reward, take advantage of it."); return system("/bin/sh"); }