이번엔 \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
블로그 이미지

천재보다는 범재

,