Library
자주 사용하는 소스코드를 미리 작성하여 프로그래머가 원할 때 빠르게 사용할 수 있게 가공된 형태
- 컴파일 시간 단축
- 소스 코드를 쉽게 사용 가능
- 소스 코드의 일부를 보호 및 비공개 가능
PLT & GOT
PLT (procedure linkage table) : 외부 라이브러리에서 함수가 plt에 매핑되어 있다.
GOT (golbal offset table) : 함수의 주소를 담고 있는 테이블로 plt가 got를 참조한다.
PLT와 GOT에 대한 자세한 설명 : https://m-in-zu.tistory.com/77
Return To Library
NX를 Bypass 하기 위한 방법으로 제시된 익스플로잇 기법이다
실행 권한이 남아있는 코드 영역(라이브러리)으로 반환 주소를 덮는 공격 기법
프로세스에 실행 권한이 있는 메모리 영역
- 바이너리 코드 영역
- 라이브러리 코드 영역
표준 C 라이브러리를 libc라고 함
따라서 해당 공격기법인 Return To Library는 Return To Libc (ret2libc)라고도 하며, 이 하위에는 Return To PLT로, PLT를 사용하여 라이브러리의 코드를 사용하는 공격기법이 있다.
NX / DEP Bypass
NX bit가 설정되면 스택, 힙 등 메모리 대부분 영역이 실행 권한이 없다.
(윈도우의 경우 DEP라고 함)
즉, 스택이나 힙에 쉘코드 등을 올리는 단순한 방법으로는 익스플로잇이 불가능하다.
따라서 라이브러리 코드 영역을 이용하여 실행한다
libc
libc에는 system, execve 등 프로세스의 실행 흐름을 가져올 수 있는 함수들이 존재함
함수들 뿐만 아니라 /bin/sh 문자열도 존재한다.
이 문자열을 system에 전달하면 system("/bin/sh")를 실행할 수 있음
GDB로 RTL
libc의 base 주소와, libc 내의 함수 주소의 차이는 항상 같다.
즉, libc에 저장된 함수들은 순서대로 되어있음 > libc_base와 알아내고자 하는 함수의 주소 차이는 항상 같음
* ASLR이 걸려있어도 함수와 base 주소의 차이를 통해 쉽게 계산할 수 있음
print system
을 하면, system의 주소를 프린트 한다
find 라이브러리 주소 시작, 라이브러리 주소 끝, "/bin/sh"
해당 명령어를 입력하면 "/bin/sh"의 위치를 알 수 있다
이러한 명령어를 조합하여, Return address에 system("/bin/sh") 명령어를 스택이나 힙에 직접 쓰지 않고 라이브러리를 사용하여 익스플로잇 할 수 있음
reference
- Dreamhack SystemHacking > Exploit:return to library
'Hacking > Pwnable' 카테고리의 다른 글
[Exploit] Return Oriented Programming (ROP chain) (0) | 2024.09.19 |
---|---|
[Mitigation] ASLR (0) | 2024.08.25 |
[Mitigation] NX (0) | 2024.08.25 |
[Mitigation] Stack Canary (0) | 2024.08.24 |
gdb를 pwntools와 디버깅하기 (0) | 2024.07.26 |