strcpy같은 함수로 GOT Overwrite할 때, 가급적이면 custom stack을 생성해서 그곳에 함수의 주소를 복사 후에 그 custom stack에 있는것으로 GOT Overwrite 하는것이 가장 좋다.

 

1byte 씩 덮어 씌울경우, 1byte만 복사되는게 아니라 그 뒤에 \x00을 만날 때 까지 쭈욱 복사가 된다.

그 과정에서 엉뚱한 GOT을 overwrite할 위험이 있으므로, 가급적 custom stack을 이용하는 것이 좋다.

이 방법이 쓸수없는 그런 상황일때는 최대한 내가 복사하려는 1byte와 \x00이 가깝게 붙어잇는것을 고른다.

 

일례로 strcpy로 계속 chaining RTL을 해주면서 GOT Overwrite를 해주고 있었는데 2번째 strcpy에서 뻑가버리고 세그먼테이션 폴트를 내뱉음...

복사하는 바이트가 너무 길어서 strcpy의 GOT까지 덮어씌웠기떄문이다

:D

Posted by windowhan
,