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
  • 전체
    오늘
    어제
    • 분류 전체보기 (559)
      • To do list (0)
        • Doing (1)
        • Complete (6)
      • Diary (37)
      • Tips & theory (77)
      • Kernel Exploit (28)
        • Theory (16)
        • Exercise (5)
      • File Structure (6)
      • Wargame (352)
        • Dreamhack (183)
        • pwn.college (37)
        • pwnable.tw (0)
        • 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 (50)
        • Solved (48)
        • Unsolved (2)
      • Script (0)
      • RubiyaLap (0)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

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

  • 태그

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

  • 최근 글

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

티스토리툴바