3

return address overwrite를 plt주소 or got주소?

전 basic_rop_x64를 먼저 풀어보고 이 문제를 풀었는데
x64를 풀 때에는 return address를 got주소로 덮어씌워서 rop chain을 구성했는데
이번 x86문제 풀이 할 때에는 got로 하면 엉뚱한 곳으로 가서 plt로 보니까 작동을 잘 하더라구요
이유가 궁금합니다!

답변 3개
3

x64도 RET를 덮어서 함수를 실행할때는 plt를 이용합니다…

2

plt, got개념을 아시는게 중요할꺼 같아요.
got안에는 실제 함수주소가 들어가게 되고 plt안에는 got영역의 주소가 들어가서 got영역을 가리키게 됩니다.
(plt -> got -> 실제주소)

또한 이유를 모를때는 plt, got메모리 영역안에 어떠한 값,주소가 들어가있는지 확인하면 이해하기가 더 수월 하실꺼예요.

2

아마 64비트에서 got로 덮어씌웠다는게 return to csu기법을 말하는듯 한데… csu쪽 가젯에서는 함수포인터로 호출해서 got를 주는게 맞고 plt, got개념을 정확히 아셔야 할듯 싶습니다.