Notice
Recent Posts
Recent Comments
- Today
- Total
Phantom
[Golem] golem -> darkknight 풀이 본문
반응형
|
이번 단계는 Frame Pointer Overflow라고 하기도 하고 1 Byte Overflow 라고도 하는 기법입니다
쉘 획득과정 페이로드
1. main에서 problem_chid()를 호출합니다
2 .problem_child에서 strncpy로 buffer 40바이트 이후 SFP 1바이트만 덮어쓰고 그 1바이트로
problem_chid의 leave 명령을 통해
mov ebp, esp
pop ebp
로 변조된 ebp값을 pop해서 main의 ebp를 변조된 ebp로 저장하고
3. problem_child의 ret를 통해 main으로 복귀하여 main의 leave ret을 실행하는데
problem_child에서 변조된 ebp를 main에서 받아 변조된 main의 ebp로 이동,
pop ebp에 의해 esp는 +4 byte증가합니다 esp+4의위치는 ret의 위치이구요
ret명령으로 eip는 esp를 참조해서 쉘코드를 실행할 주소로 점프합니다
먼저 소스코드를 조금 수정했습니다
Colored By Color Scripter™1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #include <stdio.h> #include <stdlib.h> void problem_child(char *src) { char buffer[40]; strncpy(buffer, src, 41); printf("%s\n", buffer); printf("[ %p ]\n",buffer); } main(int argc, char *argv[]) { if(argc<2){ printf("argv error\n"); exit(0); } problem_child(argv[1]); } |
명령문 작성하기
우리는 마지막 끝자리 바이트를 이용해 SHELLCODE가 있는곳으로 점프할건데요 우선
펄로 아무 값이나 집어넣고 buffer의 시작점을 알아냅니다
시작지점이 0xbffffaa4네요 그럼 마지막 바이트를 \xa4로 바꾸면 저곳으로 점프를 하겠죠?
명령문에 쓸 코드는 AAAA + ret로 점프할 코드(NOP코드 사이)(4) + NOP(7) + SHELLCODE(25) + 변조할끝자리(1) = 41바이트가 되겠는데요 작성하겠습니다
반응형
'Pwnable > [Wargame]Load of Bof' 카테고리의 다른 글
[Bugbear] bugbear -> giant 풀이 (0) | 2015.01.07 |
---|---|
[Darkknight] darkknight -> bugbear 풀이 (0) | 2015.01.06 |
[Skelton] skeleton -> golem 풀이 (0) | 2014.08.20 |
[Vampire] vampire -> skeleton 풀이 (0) | 2014.08.07 |
[Troll] troll -> vampire 풀이 (4) | 2014.08.04 |
Comments