[Pwnable] PLT, GOT
2021. 3. 21. 20:48
Hacking/Pwnable
PLT, GOT example4의 디스어셈블리 결과를 보면 puts와 scanf 함수를 호출할 때 해당 함수의 라이브러리 코드 주소로 바로 점프하지 않고 PLT 영역으로 점프하는 것을 확인할 수 있다. Procedure Linkage Table(PLT)는 외부 라이브러리 함수를 사용할 수 있도록 주소를 연결해주는 역할을 하는 테이블이다. Global Offset Table(GOT)는 PLT에서 호출하는 resolve 함수를 통해 구한 라이브러리 함수의 절대 주소가 저장되어 있는 테이블이다. ASLR이 적용되어 있는 환경에서, 동적으로 라이브러리를 링크하여 실행되는 바이너리(Dynamically linked binary)는 바이너리가 실행될 때마다 라이브러리가 매핑되는 메모리의 주소가 변한다. 따라서 PL..
[Pwnable ] NOP Sled 실습
2021. 3. 11. 14:39
Hacking/Pwnable
NOP은 "No OPeration"의 약자로, 명령어 중의 하나다. NOP은 xchg eax, eax와 같이 프로그램의 실행에 영향을 주지 않는 명령어이기 때문에, 프로그램이 실행 중에 NOP 명령어를 만나면 다음 명령어로 넘어가는 것과 같은 효과를 준다. x86 아키텍처의 NOP 명령어 바이트코드는 0x90이다. NOP Sled, 혹은 NOP Slide는 주로 셸코드의 주소를 정확히 알아내기 힘들 경우 큰 메모리를 확보하여 셸코드 주소의 오차 범위를 크게 만들 때 사용한다. 예를 들어, 0x100 주소에 셸코드가 저장되어 있다고 가정해 보자. 만약 NOP Sled가 없다면 정확히 0x100 주소로 실행 흐름을 바꿔야 셸코드가 실행된다. 하지만 셸코드 앞에 0x10000바이트의 NOP Sled를 붙인다면..