ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

    댓글

Designed by Tistory.