Shell Craft
shellcraft는 pwntools에서 제공하는 간단하게 셸코드를 만들어주는 강력한 도구이다.
기본적인 문법은 shellcraft [환경].[OS].[syscall 함수](함수 인자) 이다.
소스코드 맨위에
context(arch='i386', os='linux') or context(arch='amd64', os='linux’ 를 넣어주면 shellcraft.[syscall함수](함수 인자)
이렇게 사용가능하다.
http://docs.pwntools.com/en/stable/shellcraft/i386.html - i386
http://docs.pwntools.com/en/stable/shellcraft/amd64.html - amd64
위의 링크에서 추가적인 사용법을 확인 할 수 있다.
PLT, GOT
PLT(Procedure Linkage Table)
외부 라이브러리 함수를 사용할 수 있도록 주소를 연결 해주는 테이블이다.
GOT(Global Offset Table)
PLT에서 호출하는 resolve() 함수를 통해 구한 라이브러리 함수의 절대 주소가 저장되어 있는 테이블이다.
C언어에서 printf와 같은 외부 라이브러리 함수를 사용하기위해 PLT가
호출되면, 이 PLT는 다시 외부 함수들을 호출하기 위해
함수들의 주소가 들어있는 GOT를 참조한다.
Static Link
gcc을 이용해 컴파일 할 때 –static 옵션을 주면 실행 파일 안에 라이브러리 동작 코드가 포함되기 때문에 별도의 추가 작업 없이, 실행 바이너리만으로 라이브러리 함수들을 사용할 수 있게 된다.
Dynamic Link
라이브러리를 실행 파일에 포함시키는 것이 아니라 라이브러리를 하나의 메모리 공간에 매핑하고 이를 프로그램이 공유해서 사용하게 된다.
Dynamic Link 방식으로 컴파일 할 때 PLT와 GOT가 사용된다.
Lazy Binding
Lazy binding은 lazy linking 또는 on-demand symbol resolution이라고도 한다.
앞의 Static 방식처럼 모든 외부 함수의 주소를 한 번에 로딩하지 않고,
Dynamic 방식으로 함수 호출 시점에 해당 함수의 주소만 공유 라이브러리로부터 알아오는 것을 말한다.
'.study > pwnable' 카테고리의 다른 글
[포너블 기초] RTL (0) | 2023.11.12 |
---|---|
[포너블 기초] GOT Overwrite, RTL Chaining (0) | 2023.11.12 |
[포너블 기초] Egg Shell, NX-Bit (0) | 2023.10.23 |
[포너블 기초] Shell Code 만들기 (0) | 2023.10.23 |
[포너블 기초] 버퍼 오버플로우 (0) | 2023.10.01 |