본문 바로가기

System Hacking

GOT Overwrite

GOT overwrite란

dynamic link방식으로 컴파일된 바이너리가 공유 라이브러리를 호출할때 사용되는 PLT&GOT 중 GOT 값을 변조하여 내가 의도한 함수를 호출 하도록 하는 기법이다.

 

GOT와 PLT 개념에서 PLT는 GOT를 참조하고, GOT에는 실제 주소가 들어있다.

여기 GOT에 값을 원하는 함수의 실제 주소로 변조시키면, PLT는 변조한 함수가 호출된다.

이러한 기법이 GOT Overwrite이다.

 

GOT overwrite 실습

간단한 실습 코드를 작성해 본다.

컴파일 해보면 (gcc -m32 -no-pie -fno-pic -o got got.c)

다음과 같이 gets로 받은 문자열을 그대로 출력해준다.

 

여기서 GOT Overwrite를 공격하기 위해서 어떻게 해야하는지 천천히 살펴보자.

main + 50에서 puts@plt가 호출된다.

첫번째 명령으로 0x804a014로 jmp하는걸 볼 수 있는데

여기서 0x804a014가 GOT주소인 것을 알 수 있다.

이때 공격을 하기 위하여 got의 값을 system의 값으로 덮어주면된다.

이게 GOT Overwrite이다.

 

입력을 받는 gets함수에 /bin/sh을 입력해주고

다음 puts가 실행되는데 puts함수의 got를 system함수의 주소로 덮어씌워줬으니

결국에는 system함수가 실행되면서

puts("/bin/sh")가 되어야 할것이 system("/bin/sh")가 되면서 쉘이 따지는것을 확인할수있다.

'System Hacking' 카테고리의 다른 글

UAF (Use After Free)  (0) 2022.03.12
Return to Libc (RTL)  (0) 2022.02.18
PLT & GOT 파헤치기  (0) 2022.01.20