반응형
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 |