plt와 got

2022. 7. 20. 08:09·To do list/Complete
728x90
반응형

특정 함수를 실행시키고자할때
plt를 써야하나?
got을 써야하나?
libc로 로드된 함수 주소를 써야하나?
아니면 모두 상관 없나?


2022-07-22 clear

got에 대한 이해가 부족했다.

 

정리해보자면

동적 링크, 정적링크부터 이해해야하는데, 차이라면 해당 함수가 프로그램에 포함되느냐 마느냐이다.

 

동적 할당은 프로그램에 포함되지 않고, 각 함수의 offset 만 기억하고 있으며,

정적할당은 프로그램에 포함되어버리는 것이다.

그래서 동적 할당 시 각 함수의 위치를 찾을 수 있는 명령어들이 해당 함수 call 시 포함된다.

 

이때 쓰이는 것이 plt와 got.

plt는 got에 실제 함수의 위치를 넣어주는 역할을 하고

got는 실제 함수의 위치를 담고있는 역할을 한다.

 

이를 gdb로 확인해보면

우선 프로그램 실행 전에는 아래와 같고

gef➤  p puts
$1 = {<text variable, no debug info>} 0x400570 <puts@plt>
gef➤  x/i 0x400570
   0x400570 <puts@plt>: jmp    *0x200aa2(%rip)        # 0x601018 <puts@got.plt>
gef➤  x/x 0x601018
0x601018 <puts@got.plt>:        0x00400576

프로그램 실행 후에는 아래와 같다.

gef➤  b *main
Breakpoint 1 at 0x4006a7
gef➤  r
Starting program: /home/kali/Downloads/1/rop
[*] Failed to find objfile or not a valid file format: [Errno 2] No such file or directory: 'system-supplied DSO at 0x7ffff7fca000'

Breakpoint 1, 0x00000000004006a7 in main ()

gef➤  p puts
$2 = {int (const char *)} 0x7ffff7e4de10 <__GI__IO_puts>

 

그럼 이 주소는 어떻게 찾느냐.

쉽게 설명하면 라이브러리 파일의 시작을 0으로 두고 특정 함수의 위치가 어디있는지 offset만 알면 찾을 수 있다.

하지만 라이브러리 버전에 따라 그 offset이 다르기에 이를 기준으로 프로그램이 어떤 libc 파일을 쓰고있는지 알 수 있다.

또한 libc 버전을 알 수 있으면 다른 함수가 어디있는지도 알 수 있다.

https://libc.rip/

 

libc-database

 

libc.rip

 

728x90
반응형

'To do list > Complete' 카테고리의 다른 글

for "one" - rao  (0) 2022.11.16
[dreamhack] basic_exploitation_003  (0) 2022.08.01
64bit system 함수 segmentation fault 오류  (0) 2022.07.19
[Root-Me] ELF x86 - Stack buffer overflow basic6 : /bin/sh 주소 찾아 넣어서 실행해보기.  (0) 2022.07.14
[Root-Me] ELF x86 - BSS buffer overflow : python 코딩해서 풀어보기.  (0) 2022.07.12
'To do list/Complete' 카테고리의 다른 글
  • for "one" - rao
  • [dreamhack] basic_exploitation_003
  • 64bit system 함수 segmentation fault 오류
  • [Root-Me] ELF x86 - Stack buffer overflow basic6 : /bin/sh 주소 찾아 넣어서 실행해보기.
wyv3rn
wyv3rn
아저씨의 흔한 취미. wyv3rn#1249
  • wyv3rn
    think storage
    wyv3rn
  • 전체
    오늘
    어제
    • 분류 전체보기 (520)
      • To do list (7)
        • Doing (1)
        • Complete (6)
      • Diary (35)
      • Tips & theory (75)
      • Kernel Exploit (28)
        • Theory (16)
        • Exercise (5)
      • File Structure (6)
      • Wargame (322)
        • pwn.college (34)
        • Dreamhack (156)
        • pwnable.kr (15)
        • Lord of Sqlinjection (4)
        • Cryptohack (20)
        • Root me (27)
        • CodeEngn (4)
        • Exploit Education (22)
        • ROP Emporium (8)
        • H4C (10)
        • Hackerchool (22)
      • CTF (46)
        • Solved (44)
        • Unsolved (2)
      • Script (0)
      • RubiyaLap (0)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

    • PWN wargame 모음 (및 느낀점)
    • 비공개 글들에 대해.
    • 뭐라도 하나 얻어가시길...
  • 인기 글

  • 태그

    64bit
    FSB
    x64
    lob
    CANARY
    tcache
    RTL
    cryptohack
    Buffer Overflow
    Me
    libc
    vtable
    phoenix
    x86
    pwnable.kr
    exploit education
    dreamhack
    _IO_FILE
    ROOT ME
    pwntools
    32bit
    la ctf
    BOF
    root
    root-me
    heap
    rop
    docker
    Format String Bug
    hackerschool
  • 최근 댓글

  • 최근 글

  • 250x250
    반응형
  • hELLO· Designed By정상우.v4.10.3
wyv3rn
plt와 got
상단으로

티스토리툴바