HackCTF67 [HackCTF] (Pwnable) pwning 풀이 void vuln(void) { char local_30 [32]; int local_10; printf("How many bytes do you want me to read? "); get_n(local_30,4); local_10 = atoi(local_30); if (local_10 < 0x21) { printf("Ok, sounds good. Give me %u bytes of data!\n",local_10); get_n(local_30,local_10); printf("You said: %s\n",local_30); } else { printf("No! That size (%d) is too large!\n",local_10); } return; } vuln, 취약점이 발생한다는 뜻으로 쓰인다.. 2020. 6. 24. [HackCTF] (Pwnable) Gift 풀이 snwo@snwo:~/Documents/GitHub/Wargame/Pwnable/HackCTF$ ./gift Hey guyssssssssss here you are: 0x8049940 0xf7d92200 good good hello 이렇게 두 주소를 준다. gdb 로 확인해보니, 첫번째주소는 전역변수 binsh 의 주소이다. 근데 아무런 데이터도 없는걸 봐선 내가 저 주소에 binsh 를 입력해야 하는 것 같다. 두번째주소는 system 함수의 주소이다. 0x080485cc :push eax 0x080485cd :push 0x80 0x080485d2 :lea eax,[ebp-0x84] 0x080485d8 :push eax 0x080485d9 :call 0x80483e0 0x080485de :add esp.. 2020. 6. 24. [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. 이전 1 ··· 3 4 5 6 7 8 9 ··· 17 다음