ii4gsp
GOT Overwrite 기법 본문
GOT Overwrite
GOT Overwrite는 Dynamic Link방식으로 컴파일된 바이너리가 공유 라이브러리를 호출할 때 사용되는 PLT & GOT를 이용하는 공격 기법이다.
PTL는 GOT를 참조하고, GOT에는 함수의 실제 주소가 들어있는데, 이 GOT의 값을 원하는 함수의 실제 주소로 변조시킨다면, 원래의 함수가 아닌 변조한 함수가 호출된다. ex) printf("/bin/sh"); "/bin/sh"라는 문자열을 출력하는 함수가있으면 printf함수를 system함수로 변조하여 system("/bin/sh"); 가 되어 쉘을 실행시킨다.
예제
#include <stdio.h>
int main()
{
printf("/bin/sh");
}
예제 소스코드이다.
<main+25>부분을 보면 printf함수의 PLT주소가 보인다.
printf함수의 PLT주소는 0x80482e0이다.
PLT주소를 디스어셈블해보면 GOT주소 0x804a00c가 보인다.
system()함수의 주소를 구해 GOT를 system()함수의 주소로 바꾸면 쉘을 획득할 수 있다.
print system를 입력하면 system()함수의 주소를 볼 수 있다.
system()함수의 주소는 0xf7e15200이다.
GOT주소 *0x804a00c를 system()함수의 주소 0xf7e15200로 바꿔주니 printf("/bin/sh");를 system("/bin/sh");로 변조되어
쉘이 실행 되었다.
'시스템 해킹 > Technique' 카테고리의 다른 글
DLL Injection (0) | 2020.04.16 |
---|---|
Find kernel32.dll Address (0) | 2020.04.08 |
RTL (Return-to-libc) 기법 (2) | 2020.01.22 |
FPO (Frame Pointer Overflow) 기법 (0) | 2020.01.21 |
[Heap] Double Free Bug (0) | 2020.01.20 |
Comments