-
RTL(Return To Libc)Hack/Pwnable 2015. 6. 24. 21:51
RTL은 Return To Libc의 약자로, RET를 원하는 함수로 덮어 실행하게 하는 공격기법이다.
공격방식은 아래와 같다.
Buf + SFP + system + dummy(exit) + /bin/sh
예제로보자.
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
char buffer[40];
strcpy(buffer,argv[1]);
printf("%s\n",buffer);
return 0;
}
코드는 간단하다. argv[1]값을 buffer에 집어넣는다.
우선 buffer[40] + dummy[8] + sfp[4] + ret[4]로, 총 56바이트이다.
56바이트에서 RET가 A로덮힌다.
그럼 52바이트를주고, 시스템함수로 덮어주면 된다.
system함수와 exit함수를 구했다.
/bin/sh주소는 알아서 구하길바란다. gdb에서 find &system,+99999999,/bin/sh를 이용하는방법도있고, 코딩으로 구하는법등 다양하다.
이제 공격할준비가 끝났으니 바로 공격을 시도했다.
52바이트로 SFP까지 덮어주고, system + exit + /bin/sh로, system함수가 실행됬다.
성공
*system함수뒤에 4바이트 더미와 /bin/sh를 넣어주는 이유
- system, execl함수는 ebp+8을 인자로 인식한다. 때문에 exit함수나 4바이트의 dummy값을 넣어준다.
*exit를 넣어주는이유
- system함수가 ebp+8을 인자로받고 실행하고나서는 system함수뒤에있는 더미값을 실행시킨다. exit를 넣어주면 자동으로 탈출하는데, dummy를 넣어주면 부득이하게 SegmentFault가 일어난다. 딱히 상관은없다.
'Hack > Pwnable' 카테고리의 다른 글
Windows BOF (0) 2015.06.25 stack canary for gcc (0) 2015.06.24 메모리 보호기법 정리 (0) 2015.06.16 Return To Libc 원리 (0) 2015.06.11 Fedora strcpy ROP (0) 2015.06.10