GOT Overwrite

2024. 6. 30. 22:56· Hacking/Pwnable
목차
  1. GOT Overwrite
  2. 1. GOT Overwrite
  3. Reference

GOT Overwrite


1. GOT Overwrite

1. GOT Overwrite 과정

함수를 처음 호출하면 PLT 가 호출되고 PLT 는 GOT 로 점프한다.

 

첫 번째 호출이면 GOT 에 함수의 실제 주소가 쓰여있지 않아

dl_resolve 함수가 실제 함수의 주소를 알아와 GOT 에 써준 뒤 함수를 호출한다.

 

두 번째 호출부터는 PLT 가 GOT 로 점프하여 함수의 실제 주소를 가져온다.

이 때 PLT 는 GOT 에 적힌 주소를 검증하지 않고 가져온다.

 

GOT 를 변조하게 되면 공격자가 원하는 함수를 실행할 수 있다.

이러한 공격 기법을 GOT Overwrite 라고 한다.

 

2. GOT Overwrite 실습

//Name : got.c
//Compile : gcc -o got got.c -fno-stack-protector -z -execstack -no-pie -m32

#include <stdio.h>

void main() {
    puts("pwd");
}

pwd 를 출력하고 종료되는 코드이다.

 

여기서 puts 함수의 GOT 를 system 함수의 주소로 덮는다면,

puts 함수 호출 시, GOT 에 저장된 주소를 puts 함수의 주소로 인식하여 system 함수를 실행하게 된다.

gdb 를 통해 확인해보자

 

Dump of assembler code for function main:
   0x08049176 <+0>:     lea    ecx,[esp+0x4]
   0x0804917a <+4>:     and    esp,0xfffffff0
   0x0804917d <+7>:     push   DWORD PTR [ecx-0x4]
   0x08049180 <+10>:    push   ebp
   0x08049181 <+11>:    mov    ebp,esp
   0x08049183 <+13>:    push   ebx
   0x08049184 <+14>:    push   ecx
   0x08049185 <+15>:    call   0x80491ae <__x86.get_pc_thunk.ax>
   0x0804918a <+20>:    add    eax,0x2e76
   0x0804918f <+25>:    sub    esp,0xc
   0x08049192 <+28>:    lea    edx,[eax-0x1ff8]
   0x08049198 <+34>:    push   edx
   0x08049199 <+35>:    mov    ebx,eax
   0x0804919b <+37>:    call   0x8049050 <puts@plt>
   0x080491a0 <+42>:    add    esp,0x10
   0x080491a3 <+45>:    nop
   0x080491a4 <+46>:    lea    esp,[ebp-0x8]
   0x080491a7 <+49>:    pop    ecx
   0x080491a8 <+50>:    pop    ebx
   0x080491a9 <+51>:    pop    ebp
   0x080491aa <+52>:    lea    esp,[ecx-0x4]
   0x080491ad <+55>:    ret
End of assembler dump.

main 함수의 어셈블리다.

puts 함수를 호출하는 부분에 break 를 걸고 실행한다.

 

break puts

puts 함수가 호출하는 주소 0x8049050 을 확인해보자

함수가 처음 호출 되기 때문에 puts 함수의 GOT 에는 puts 함수의 실제 주소가 아닌 PLT+6 주소가 들어있다.

 

여기서 puts 함수의 GOT 에 system 함수의 주소를 넣으면

puts 함수 실행 시 GOT 에 들어있는 system 함수로 점프하여 system 함수가 실행될 것이다.

system

system 함수의 주소는 0xf7dca170 인 것을 확인할 수 있다.

이제 puts 함수의 GOT 0x804c010 을 system 함수의 주소로 덮어씌우자

 

system 함수 주소로 덮어씌우기

gdb 에서 set 명령어를 이용하면 원하는 주소를 덮어씌울 수 있다.

 

continue 를 하게 되면

pwd 명령이 실행된 것을 확인할 수 있다.

 

 

Reference


https://blackperl-security.gitlab.io/blog/2016/05/02/2016-05-02-linux-02/

저작자표시 비영리 변경금지 (새창열림)

'Hacking > Pwnable' 카테고리의 다른 글

RTL (Return To Library)  (0) 2024.07.17
RELRO  (0) 2024.07.15
Dynamic Link 시 함수 호출 과정 (Runtime Resolve)  (0) 2024.06.28
공유 라이브러리(PLT, GOT)  (0) 2024.06.17
NX-bit, ASLR  (0) 2024.05.10
  1. GOT Overwrite
  2. 1. GOT Overwrite
  3. Reference
'Hacking/Pwnable' 카테고리의 다른 글
  • RTL (Return To Library)
  • RELRO
  • Dynamic Link 시 함수 호출 과정 (Runtime Resolve)
  • 공유 라이브러리(PLT, GOT)
GunP4ng
GunP4ng
GunP4ng
GunP4ng
GunP4ng
전체
오늘
어제
  • 분류 전체보기 (103)
    • Hacking (31)
      • Pwnable (30)
      • Web (0)
      • Reversing (0)
      • Misc (1)
    • War Game (20)
      • Pwnable (20)
      • Web (0)
      • Misc (0)
    • pwnable.kr (0)
    • CTF (0)
    • Coding (48)
      • baekjoon (26)
      • C (22)
    • ETC (4)
      • Certificate (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기

공지사항

인기 글

태그

  • return_to_library
  • doublefreebug
  • RTL
  • Tcache
  • BOF
  • 코딩도장
  • 코딩
  • 스택
  • plt
  • Got
  • uaf
  • 백준
  • got_overwrite
  • 포인터
  • ROP
  • 함수
  • srop
  • rtl_chaining
  • x86
  • Use-After-Free
  • 메모리
  • shellcode
  • C언어
  • DFB
  • x64
  • WarGame
  • PIE
  • 구조체
  • Dreamhack
  • tcache_dup

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.3.0
GunP4ng
GOT Overwrite
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.