FTZ Level 10

bin3635·2021년 8월 8일
0

hint는 다음과 같다.

공유 메모리란, 다수의 프로세스에서 동시에 접근 가능한 메모리이다.
C언어에는 이 공유 메모리를 생성하는 함수로 shmget이 있다.
key_t는 공유 메모리를 구별하는 식별 번호이기 때문에 shmget을 이용할 수 있다.

먼저 ipcs 명령어를 통해 시스템에서 사용 중인 공유 메모리 세그먼트를 확인한다.

0x00001d6a라는 key가 있고, 이는 10진수로 변환하면 7530이다. 힌트에서 주어진 key_t와 같기 때문에 접근해야 할 공유 메모리는 0x00001d6a이다.

공유 메모리 접근을 위해 다음과 같은 소스 코드를 작성하고 실행한다.

#include <stdio.h>
#include <stdlib.h>
#include <sys/shm.h>
#include <sys/ipc.h>
#include <sys/types.h>

int main() {
    int shmid; // 공유 메모리의 id를 저장할 변수 선언
    char* shmdata; // char형 포인터 선언
    
    shmid = shmget(7530, 1028, 0666); // key가 7530, 용량이 1028바이트, 권한이 0666인 공유 메모리를 생성
    shmdata = shmat(shmid, NULL, 0); // 공유 메모리 세그먼트에 액세스
    printf("%s\n", shmdata); // 내용 출력
    shmdt(shmdata); // 공유 메모리 분리
    
    return 0;
}

참고로, 이 소스에서 char형 포인터를 선언하는 이유는 shmat 함수가 shmid에 대한 주소를 반환하기 때문에 포인터에 주소를 저장하고 printf 함수에서 %s를 사용해 해당 주소에 있는 문자열을 출력하게 하기 위함이다.

level11의 패스워드가 나왔다.

0개의 댓글