본문 바로가기

HackCTF67

[HackCTF] (Pwnable) Unexploitable #1 풀이 문제실행시. 입력받고 종료한다. system@plt 가 주어진 것 같다. gift 함수에서 system 함수를 실행시켜주는데, 인자가 "use this system gadget :D" 이다. 가젯으로 쓸수있을것같다. 입력받는 부분이다. rbp-0x10 에 0x40 만큼 입력받으므로, 0x30 만큼 overflow 할 수 있다. NX 만 enable 되어 있으므로, 편하게 ROP할 수 있을 것같다. fgets 로 .bss 영역에 /bin/sh 를 입력받고, pop rdi 가젯을 이용해 system('/bin/sh') 를 출력한다. 하지만 3번째 인자인 stdin 을 넣어줄 pop rdx 가젯이 보이지 않는다. 할수없이 main+113 으로 리턴해 fgets 함수를 다시 호출해야겠다. m.blog.naver.. 2020. 9. 5.
[HackCTF] (Pwnable) You are silver Write-up 내가 입력한 문자열을 출력하고, you are silver 를 출력하고, 세그먼트폴트가 나고 종료된다. undefined8 main(void) { char local_38 [40]; int local_10; uint local_c; setvbuf(stdout,(char *)0x0,2,0); local_c = 0x32; puts("Please enter your name"); fgets(local_38,0x2e,stdin); printf(local_38); local_10 = get_tier((ulong)local_c); printf((char *)(long)local_10); return 0; } main 함수이다. 0x2e 만큼 입력받기때문에 overwrite 는 발생하지 않을것이다. void get_.. 2020. 8. 26.
[HackCTF] (Pwnable) ROP Write-up vulnerable_function 에서 입력을 받고, Hello world! 를 출력한다. 0x100-0x88 = 0x78 (120) 만큼 overwrite 할 수 있다. SSP 가 설정되어있지 않으므로, BOF 를 마구마구 일으킬 수 있다. write 함수로 write.got 주소를 leak 한뒤, 라이브러리베이스주소로 oneshot 함수의 주소를 구해서 Helloworld! 를 출력해주는 write.got 를 overwrite 하든지 (하지만 원샷가젯이 작동을 안해서 못한다..) system 과 /bin/sh 문자열의 주소를 구해서(또는 bss 영역에 /bin/sh 문자열을 쓰고) vulnerable_function 함수를 재호출해서 system 으로 리턴하자. from pwn import * r=.. 2020. 8. 26.
[HackCTF] (Pwnable) UAF Write-up 노트를 만들고 삭제할 수 있다. void add_note(void) { int iVar1; void *pvVar2; size_t __size; int in_GS_OFFSET; int local_20; char local_18 [8]; int local_10; local_10 = *(int *)(in_GS_OFFSET + 0x14); if (count < 6) { local_20 = 0; while (local_20 < 5) { if (*(int *)(notelist + local_20 * 4) == 0) { pvVar2 = malloc(8); *(void **)(notelist + local_20 * 4) = pvVar2; if (*(int *)(notelist + local_20 * 4) == 0) {.. 2020. 7. 7.