Protostar : format3

HanseunGenius·2022년 12월 15일
3

Exploit Tutorials

목록 보기
1/3

스택 프레임

CPU 에서 하나의 프로세스가 실행될 때 할당받게 되는 메모리의 구조이다. 주목할 점은 프로세스 내에서 새로운 function call 이 발생하면 전달할 인자들을 stack 에 저장하고 스택 포인터를 줄여서 새로운 function 을 위한 stack 을 할당한다.

printf("~~ %n", &arg)

%n 은 매칭되는 arg 에 %n 이 등장하기 전까지의 string byte 수를 저장한다.
arg = length("~~ ");

그렇다면 printf 가 불릴 때..

printf 가 불리게 되는 시점에, 스택에는 위와 같이 printf 의 Return address, argumets 들을 넣고 스택 포인터를 줄여서 printf 를 위한 스택을 할당하게 되는데, 이때 Address of format string (사실상 1st argument) 이 가르키는 자리와 4th argument 가 할당될 자리가 같게 된다면? 그리고 마침 4th argument 에 매칭되는 format string 이 %n 이라면? 이런 상황을 이용하여 우리가 원하는 주소값에 우리가 원하는 값을 넣을 수 있다.

Kick

%n 은 int 값(string byte 수)을 inteager point 가 가르키는 주소에 쓰게 되는데 이때 4 byte 단위로만 덮어 씌어짐에 주의하자. 원하는 메모리 주소에 가서 1 byte 만 딱 쓰고 싶다고 써지지 않는다.

profile
배움을 간결하게 남기자

0개의 댓글