해킹 공부/시스템 해킹

해커스쿨 LOB level 1

O'bin 2022. 3. 20. 21:43

id : gate

pw : gate

 

 

드디어 LOB(Lord of the BOF) 시작~!

 

[gate@localhost gate]$ ls
gremlin  gremlin.c
[gate@localhost gate]$ ./gremlin
argv error
[gate@localhost gate]$ cat gremlin.c
/*
        The Lord of the BOF : The Fellowship of the BOF
        - gremlin
        - simple BOF
*/

int main(int argc, char *argv[])
{
    char buffer[256];
    if(argc < 2){
        printf("argv error\n");
        exit(0);
    }
    strcpy(buffer, argv[1]);
    printf("%s\n", buffer);
}

우선 파일 목록을 확인(ls)해 봤더니 gremlin라는 실행파일과 gremlin.c라는 소스파일이 있다.

gremlin을 실행(./gremlin)하니 argv error가 나왔다. 그냥 단순히 실행만 하는 프로그램은 아닌가보다.

gremlin.c 파일 내용을 확인하기 위해 파일 읽기(cat)명령을 사용했다.

소스코드 내용을 보면

char형이고 크기가 256인 배열 buffer 선언,

만약 글자수가 2 이하이면 argv error 출력 후 프로그램 종료,

아니면 입력받은 값을 buffer에 복사해 넣고(strcpy함수)

buffer의 내용을 출력하는 코드이다.

 

가장 간단하고 strcpy의 취약점을 이용해 버퍼오버플로우 공격을 할 수 있는 형태의 문제이다.

FTZ에서 풀어봤던 문제와 거의 똑같아서 자신감 있게 풀기 시작함ㅋㅋ

 

 

[gate@localhost gate]$ ./gremlin aaaaaaa
aaaaaaa
[gate@localhost gate]$ ./gremlin aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Segmentation fault

일단 gremlin에 입력값 aaaaaaa을 넣어보았더니 그대로 출력된다.

선언된 배열의 크기보다 넘치게 aaaaaa를 많이 넣어봤더니 마찬가지로 출력되면서 Segmentation fault 경고도 나온다.

 

[gate@localhost gate]$ vi mygremlin.c
[gate@localhost gate]$ gcc -o mygremlin mygremlin.c
[gate@localhost gate]$ ls
gremlin  gremlin.c  mygremlin  mygremlin.c

gremlin프로그램 원본은 권한이 제한되어 있어 분석하기 쉽지 않다. 소스코드를 공개했으니 코드는 똑같고 이름만 다른 mygremlin프로그램을 만들어 분석하기로 했다.

vi 편집기를 열어 mygremlin.c 파일을 만든다. 스크롤을 위로 올려서 gremlin.c 내용 복사 후 마우스 오른쪽으로 붙여넣기

esc 눌러 명령모드로 진입한 후 :wq(저장 후 종료)를 입력 한다.

gcc -o 로 컴파일 후 파일 목록을 확인하면 mygremlin 실행파일이 생성된 것을 볼 수 있다.

 

 

 

 

 

 

 

 

flag : hello bof world

 

플래그 획득은 했는데, 문제 푸는 과정에서 bash쉘 문제로 애를 먹었다. 다시 정리해보고 중간 풀이내용을 추가해야겠다.