[LOB] vampire -> skeleton

Posted by dw0rdptr
2015. 4. 1. 16:12 System/LOB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/*
        The Lord of the BOF : The Fellowship of the BOF
        - skeleton
        - argv hunter
*/
 
#include <stdio.h>
#include <stdlib.h>
 
extern char **environ;
 
main(int argc, char *argv[])
{
    char buffer[40];
    int i, saved_argc;
 
    if(argc < 2){
        printf("argv error\n");
        exit(0);
    }
 
    // egghunter 
    for(i=0; environ[i]; i++)
        memset(environ[i], 0, strlen(environ[i]));
 
    if(argv[1][47!= '\xbf')
    {
        printf("stack is still your friend.\n");
        exit(0);
    }
 
    // check the length of argument
    if(strlen(argv[1]) > 48){
        printf("argument is too long!\n");
        exit(0);
    }
 
    // argc saver
    saved_argc = argc;
 
    strcpy(buffer, argv[1]); 
    printf("%s\n", buffer);
 
        // buffer hunter
        memset(buffer, 040);
 
    // ultra argv hunter!
    for(i=0; i<saved_argc; i++)
        memset(argv[i], 0, strlen(argv[i]));
}
cs

1) egghunter 환경변수를 못씀

2) argv[1][47] 에 \xbf가 없으면 종료(ret 주소) -> 스택 내에 쉘코드를 써야한다는 것을 뜻합

3) buffer hunter 버퍼를 비움 -> 버퍼내에 쉘코드 쓰기불가

4) argv[1](첫번째 인자) 길이를 48로 제한

5) ultra argv hunter! argv 모두 초기화



버퍼에 인자도 모두 못써서 난감했는데 스택의 끝에 프로그램경로가 저장된다고 한다


argv가 모두 초기화 된 후main+368에 브포를 걸고


경로가 나올때까지 계속찾아본다

.....(엄청난 노가다)


메모리의 맨 끝, 스택으로 보면 맨 처음에 경로가 있는걸 확인할 수 있다


전레벨처럼 쉘코드를 이름으로 한 심볼릭링크를 생성한다

\x68\x8a\xe2\xce\x81\x68\xb1\x0c\x53\x54\x68\x6a\x6f\x8a\xe4\x68\x01\x69\x30\x63\x68\x69\x30\x74\x69\x6a\x14\x59\xfe\x0c\x0c\x49\x79\xfa\x41\xf7\xe1\x54\xc3


여기서 쉘코드앞에 경로 "/home/vampire/"부분을 빼야하는데 간단하게 0xbfffffd2에서 14를 더하면

0xbfffffe5+14=0xbffffff3 을 ret에 덮어주면 된다




?? 분명 제대로했는데;; 주소가 바뀐건가

심볼릭링크 원본을 skeleto1로 바꿔 core를 떨어트린 후 분석해보자




역시 주소가 바뀌었다. 그런데 왜 아까 절대경로이던게 상대경로가 된건지는 잘 모르겠다

"./"를 빼기 위해 2바이트를 더한 0xbfffffd4 를 ret에 덮어주고 페이로드를 다시 짜보자



페이로드와 Password



'System > LOB' 카테고리의 다른 글

함수의 프롤로그(prologue) 및 에필로그(epilogue)  (0) 2015.04.10
[LOB] skeleton -> golem  (0) 2015.04.07
[LOB] troll -> vampire  (0) 2015.04.01
[LOB] orge -> troll  (0) 2015.04.01
[LOB] darkelf -> orge  (0) 2015.03.31