argv[1]를 인자로 problem_child 함수를 호출한다.
FPO라고 되어있다. 즉 Frame Pointer Overwrite 문제인 것 같다.
problem_child에서 strncpy를 하므로 해당 위치에 bp걸어보자.
이제 A를 40개 넣고 메모리 변화를 보겠다.
우선 main 함수의 ebp이다. 0xbffffae8임을 알 수 있다.
다음은 problem_child 함수에서 strncpy를 하고난 모습이다. 0x41이 40개 들어가고 다음에는 main함수의 ebp인 0xbffffae8이 와야하는데 마지막 1바이트가 0x00이다.
이는 strncpy로 41바이트를 읽어오기 때문에 A 40개 + 널바이트가 들어가게 되었다.
이 1바이트를 조작하여 쉘코드를 실행시키는 것이 FPO이다.
여기서 main 함수의 ebp를 0xbffffaac로 바꾸고 에필로그를 생각해보면,
leave = mov esp, ebp -> ebp, esp = 0xbffffaac, pop ebp -> ebp = 0x08048500, esp = 0xbffffab0
ret = pop eip -> eip = 0xbffffab4(쉘코드 시작주소) , jmp eip
자 그럼 해보자.
이상하게 cp한 파일과 root에선 쉘이 따지는데 원본파일에서 따지질 않는다. vm문제인가 싶다.
다음 단계로 넘어가보자.
14. bugbear -> giant (0) | 2020.03.11 |
---|---|
13. darkknight -> bugbear (0) | 2020.03.10 |
11. skeleton -> golem (0) | 2020.03.10 |
10. vampire -> skeleton (0) | 2020.03.10 |
09. troll -> vampire (0) | 2020.03.10 |
댓글 영역