본문 바로가기

Wargame Write-Up/HackCTF69

[HackCTF] (Pwnable) Unexploitable_3 풀이 보호기법은 2와 마찬가지로 NX 정도 걸려있다. main 함수에서 0x90 만큼 오버플로우가 발생한다. gift 함수에는 fwrite 함수가 있는데, 밑부분을 보면, mov rcx, [rdi] 가젯이 있는데, 이걸로 fwrite 의 4번째 인자를 조작할 수 있다. fwrite(fgets@got, 1, 6, 0x601050 (stdout in bss)) 이렇게 호출하면 되는데, rdi, rsi, rdx 레지스터는 __libc_csu_init 가젯으로 맞추면 된다. pop rdi 가젯으로 rdi 에 bss 주소 넣기 mov rcx, [rdi] 가젯으로 rcx 에 stdout 이 들어가게 된다. 이제 csu 가젯으로 rdi, rsi, rdx 가젯을 세팅하고, fwrite 로 leak 을 한다. 다시 main .. 2021. 5. 3.
[HackCTF] (Pwnable) Unexploitable_2 풀이 이렇게 되어있다. 보호기법은 NX 정도? leak 하기 위해서는 fwrite 함수를 사용해야한다. fgets 함수를 실행하고 return할 때, 스택상태이다. rdi, rsi, rdx, rcx 값을 확인해보면, rcx 에 stdout 포인터가 남아있지않다. 컨트롤할 수 있는 레지스터는 rdi, rsi 정도인데 흠... 근데 system 함수가 주어져있기에, system 함수로 leak 을 할 수 있다. system함수에 잘못된 명령어가 들어가면, 그 명령어를 출력해주는데, got 주소를 인자로 system 함수를 호출하면, got 주소가 출력될 것이다. 위처럼 페이로드를 짜면 저렇게 출력이 된당. leak 한다음 원샷가젯을 호출하자. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 .. 2021. 5. 3.
[HackCTF] (Pwnable) World Best Encryption Tool 실행시키면 $rbp-0x80 에 입력을 받고 암호화 해서 출력한다. (딱봐도 28 이랑 XOR 연산) 57글자부터 canary값으로 추정되는값이 leak 된다. Analyze undefined8 main(void) { int iVar1; long in_FS_OFFSET; uint local_90; char local_8c [4]; byte local_88 [64]; char local_48 [56]; long local_10; local_10 = *(long *)(in_FS_OFFSET + 0x28); setvbuf(stdout,(char *)0x0,2,0); do { puts("Your text)"); __isoc99_scanf(&DAT_00400913,local_88); local_90 = 0; wh.. 2020. 9. 17.
[HackCTF] (Pwnable) Register 풀이 Main 함수다. 5초뒤에 alarm signal (14) 를 보낸다. main 에서 호출하는 build 함수인데, alarm signal(14) 에 대한 핸들러를 설정하고, 루프문에서 get_obj 함수로 obj 부터 obj+48 까지 입력을 받는다. vaildate_syscall_obj() 함수를 호출해서, 리턴값이 0 이면, alarm signal(14) 을 보내서, alarm handler (syscall) 을 호출해준다. alarm signal(14) 에 대한 handler 이 호출하는 함수이다. 인자로는 전역변수 obj 의 offset 을 주고, obj ~ obj + 48 까지 순서대로 rax, rdi, rsi, rdx, rcx, r8, r9 에 넣고 , syscall 을 해준다. obj(ra.. 2020. 9. 10.