*PIE = 위치 독립 코드(실행할 때 마다 매핑되는 주소가 어디든지에 상관없이 실행되는 파일)
-> 바이너리의 주소를 랜덤화하여 바이너리의 특정 주소의 값을 수정하는 것과 같은 공격을 방어한다.
PLT에는 함수 주소가 Resolve 되지 않았을 때, 함수의 주소를 구하고 실행하는 코드가 있다. (Resolve되었을때 GOT 저장)
ASLR이 걸려 있어도 PIE가 적용되어 있지 않다면 PLT의 주소는 고정되므로, 무작위 주소에 매핑되는 라이브러리의 베이스 주소를 몰라도 이방법으로 함수를 실행할 수 있다. --> Return to PLT
exploit의 방법
1. 라이브러리의 베이스 주소를 구하여 ASLR을 우회기법.
2. PLT를 이용하여 NX 우회.
-PLT를 이용하여 NX 우회-
**ROPgadget --binary ./system --re "pop rdi"
Gadgets information
======================================
0x0000000000400853 : pop rdi ; ret
......
--re옵션을 사용하면 정규표현식으로 가젯을 필터링할 수 있다.
*일반적으로 바이너리에 포함된 가젯의 수가 매우 많으므로 필터링하여 가젯을 찾는 것을 추천.
* movaps https://hackyboiz.github.io/2020/12/06/fabu1ous/x64-stack-alignment/
stack alignment 로 rsp+8은 항상 16의 배수
read 함수로 canary 릭 할 경우 sendline 으로 입력시 카나리 검출시 \x0a 따라 입력 되므로 카나리 정상 노출 안됨.
send로 바꿀것.