레벨 10 !
레벨 10의 문제는 공유메모리에 관한 취약점을 묻는 문제이다.!
<Hint>
위의 문제에서 주의에서 읽어야 할 부분은
"공유 메모리를 이용" , "key_t의 값은 7530", "소스를 지우고 나가주세요"
3가지 부분이다. 이 부분을 생각해 보면,
두 사람이 대화를 하는데 그 대화내용이 공유 메모리를 이용하고 있으며,
key_t 7530의 값으로 접근 가능하다.
그리고 그 메모리에 접근할 수 있는 소스를 구성하는 것 이다.
자 !
여기서 공유 메모리에 대해서 알지 못한다면 ! 공부 좀 하고 가자.
기본적으로 어떤 프로세스가 개별적으로 실행되고 있는 상황에서의 메모리 공간의
할당 및 사용은 아래와 같다.
하지만,
두 프로세스가 메모리를 공유하는 상황이 필요하다면, 이때 공유 메모리 공간을
사용한다.
각 프로세스는 개별적인 메모리 공간이 존재하면서, 두 프로세스가 함께 사용할 수
있는 메모리 공간이 존재하게 된다.
그럼 공유메모리를 사용하기 위한 방법에 대해 알아보자.
먼저 공유 메모리를 관리 하는 구조체 내용을 보자.
구조체는 /usr/include/bits/shm.h 에 존재한다.
여러 가지 자료들을 저장하고 보유하고 있는 구조체이다.
그럼 공유메모리를 사용할 수 있도록 제공하는 함수를 보면 아래와 같다.
중점적으로 볼 부분은 shmget 함수의 인자인 key 이다.
각 공유 메모리들은 고유의 key를 가지며, 그 key를 통해 접근을 한다.
shmget() : 공유 메모리 공간을 요청
shmat() : 공유 메모리 사용 가능하도록
shmat() : 프로세스와 공유메모리 분리
shmctl() : 공유메모리 정보 가진 shmid_ds 구조체 제어
위의 함수들이 하는 일을 정리해 보았다.
그럼 이 내용들을 기반으로 코딩을 시작하자.
key 값이 7350이라고 했으니 그 키 값을 이용해 공유 메모리를 요청하는 방식으로
소스를 완성하면 아래와 같다.
그럼 출력 값은 아래와 같이 대화 내용이 출력된다.
'ETC > Security' 카테고리의 다른 글
Level 12 (0) | 2013.11.21 |
---|---|
Level 11 (0) | 2013.11.04 |
Level 9 (0) | 2013.10.31 |
Level 8 (0) | 2013.10.31 |
Level 7 (0) | 2013.10.31 |