감자 텃밭

[시스템] RTL-Chaining 본문

System/System Hacking Techniques

[시스템] RTL-Chaining

g2h 2021. 11. 21. 00:17

RTL-Chining는 RTL기법을 연속해서 사용하는 방식의 기법이다.

본래 RTL 기법에서 함수호출과 파라미터로받아오는 부분 사이에

4바이트 만큼의 더미값을 줬다. 그부분은 해당 호출하는 함수가 종료되고 돌아가

RET 주소라고 설명했다. 이 부분을 이용해서 연속적으로 함수들을 호출하여 프로그램을 제어할 수 있다.

 

RTL기법을 선행학습 하지 않았다면 먼저 보고 오도록 하자.

https://hg2lee.tistory.com/65

 

[시스템] Return-to-Libc (RTL)

해당 기법은 프로그램이 정상적으로 종료되면 돌아갈 주소를 담고있는 RET영역에 메모리에 적재되어 있는 공유 라이브러리 함수의 주소로 변경하여, 해당 함수를 호출하는 방식의 기법이다. 해

hg2lee.tistory.com


RTL-Chaining 는 pop ret; 와 같은 가젯을 사용하여 이전 함수에서 사용한 인자(파라미터)들을 정리 후 

ret부분에서 다시 특정 함수를 호출한다.

 

여기서 pop의 개수는 이전 함수에서 사용된 파라미터의 개수만큼 사용하여야 한다.

 

일반적인 RTL 기법은 위와 같이 사용된다. RET영역에 공유라이브러리에서 불러온 System() 함수를 넣고 4바이트 다음에

함수에서 사용할 파라미터(인자)를 저장한다 4바이트 부분에는 프로그램 실행에 아무런 영향을 끼치지 않는 더미값을 넣게된다. 

 

해당 더미값 부분에 가젯을 사용하여 연속적으로 함수를 호출하면 RTL-Chaining기법이 완성된다.

 

위 사진처럼 필요한 함수와 가젯만 존재한다면 체인쳐럼 연결되어 계속해서 원하는 함수를 호출 할 수 있다.

물론 RTL-Chaining 에서도 64bit 환경에서는 레지스터에 먼저 파라미터를 넣고 출력하는 방식을 사용해야 한다.

 

※ 내용이 이상하거나 문제가 있을경우, 또는 설명에 부족한 내용이 있으시면 알려 주시면 감사합니다.