본문 바로가기
.study/pwnable

[포너블 기초] GOT Overwrite, RTL Chaining

by Carry_on 2023. 11. 12.

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엔트리에 씀

 

GOTputs의 주소인 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