본문 바로가기

Wargame Write-Up/HackCTF69

[HackCTF] (Pwnable) RTC 풀이 int __cdecl main(int argc, const char **argv, const char **envp) { char buf; // [rsp+0h] [rbp-40h] setvbuf(stdin, 0LL, 2, 0LL); write(1, "Hey, ROP! What's Up?\n", 0x15uLL); return read(0, &buf, 0x200uLL); } main 함수이다. rbp-0x40 에 0x200 을 입력받는다. 보호기법은 NX 만 enable 되어있다. 라이브러리파일이 주어졌기때문에 write 함수로 read@got 주소를 leak 해서 라이브러리베이스를 구한 뒤, 원샷가젯으로 return 하자. 하지만 pop rdx 가젯이 없기때문에 csu 함수 로 리턴하자 . r12+rbx*8 .. 2020. 9. 10.
[HackCTF] (Pwnable) SysROP 풀이 0x0000000000400636:lea rax,[rbp-0x10] 0x000000000040063a:mov edx,0x78 0x000000000040063f:mov rsi,rax 0x0000000000400642:mov edi,0x0 => 0x0000000000400647:call 0x4004b0 main 함수에서 취약점이 발견된 부분이다. 0x68 만큼 BOF를 일으킬 수 있다. 0x00000000004004b0 read@plt 0x00000000004004c0 __libc_start_main@plt 0x00000000004004d0 setvbuf@plt 0x00000000004004e0 __gmon_start__@plt 쓸만한게 없다. 문제 제목을 보니, syscall 을 사용해야하는것을 알 수 있.. 2020. 9. 6.
[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.