ROP
ROP?
Return Oriented Programming 의 약자
취약한 프로그램에 기계어 코드를 삽입하여 콜스택을 제어하는 공격기법이다.
필요한 배경지식
- PLT,GOT
- GOT Overwrite
- RTL Chain
- Gadget
PLT, GOT
- PLT : 외부 프로시저를 연결해주는 테이블
- GOT : PLT가 참고하는 테이블, 실제 함수 주소가 들어있다.
PLT, GOT의 경우 첫번째 호출과 그 후의 호출이 다른데 첫번째 호출에서는 GOT에 PLT+6주소가 들어있어서 복잡한 과정을 거쳐 외부 라이브러리에 함수를 GOT에 연결시키고 그 후에 호출될 때는 GOT에 실제 함수 주소가 들어있어서 GOT에서 실제 함수를 호출 시켜준다.
GOT Overwrite
말 그대로 GOT를 덮어씌우는 기법
GOT를 덮어씌워 특정 함수를 호출할 경우 특정 함수가 아닌 해커가 덮어씌운 함수가 호출되게 함
정상적인 함수 호출
GOT Overwrite 된 함수 호출
RTL Chain
https://c0wb3ll.tistory.com/entry/FTZ-level11-4-Chaining-RTL
Gadget
코드 조각
ppr 가젯
example
rop.c
gcc -m32 -mpreferred-stack-boundary=2 -fno-stack-protector -no-pie -fno-pic -o rop rop.c
를 이용하여 aslr과 nx-bit는 켜논 상태로 실습을 진행하였다.
exploit.py
익스코드
setexploit.py
setreuid함수를 이용하여 root권한을 탈취하려고 시도해보았으나 왜인지 안되었다....ㅠ