Wargame Site/BOF
-
BOF 준비운동 (2)Wargame Site/BOF 2019. 4. 22. 15:37
STEP3 > Stack Frame BOF 준비운동 (1) 에서 설명했던 것처럼 새로운 프레임에 접근할 때, Prolog 가 발생한다고 했다. 우선 이 Prolog 가 갖는 의미를 생각해보자. Prolog 를 하는 근본적인 이유는 주소에 대한 효율적인 접근에 있다. 중요한 한가지 사실은 프로그램에서는 EBP 를 기준으로 변수를 지칭한다. 다음 그림에서와 같이 EIP 가 int a = 3, int b = 5, float c =7 이 실행됨에 따라 해당 Stack 에서는 다음과 같이 해당 정보들이 쌓인다. EBP - 8, EBP - 12 와 같은 방식으로 a, b, c 를 지칭한다. 자, 만약 프레임이 교체되지 않는다면 어떤일이 발생할까? 프레임이 구분되어있지 않은 경우에 프로그램내의 변수들에 접근하기 위해..
-
BOF 준비운동 (1)Wargame Site/BOF 2019. 4. 21. 12:06
STEP1 > EIP BOF 를 접하기 앞서 우선 프로그램이 작동하는 원리를 대략적으로 살펴보도록하자!! 하나의 프로그램은 여러개의 프레임으로 구성이 되어있다. 함수단위 쯤으로 생각해도 무방할 거 같다. 이 때 3가지 레지스터에 대한 이해가 필요한데, 그것은 바로 EIP, EBP, ESP 이다. 우선, EIP 는 프로그램의 다음 실행위치를 가르키는 포인터이다. 결론적으로, EIP 만 조절할 수 있다면 프로그램을 마음대로 이끌어 갈 수 있다는 것이다. 이러한 EIP 를 바꾸어 놓는 것이 BOF 의 핵심이다. 특정 프레임안에서 다른 프레임을 호출하는 경우 EIP 의 변화가 생긴다. EIP 는 프로그램의 다음실행위치를 뜻하기 때문에 특정 프레임을 호출했을 때, 우선 특정 프레임 (B,C Frame) 의 주소 ..