⊙ 문제의 소스를 보자) |
#include <stdio.h> #include <stdlib.h>
extern char **environ;
main(int argc, char *argv[]) { char buffer[40]; int i;
if(argc < 2){ printf("argv error\n"); exit(0); }
if(argv[1][47] != '\xbf') { printf("stack is still your friend.\n"); exit(0); }
strcpy(buffer, argv[1]); printf("%s\n", buffer);
// stack destroyer! memset(buffer, 0, 44); memset(buffer+48, 0, 0xbfffffff - (int)(buffer+48)); } |
1) if문으로 argv[1][47] != '\xbf' 체크. |
♧ 공유 라이브러리 이름을 쉘코드로 하여 LD_PRELOAD 등록 후 스택 찌꺼기?에 남아있는 곳을 찾아 RET으로 설정한다.
∑ 익스 플로잇 작성! | ||||
① 공유 라이브러리 생성
② LD_PRELOAD 환경변수 등록
③ GDB로 RET 주소 찾기. (사본::cp golem melog)
④ ∑xploit
|
♣ 기타 사항 |
ⓐ LD_PRELOAD로 등록 후 원본(golem)과 사본(melog)의 libc주소가 서로 틀려 졌다. ⓑ 그리하여 RTL을 이용 하여 만든 쉘코드는 원본(golem)에 적용되었다. (이유는 잘 모르겠다 좀더 시간 내서 공부를 해야 될듯...-_)
|
golem : "cup of coffee"
'워게임(WarGame) > BOF원정대(LOF)' 카테고리의 다른 글
[LEVEL13] darkknight -> bugbear (RTL1) (0) | 2011.06.08 |
---|---|
[LEVEL12] golem -> darkknight (sfp) (1) | 2011.06.08 |
[LEVEL10] vampire -> skeleton (argv hunter) (0) | 2011.06.07 |
[LEVEL9] troll -> vampire (check 0xbfff) (0) | 2011.06.05 |
[LEVEL8] orge -> troll (check argc) (0) | 2011.06.04 |