상세 컨텐츠

본문 제목

12. golem -> darknight

Pwnable Write-Up/02.hackerschool L.O.B

by RACC8N 2020. 3. 10. 19:50

본문

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문제인가 싶다.

 

다음 단계로 넘어가보자.

'Pwnable Write-Up > 02.hackerschool L.O.B' 카테고리의 다른 글

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

관련글 더보기

댓글 영역