ROP

c0wb3ll ㅣ 2020. 8. 3. 15:35

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권한을 탈취하려고 시도해보았으나 왜인지 안되었다....ㅠ