Wargame Write-Up/HackCTF69 [HackCTF] (Pwnable) Look at me 풀이 gets 로 입력을받아 overflow 발생하는 프로그램이다. 왼쪽을 보면, 쓰이지않는 함수들도있는걸 볼 수 있는데, 기존에봐왔던 Dynamic linking 과 다르게 Static linking 을 했다. Static linking 은 라이브러리코드들을 모두 실행파일에 포함시켜서 라이브러리 함수들로 ret 할 수 있습니다. 하지만 execve 는 안보이므로, eax 에 32bit syscall 에서 SYS_EXECVE 값인 11을 넣고 int 0x80 으로 쉘을 따야겠습니다. ( NX 가 적용되어있어 쉘코드실행 X RELRO 가 FULL 이 아니여서 bss 에 /bin/sh 입력가능) execve("/bin/sh",NULL,NULL) ebx ecx edx 0x080583bf : xor eax, eax .. 2020. 6. 24. [HackCTF] (Pwnable) Beginner_Heap 풀이 beginner_heap.bin 파일을 받을 수 있다. .bin 이라고 너무 당황하지말고, file beginner_heap.bin 해보면 ELF 파일인 걸 알 수 있다. void FUN_004008a8(void) { undefined4 *puVar1; void *pvVar2; undefined4 *puVar3; long in_FS_OFFSET; char local_1018 [4104]; undefined8 local_10; local_10 = *(undefined8 *)(in_FS_OFFSET + 0x28); puVar1 = (undefined4 *)malloc(0x10); *puVar1 = 1; pvVar2 = malloc(8); *(void **)(puVar1 + 2) = pvVar2; puVar3.. 2020. 6. 24. [HackCTF] (Pwnable) RTL_Core 풀이 undefined4 main(void) { int iVar1; char local_24 [24]; undefined *local_c; local_c = &stack0x00000004; setvbuf(stdout,(char *)0x0,2,0); puts("코어 파일에 액세스중입니다...\n패스코드를 입력해주세요"); printf("Passcode: "); gets(local_24); iVar1 = check_passcode(local_24); if (iVar1 == hashcode) { puts("코드가 일치하구나. 좋아, 다음 단서를 던져주지"); core(); } else { puts("실패!"); } return 0; } 바이너리파일과, 라이브러리파일을 준다. check_passcode() 함수로 암.. 2020. 6. 3. [HackCTF] (Pwnable) random 풀이 약간 리버싱느낌도 나는데, 기드라로까보자. void main(void) { time_t tVar1; long in_FS_OFFSET; int local_18; int local_14; undefined8 local_10; local_10 = *(undefined8 *)(in_FS_OFFSET + 0x28); setbuf(stdout,(char *)0x0); local_14 = 0; local_18 = 0; tVar1 = time((time_t *)0x0); srand((uint)tVar1); local_14 = rand(); puts("============================"); puts("======= 인증 프로그램 ======"); puts("=========================.. 2020. 5. 26. 이전 1 ··· 4 5 6 7 8 9 10 ··· 18 다음