GOT Overwrite
GOT(Global offset table) 엔트리에 임의의 값을 오버라이트(Overwrite)하여 실행 흐름을 변조하는 공격 기법
간단한 실습
#include <stdio.h>
int main() {
puts("Resolving address of 'puts'.");
puts("Get address from GOT");
}
puts@plt를 호출하는 지점에 bp 설정
_dl_runtime_resolve_xsavec 함수에서 puts의 주소를 GOT엔트리에 씀
GOT에 puts의 주소인 0x7ffff7e02ed0이 쓰인 것을 볼 수 있음
두 번째 puts함수의 호출 부터는 바로 puts가 실행
- 시스템 해킹의 관점에서 보면 PLT에서 GOT를 참조하여실행 흐름을 옮길 때, GOT의 값을 검증하지 않는다는
보안상의 약점이 존재 - 따라서 puts의 GOT 엔트리에 저장된 값을 공격자가 임의로 변경할 수 있다면, puts가 호출될 때 공격자가 원하는 코드 실행 가능
두 번째 puts함수의 호출인 *main+33 에 bp를 걸고 호출 직전에 GOT 엔트리의 값을 ‘AAAAAAAA’로 변경
GOT엔트리를 변경 후 실행시키면 실제로 ‘AAAAAAAA’로 실행 흐름이 옮겨짐
'.study > pwnable' 카테고리의 다른 글
[포너블 기초] Out-Of-Bounds (1) | 2023.11.19 |
---|---|
[포너블 기초] RTL (0) | 2023.11.12 |
[포너블 기초]Shell Craft, Lazy Binding (0) | 2023.10.25 |
[포너블 기초] Egg Shell, NX-Bit (0) | 2023.10.23 |
[포너블 기초] Shell Code 만들기 (0) | 2023.10.23 |