역시 stack, rtl을 사용 할 수 없다. 그리고 strncpy로 48바이트를 읽어온다.
버퍼를 초기화하지 않으므로 버퍼에 쉘코드를 넣을 수 있다.
하지만 ret주소로 스택부분 \xbf가 오지 못하므로 방법을 찾아야한다.
ebp를 변조하고, leave-ret 가젯위치로 ret을 덮어씌우면, 될 것 같다. Fake EBP 기법이다.
sfp를 shellcode - 4 위치로 조작한 후 , ret 을 leave-ret 가젯으로 바꾸면
ebp = shellcode - 4 가 되며, leave (mov ebp, esp) (pop ebp) 를 하게된다. 이로인해 esp는 shellcode 실행 위치를 가리키며, 이상태에서 ret을 할 경우 eip는 쉘코드 실행위치로 jmp하게 된다.
leave-ret 가젯 0x80484df 를 사용하자.
이제 여기서 sfp 부분을 shellcode - 4 위치, ret 을 leave-ret 가젯으로 바꿔 payload를 작성해보자.
payload는 다음과 같다. &(shellcode + 4)(4) + shellcode(25) + NOP(11) + sfp=&(shellcode - 4)(4) + ret(leave-ret) (4)
하지만 카피본에서는 쉘이 따졌지만, 원본에서는 쉘이 안따진다. 원인은 알지 못했다.
다음 단계로 넘어가보자.
18. succubus -> nightmare (0) | 2020.03.11 |
---|---|
17. zombie_assassin -> succubus (0) | 2020.03.11 |
15. giant -> assassin (0) | 2020.03.11 |
14. bugbear -> giant (0) | 2020.03.11 |
13. darkknight -> bugbear (0) | 2020.03.10 |
댓글 영역