[ftz] hackerschool level10 풀이
- 보안/HackerSchool-ftz
- 2019. 11. 13. 23:14
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 |
이 글을 공유하기