1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #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; } |
Introduction:
간단한 bof문제, main안에 func함수 인자로 "0xdeedbeef"를 받고 있는데, 이 부분을 "0xcafebabe"로 덮어 씌우면 됨
How to solve:
소스코드에서 func함수 시작 시 캐릭터형 배열 32칸을 만든 것을 확인하여, 일단 표준 입력에 "A"를 32개 입력해보았다. 그 결과 그림 1과 같은 결과가 나타났는데, 32칸의 스택이 A(0x41로) 채워진 후 "0xdeadbeef"까지 덮으려면 약 20바이트를 더 채워야 되는 것을 확인할 수 있다. 이에 따라 그림 2와 같이 명령어를 작성하여 다시 공격해 보았다.
<그림 1> 프로그램 실행중 스택을 캡쳐
그림 2는 "A"로 52바이트를 채운 후 마지막에 "0xcafebabe"을 붙여 스택에 있던 "0xdeadbeef" 를 덮어씌우는 명령어를 작성해 공격을 수행하는 과정을 나타낸다. 다음과 같이 공격을 수행했을 때 정상적으로 쉘을 얻어낸 것을 확인하였다.
<그림 2> flag 정보 획득
'Pwnable.kr' 카테고리의 다른 글
[1pt]mistake (0) | 2015.08.06 |
---|---|
[1pt]cmd1 (0) | 2015.08.06 |
[1pt]fd (0) | 2015.08.06 |
[1pt]random (0) | 2015.08.06 |
[2pt]lotto (0) | 2015.08.06 |