Reverse_engineering/이론
GOT Over Write 실습
KSJ._.seven11
2023. 3. 26. 18:04
최근 기초 이론에 대해서 너무 부족하다 느껴서 차근차근 하나씩 다시 배워나가고 있다.
그중 중심은 GOT Over Write 공격 기법인데 이론은 100% 이해를 했지만 GDB로 직접 덮어씌우면서 실습을 하지는 않았기에 이번기회에 해서 정리하기로 했다.
일단 소스코드는 다음과 같다.
#gcc -m32 -fno-stack-protector -mpreferred-stack-boundary=2 -z execstack -no-pie -fno-pie -o got test.c
#include <stdio.h>
int main (){
printf("/bin/sh");
}
메인에 BP 를 걸고 실행후 디스어셈블로 확인하면 0x8049040 가 printf 주소인것을 확인할 수 있다.
해당 부분을 디스어셈블리 하면 저렇게 나오는데 이중 jmp 0x804c004 를 통해 GOT 주소를 참조해 함수를 실행하는 원리다.
해당 부분을 다시 디스어셈블 해보자.
printf의 GOT 주소인 것을 확인할 수 있다.
이후
system 함수의 주소를 출력하고 해당 got 주소를 덮어 씌운다.
해당 부분을 OverWrite 하면 함수는 아래와 같이 변경된다.
pirntf("/bin/sh")
-->>
system('/bin/sh')
plt 부분에서는 printf 함수가 실행되는 거와 같지만 got 주소가 변경되어
jmp 0x804c004 가 jmp 0xf7c4c800 로 변경되어 system('/bin/sh') 함수가 실행되는거와 같은 효과를 불러일으킬 수 있다.
그렇게 작동을 시키면
쉘이 실행된다.
끝 !