⊙ 문제의 소스를 보자) |
#include <stdio.h> #include <stdlib.h>
void problem_child(char *src) { char buffer[40]; strncpy(buffer, src, 41); printf("%s\n", buffer); }
main(int argc, char *argv[]) { if(argc<2){ printf("argv error\n"); exit(0); }
problem_child(argv[1]); } |
♧ 이번 문제는 RET이 아닌 SFP의 1Byte를 변조하여 프로그램의 실행 흐름을 바꾸는 문제이다. | ||
① main에서 problem_child() 호출
(*strncpy 호출 후 스택 내용) ③ problem_child의 프레임에 leave 명령을 통해
SFP가 있는 곳으로 이동 후 변조된 ebp값을 pop 함으로써 main()의 ebp값은 변조된 ebp값으로 저장. ④ child 프레임의 RET을 통해 다시 main 프레임으로 복귀. ⑤ main 프레임의 leave가 수행된다.
⑥ 마지막으로 ret 명령으로, eip 는 esp를 참조해서 다음 실행할 주소로 점프 한다.
♧이렇듯 1Byte의 변조만으로 실행흐름이 바뀔 수 있다. |
∑ 익스 플로잇 작성! | ||
① 대략적인 구성. ( buffer 주소 :: [ 0xffffac4 ] 위 그림 참조.)
② 공격 스크립트 작성
③ ∑xploit
|
※ 사전에 chsh명령 -> bash2로 변경 후 재로그인 함.
golem : "cup of coffee"
'워게임(WarGame) > BOF원정대(LOF)' 카테고리의 다른 글
[LEVEL14] bugbear -> giant (RTL2, only execve) (0) | 2011.06.09 |
---|---|
[LEVEL13] darkknight -> bugbear (RTL1) (0) | 2011.06.08 |
[LEVEL11] skeleton -> golem (stack destroyer) (0) | 2011.06.08 |
[LEVEL10] vampire -> skeleton (argv hunter) (0) | 2011.06.07 |
[LEVEL9] troll -> vampire (check 0xbfff) (0) | 2011.06.05 |