ID: level10
Password: interesting to hack!
cat hint

level10의 힌트를 요약하면, key 값이 7530인 공유 메모리에 접근하여 두 사용자의 대화를 도청하라는 내용이다. 문제를 풀기 위해서는 공유 메모리에 대한 공부가 필요할 것 같다.
공유 메모리
여러 프로세스가 동일한 메모리 공간에 접근할 수 있게 하는 메커니즘으로, 각 프로세스는 공유 메모리에 접근하기 위해 메모리 주소를 참조한다. 공유 메모리를 사용하면 프로세스 간 데이터 공유 및 통신을 효율적으로 할 수 있다.
- shmget(): 공유 메모리를 생성하거나 이미 존재하는 공유 메모리에 접근할 수 있는 식별자를 반환하는 함수
int shmget(key_t key, int size, int shmflg) ------------------------------------------- key_t key: 공유 메모리를 식별하는 key int size: 공유 메모리의 크기 int shmflg: 함수 동작 관련 플래그 IPC_CREAT: 권한과 함께 제시해 새로운 메모리 세그먼트 생성 IPC_EXCL: IPC_CREAT과 함께 사용 메모리 세그먼트가 존재하면 실패 반환
- shmat(): 위의 함수로 얻은 공유 메모리 식별자를 사용하여 해당 메모리 세그먼트를 프로세스의 주소 공간에 첨부하는 함수
void *shmat(int shmid, const void *shmaddr, int shmflg) ------------------------------------------------------- int shmid: shmget 함수로 얻은 id const void *shmaddr: 공유 메모리가 붙을 주소 명시 NULL이면 시스템이 적절한 주소를 찾아 붙여줌 int shmflg: 공유 메모리에 대한 프로세스의 접근 권한을 설정 SHM_RDONLY: 읽기 전용으로 설정 아무 값도 지정하지 않으면 읽기/쓰기 모드로 설정
위의 내용을 바탕으로 간단한 소스 코드를 작성해 보자.
vi source.c

작성한 코드를 해석하면 주어진 키 7530를 사용하여 공유 메모리 세그먼트에 접근하고, 그 내용을 문자열로 읽어서 출력하는 프로그램이다. 이제 이 소스 코드를 컴파일하고 실행해 보자.
gcc -o source source.c
./source

도청에 성공하여 level11의 패스워드를 알아냈다!