[LEVEL11] skeleton -> golem (stack destroyer)
⊙ 문제의 소스를 보자) |
#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"