본문 바로가기

WARGAME/FTZ [system]

ftz level 10 [level10]

 

 

 

 

 

level10

 

 

 

 

공유 메모리라는 단어가 보이고, key_t 의 값도 주어졌다.  

 

우선 잘 모르겠으니 리눅스 공유 메모리를 구글링해보자.

 

 

 

 

 

 

 

 

*** ipcs 명령어

 : OS에서 프로그램이 사용하는 IPC, 공유메모리, 세마포어를 현황 파악 가능

: 옵션

[IPC 확인]

      ipcs -q

 

[공유 메모리 (Shared Memory) 확인 ]

      ipcs -m

 

[세마포어 확인 ]

     ipcs -s

 

 

 

 

한번 공유 메모리를 확인해보기 위해 ipcs 명령어를 이용해보자.

 

key  0x0001d6a 가 보이고, 소유자는 root, 허가는 0666, 용량은 1028인 공유메모리가 있는 것을 볼 수 있다.


 

 

 

 

 

 

 

이 값은 10진수로 환산해보면,

 

힌트에 주어진 key 값인 7530 인 것을 알 수 있다.

 

 

 

 

 

 

 

 

 

이제 공유 메모리에 접속해서 사용할 수 있도록 함수 shmget() 과 shmat() 에 대해 살펴보자.

 

*** shmget()

: 공유메모리 공간을 요청하는 함수

: shmget(key, size, shmflg)

 

: key - 공유메모리 Key 값, 이 값을 통해 커널에서 공유메모리를 선택해 접근 가능

shmflg - 공유메모리 생성방식

      1) IPC_CREAT : 첫번째 식별자인 key 값이 없을시 새로 만듦. 뒤에 "|" 을 붙여 접근권한 설정이 가능.

                              만약 이미 key가 존재한다면 존재하는 공유메모리의 식별자를 리턴.

     2) IPC_EXCL : 해당 key를 가진 공유메모리가 존재할 경우, 실패값을 반환하고 메모리 접근을 통제.

 

: 결과적으로 shmget은 공유메모리의 식별자를 리턴(int)

 

 

*** shmat()

 : 현 프로세스가 공유메모리를 사용가능하도록 하는 함수 

 : shmat(shmid, shmaddr, shmflg)

 

 : shmid - 공유메모리의 식별자. 즉, shmget함수에서 나온 결과

 : shmaddr : 메모리가 붙을 주소. 0을 지정하면 커널에서 자동으로 지정.

 : shmflg : 동작 형식 

      1) SHM_RDONLY : 읽기전용으로 동작합니다.

      2) SHM_RND : shmaddr을 반올림해 메모리 페이지 경계에 맞춥니다.(shmaddr이 null이 아닐때만 사용됩니다. )

      3) 아무것도 없을경우 : 읽기/쓰기 전용으로 동작합니다.

 

 : 결과적으로 공유메모리 식별자에 대한 주소를 리턴.

 

 

 

 

 

shmget 함수를 이용해서 앞서 ipcs 명령어로 확인했던 공유 메모리의 접근권한인 0666과, key  값등을 이용해 공유 메모리 요청을 하고,

shmat 함수를 이용해 내 프로세스가 7530 프로세스에 접근할 수 있도록 소스를 입력해보자.

 

 

 

 

 

 

 

 

/tmp 로 이동한 후, key.c 를 생성해주면 된다.

 

이렇게 인자를 입력해주고 printf 로 b 를 출력해주어야 공유 메모리에 접근한 후 값이 출력된다.

 

printf 안해주면 ? 아무것도 안 뜸.

 

 

 

 

 

 

 

 

 

 

7530 공유 메모리에 접근해서 값을 출력하면,

level11 password "what!@#$?" 획득 

 

 

 

 

 

 

 

 

 

 



참고  https://jink1982.tistory.com/87 

 https://choraengyi.tistory.com/44 

 

'WARGAME > FTZ [system]' 카테고리의 다른 글

ftz level 12 [level12]  (0) 2020.04.30
ftz level 11 [level11]  (0) 2020.04.30
ftz level 9 [level9]  (0) 2020.04.30
ftz level 8 [level8]  (0) 2020.04.30
ftz level 7 [level7]  (0) 2020.04.30