반응형
문제분석 & 풀이
공유 메모리를 이용한 취약점으로 패스워드를 알아내는 문제다.
○ 공유메모리
여러 프로세스에서 동시에 접근할 수 있는 메모리를 뜻한다.
즉, 2명의 사용자가 대화방을 통해 대화를 한다고 했는데, 대화방이 공유 메모리이고 사용자가 프로세스라고 생각하면 될 것 같다.
우리가 해야할 것은 key_t가 7530인 공유 메모리에 접근하여 내용을 가져오는 것이다.
먼저, 필자는 공유메모리와 관련된 함수에 대해 조사했다.
○ 공유메모리 관련 함수
1) shmget()
설명 : 공유메모리를 생성하거나 사용할 수 있는 함수이다.
형식 : int shmget(key_t key, int size, int shmflg);
- key_t key : 공유메모리의 key 값
- int size : 공유 메모리의 크기
반환 : 공유메모리의 ID
2) shmat()
설명 : 할당된 공유메모리를 다른 프로세스가 사용할 수 있도록 권한을 부여한다.
형식 : void *shmat(int shmid, const void *shmaddr, int shmflg);
- int shmid : 공유메모리 ID
- const void *shmaddr : 공유메모리 주소
3) shmdt()
설명 : 공유메모리 사용 후 공유메모리에 대한 프로세스의 연결을 끊는다.
형식 : int shmdt(const void *shmaddr);
- const void *shmaddr : 공유메모리 주소
공유메모리 함수들을 이용하여 공유메모리에 접근하는 코드를 작성해보자.
tmp 디렉토리로 이동하고 hack.c라는 코드를 작성했다. 코드 설명은 주석을 참고하길 바란다.
해당 코드를 hack이라는 이름으로 컴파일하고 실행해보자.
실행하면 공유메모리의 내용이 출력돼고 level11의 패스워드가 노출된다.
반응형