LEVEL 12: sfp
FPO(Frame Pointer Overwrite) 기법을 이용해 공격하라는 힌트가 있다.
buffer보다 1바이트 더 strncpy 함수의 영향을 받기 때문에, buffer 뒤에 나오는 sfp의 마지막 바이트가 변조될 수 있다.
이것과 leave, ret을 이용해 eip를 조작할 것이다.
argc의 제한이 없기 때문에 argv[2]까지 이용한다.
argv[2]에 NOP 100개와 25바이트 쉘코드를 넣기 위해, B 125개를 임시로 두고 주소를 확인하기로 한다.
problem_child의 leave에 breakpoint를 걸고, 실행한다.
esp는 buffer를, ebp는 sfp를 가리킨다.
sfp의 주소가 0xbffffa??이므로, buffer 내의 주소로 변조해주면 된다.
buffer 40바이트는 argv[2]의 주소 10개로 채우면 문제 없다.
(※ leave는 mov esp, ebp; pop ebp와, ret는 pop eip; jmp eip와 동일하다.)
argv[2]의 주소를 확인해보면 0xbffffbe3임을 알 수 ㅇ
41번째 바이트는 buffer의 첫 바이트 주소로 하고, 위에서 언급한 대로 payload를 구성했다.
'[Wargame Write-up] > Lord of Buffer Overflow' 카테고리의 다른 글
| [LoB RedHat 6.2] LEVEL 14: bugbear -> giant (0) | 2016.10.19 |
|---|---|
| [LoB RedHat 6.2] LEVEL 13: darkknight -> bugbear (0) | 2016.10.19 |
| [LoB RedHat 6.2] LEVEL 11: skeleton -> golem (0) | 2016.10.18 |
| [LoB RedHat 6.2] LEVEL 10: vampire -> skeleton (0) | 2016.10.18 |
| [LoB RedHat 6.2] LEVEL 9: troll -> vampire (0) | 2016.10.08 |