-
SECUINSIDE 2016 CYKOR_00002_patchCTF 2016. 7. 11. 01:28
int sub_8048F50() { char v1; // [sp+70h] [bp-448h]@1 char v2; // [sp+B0h] [bp-408h]@3 char v3; // [sp+B1h] [bp-407h]@4 int v4; // [sp+4B0h] [bp-8h]@1 v4 = 0; printf("----------------------------------------\n"); printf("- Simple Echo System -\n"); printf("----------------------------------------\n"); printf("What is your name?\n"); inputname((int)&v1); if ( !strncmp((int)&v1, (int)"ADMIN", 5u) ) { printf("+ Gimme a key : "); read((int)&byte_805F454, 0x1Bu, 10); if ( key() ) { printf("Welcome Admin :)\n"); printf(": "); read((int)&v2, 0x3E8u, 10); if ( v2 == 67 && v3 == 75 ) v0 = 10; printf("%s\n"); } else { printf("Get out of here :(\n"); } } else { printf("Hi %s\n"); printf(": "); *(&v2 + read((int)&v2, 0x3E8u, 10)) = 0; printf("%s\n"); } return 0; }
IDA rename 기능을 사용하여 복원한 코드이다.
name은 ADMIN이 되어야하고, Key를 27바이트만큼 입력받는데, key() 함수에서 연산을하게된다.
key는 z3를 통해서 구해주면 SHOW_ME_THE_M0N3Y_TURN_UP 이러한 문자열이 나오게된다.
그럼 맞춰주고, 핵심은 v2 == 67 && v3 == 75 이다.
0x80490e3: movl $0x0,-0x454(%ebp)
0x80490ed: mov -0x454(%ebp),%eax // segmentation fault
=> 0x80490f3: movb $0xa,(%eax)
패치는, 저 CK를 바꿔주면되겠다, C = 67,(0x43) K = 75(0x4b), 00으로 수정해준다.
'CTF' 카테고리의 다른 글
TJCTF onshot (0) 2016.07.12 SECUINSDIE 2016 noted (0) 2016.07.11 SECUINSIDE 2016 CYKOR_00001 (0) 2016.07.10 SECUINSIDE 2016 CYKOR_00001_Patch (0) 2016.07.10 Backdoor CTF - Enter the Matrix (0) 2016.06.07