<보안 study>/시스템

RTL기법이란? (Return To Library)

gosoeungduk 2018. 7. 26. 01:58
반응형

RTL 기법.

프로그램은 printf나 scanf 등등.. 의 함수들을 프로그램에 적용 된 라이브러리(Library)파일에서 갖고 온다.

여기서 함수의 plt와 got를 이해해야한다. 


PLT는 간단히 말하면,

got를 비롯한 여러가지의 함수 프로시져를 모아놓은 테이블.


PLT안에 자리 잡은 GOT를 간단히 말하자면,

함수의 본래 실제주소를 담고있는 테이블.


함수가 호출되면 PLT를 거쳐 GOT를 거쳐 결국엔 함수의 실제주소에 도달하게 된다는 것이다. (자세한 도달 과정은 따로 더 공부하기 !)

이 과정에서 실제주소에 영향을 미치는 라이브러리 파일을 이용할 수 밖에 없는데 그것을 이용한 공격기법이다.

예시를 들면 라이브러리에 있는 system함수를 ret에 덮어씌워서(복귀주소에 복귀할 곳을 system함수로 바꿔주는 꼴) 쉘을 켜주는 것이 

이 기법의 일종이다.


단, PLT & GOT 특성상(plt와 got는 선행과정!) 한 번 호출된 후에야 PLT에 바로 실제주소가 저장됨으로 system같은 함수를 쓰고 싶은데 소스에서 만약 그 함수를 사용한적이 없다면 불가능한 기법이다.









RTL기법을 시연할 예제이다. 취약점이 있는 함수가 딱 보인다. strcpy함수에 의해 ret를 침범하여 오버플로우를 일으킬 것이다.


RTL을 사용할 순서는 대강 이렇다. 


1. scanf에 globali에 "/bin/sh" 입력 -> 2. strcpy로 버퍼 채우고,ret에 system함수 주소(plt주소) 덮어씌우기 

-> 3. system함수 인자로 globali 주소주기


pwntools로 쉘을 따보자.




성공 !!



반응형

'<보안 study> > 시스템' 카테고리의 다른 글

Win-AFL 퍼저 빌드과정  (1) 2022.08.11
[PoC] log4shell(CVE-2021-44228)  (0) 2021.12.12
[CodeGate_OpenCTF] csurself  (0) 2019.03.29
함수 프롤로그(prologue) 에필로그(epilogue)  (0) 2018.07.26
[linux]리눅스 명령어  (0) 2018.07.24