level10

해커스쿨 FTZ 2018. 3. 26. 17:54

 

 

두명의 사용자가 대화방을 이용하여 비밀스런 대화를 나누고 있다. 그 대화방은 공유 메모리를 이용하여 만들어졌으며, key_t의 값은 7530이다. 이를 이용해 두 사람의 대화를 도청하여 level11의 권한을 얻어라.

 

공유메모리 사용 내역을 알아보기 위해 ipcs -a를 사용했다.

 

key가 0x00001d6a를 10진수로 바꾸면 7530이다. 힌트에서 언급한 숫자와 같다.

 

이 코드부분은 (http://molrayo.tistory.com/entry/Network-shmgetshmatshmdtshmctl-%EA%B4%80%EB%A0%A8-%EC%98%88%EC%A0%9C)를 참고했다.

 

공유메모리에 대한 지식이 많이 없는 상태에서 코드들을 뒤져보며 이해한 건,

 

1. shmget()

int shmget(key_t key, int size, int shmflg);

shmget을 통해 공유메모리에 접근하는데 여기서 key_t값을 전에 확인한 7530으로 설정하였다. shmget함수는 공유메모리의 ID값을 리턴하기때문에 이를 shmid에 저장한다.

 

 

2. shmat()

void *shmat(int shmid, const void* shmaddr, int shmglf)

shmat는 공유메모리를 프로세스에 첨부한다. 붙이는 영역은 shmaddr로 결정할 수 있는데 NULL인경우 시스템이 알아서 적당히 붙인다고 한다.

그리고 shmat()함수는 해당 공유 메모리 id값에 대한 어드레스를 리턴해준다.

 

 

3. shmctl()

int shmctl(int shmid, int cmd, struct shmid_ds *buf);

shmctrl()은 공유메모리를 제어한다. 즉 공유메모리의 내용을 받아오거나 수정, 삭제 하기 위해 사용한다.

 

이 코드의 경우 공유메모리의 내용을 받아와야하기 때문에 가장먼저 shmget()을 통해 접근하고, shmat()를 통해 프로세스에 첨부한 뒤, shmctl()에서 IPC_STAT을 사용해서 메모리의 내용을 받아왔다.

 

일단 대개 이해는 가지만 나중에 코드를 직접 짜면서 여러번 복습해야하는 부분인 것같다.

 

이 프로그램을 컴파일해서 실행하면 대화내용이 나온다

그리고 대화 내용에는 비밀번호가 적혀있는것을 알 수 있다.

 

'해커스쿨 FTZ' 카테고리의 다른 글

level12  (0) 2018.03.28
level11  (0) 2018.03.27
level9  (2) 2018.03.26
level8  (0) 2018.03.26
level7  (0) 2018.03.26
블로그 이미지

천재보다는 범재

,