- 
          
          ELF Technique - GOT OverwriteSystem hacking training/Knowledge 2018. 2. 28. 03:51GOT Overwrite란? Dynamic Link 방식으로 컴파일된 바이너리가 공유 라이브러리를 호출할 때 사용되는 PLT와 GOT를 이용하는 공격 기법이다. GOT Overwrite는 간단하게 설명하면 printf("/bin/sh") -> system("/bin/sh") 처럼 특정 함수의 got 값을 변경하여 원래 수행하고자 했던 함수외에 다른 함수를 호출하는 것을 말한다. 이를 실습하기 위해 간단한 바이너리를 만들었다. [Got_Overwrite.c] #include <stdio.h> int main() { printf("/bin/sh"); return 0; } 컴파일을 할때 gcc 옵션으로 카나리와 nx bit를 제거하였다. 물론 ASLR도 꺼줬다. $ gcc -o Got_Overwrite Got_Overwrite.c -z execstack -fno-stack-protector gdb를 이용하여 실습을 할 수 있다. 먼저 gdb에 아까 작성한 바이너리를 올리고 disas main으로 printf 함수의 plt를 구한다. <main+25> 부분에 0x80482e0 이라는 printf함수의 plt 주소를 볼 수 있다. 그리고 main에 bp를 걸고 실행을 하여 printf()의 got를 확인한다. x/3i [plt_address] 로 plt 주소의 instruction을 확인해보면 GOT안에 있는 값으로 jmp하는 것을 볼 수 있다. 이 GOT값을 system()의 실제 주소로 Overwrite 하면 printf("/bin/sh") ==> system("/bin/sh") 가 되고, 결과적으로 쉘을 실행시킨다. got값을 변경하기 위해서는 gdb 명령어인 set을 사용하면 된다. 이상 GOT Overwrite에 대한 정리를 마친다. 반응형'System hacking training > Knowledge' 카테고리의 다른 글ELF Memory Protection - RELRO (2) 2018.03.07 ELF Technique - ROP (2) 2018.03.05 ELF PLT & GOT (1) 2018.02.27 ELF Technique - RTL Chaining (1) 2018.02.22 ELF Technique - RTL(Return To Library) (0) 2018.02.16 
 GOT Overwrite.txt
GOT Overwrite.txt