ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [FTZ Level12 풀이]
    System/FTZ 2018. 2. 15. 23:49

    [Level12 Code]

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
     
    int main( void )
    {
        char str[256];
     
         setreuid( 30933093 );
        printf"문자열을 입력하시오.\n" );
        gets( str );
        printf"%s\n", str );
    }  
     
    cs


    해당 문제는 Level11과 비슷하지만, printf( )의 FSB 취약점이 사라졌고 gets( )함수로 입력을 받는다.

    나는 이번 문제를 RTL을 이용해서 풀어봤다.

    RTL정리 : [이곳]


    #공격 시나리오

    1. EIP까지의 offset을 구한다.


    2. System( )의 주소를 구한다.


    3. /bin/sh문자열의 주소를 구한다.


    4. RET공간에 System( )주소를 저장해서 System("/bin/sh")이 실행되도록 한다.


    5. 쉘획득!


    FTZ환경에서 라이브러리 주소에는 ASLR이 걸려있지 않음으로 RTL이 공격이 가능하다.

    ASLR이 걸려있다면, 쉘코드를 이용하는 방법 등 다른 방법을 이용해야 할 것이다.




    [RTL 정보수집#1]

    우선 ESP에서 EIP까지의 offset은 간단한 계산으로 알아낼 수 있다.


    [gets( ) BP]

    gets( )실행 직후에 BP를 걸고 실행한다.


    [str 스택주소]

    Input값에 AAAA값을 주고, 스택을 보면 [0xbfffdef0]에 41414141(AAAA)가 저장돼있는걸 확인할 수 있다.

    저 주소가 버퍼의 시작 주소이므로, 저 주소에서 EIP까지의 offset을 구하면 된다.


    [EIP offset]

    info frame 명령어로 EIP의 주소를 확인한결과 [0xbfffdffc]란 것을 알았다.


    [0xbfffdffc](EIP) - [0xbfffdef0](ESP) = 268

    즉, offset은 268란 것을 알아냈다.




    [RTL 정보수집#2]

    이제 System( )주소와 /bin/sh문자열의 주소를 찾아야한다.

    우선 System( )의 주소부터 알아보자


    [System( ) Address]

    System( )의 주소는 [0x4203f2c0]이다.


    이제 /bin/sh의 주소를 찾으면 되는데, 이 문자열을 찾는 방법도 다양하다.

    그 중에서 가장 간편한 방법인 라이브러리에서 /bin을 파싱해서 해당 주소값을 넘겨주도록 하겠다.


    [libc /bin/sh]

    objdump -s /lib/tls/libc.so.6 | grep /bin 명령어로 libc안에 있는 문자열 /bin을 파싱해보면

    /bin/sh\x00의 값이 연속적으로 있는것을 확인할 수 있다.

    따라서, 문자열의 주소는 [0x42127ea4]임을 확인할 수 있다.


    자 이제 필요한 정보들을 모두 모았으니 정리를 한번 해보자

    1. EIP offset : 268


    2. System( ) 주소 : 0x4203f2c0


    3, /bin/sh의 위치 : 0x42127ea4





    [RTL Attack]

    RTL PAYLOAD 구성은 이러하다.

    buf[268] + System( ) + AAAA(System( )의 RET값) + /bin/sh


    [attackme RTL]

    RTL공격으로 성공적으로 Level13권한의 쉘을 딴 것을 확인할 수 있다.

    자 다음 Level13문제를 풀러가보도록 하자




    'System > FTZ' 카테고리의 다른 글

    [FTZ Level15 풀이]  (0) 2018.02.16
    [FTZ Level14 풀이]  (0) 2018.02.16
    [FTZ Level13 풀이]  (0) 2018.02.16
    [FTZ Level11 풀이 ]  (0) 2018.02.15
    HackerSchool Level1 문제풀이  (1) 2017.10.05

    댓글

Designed by Tistory.