FTZ level10 공유메모리

2017. 5. 23. 14:38SystemHacking/FTZ

 

 

 

level10 문제는 공유메모리에 관한 문제입니다. 공유메모리와 관련된 개념부터 알아보겠습니다

공유메모리란 여러 프로세스들이 특정한 메모리 공간을 공유해서 데이터를 주고받을 수 있도록 하는 메모리 공간입니다

공유메모리를 사용하는 소스코드를 살펴보도록 합시다




[1] shmget함수

shmget( key_t key , int size , int shmflg )

key_t key    공유 메모리들을 구별할 수 있게하는 식별 번호

int size        공유 메모리의 크기

int shmflg    동작 옵션

=> IPC_CREAT    key에 해당하는 공유메모리가 없다면 새롭게 생성해라, 있다면 접근권한을 지정해주어야한다

=> IPC_EXCL     공유메모리가 이미 있다면 실패로 반환하고 공유메모리에 접근 불가능


ex) int main(){

int shareMemoryId;

shareMemoryId = shmget( 7777 , 1024 , IPC_CREAT | 0666 );

}

=> 크기 1024byte의 공유메모리의 번호 7777 해당폴더에 모든사용자들이 읽고 쓸 수 있다


[2] shmat함수

shmat( int shmid , const void *shmaddr , int shmflg );

int shmid                     공유메모리를 생성할 때 만들어진 공유메모리의 ID ( 위에서 shareMemoryId )

const void *shmaddr      공유메모리가 할당 될 주소

int shmflg                    동작 옵션

=> SHM_RDONLY         읽기 전용

=> SHM_RND              공유 메모리 주소를 프로세스에 맞게 따로 할당한다

0                               아무 옵션 없음


ex) int main(){

int shareMemoryId;

void *shareMemory = (void *)0;

shareMemoryId = shmget( 7777 , 1024 , IPC_CREAT | 0666 );

shareMemory = shmat( shareMemoryId , (void *)0 , 0 );            

}


[3] shmdt()

shmdt( shareMemory)    프로세스와 공유메모리공간의 연결을 끊는다



[4] 세가지 함수를 모두 사용한 공유메모리를 사용 코드


#include<stdio.h>

#include<sys/shm.h>

#include<sys/types.h>


int main(){


char buf[30] = "Hello";

int shareMemoryId;

void *shareMemory = (void *)0;

key_t keyValue = 7777;


// 공유 메모리를 생성한다

shareMemoryId = shmget( keyValue , 30 , IPC_CREAT | 0666 );


// 공유메모리를 사용할 수 있는 공간을 할당한다 ㅡ 프로세스에서 공유메모리 공간을 사용할 수 있게 연결하는 것

shareMemory = shmat( shareMemoryId , (void *)0 , 0 );


// 공유 메모리 공간에 있는 값을 특정 변수 ( buf ) 에 복사한다

memcpy( buf, shareMemory , 30 );


// 프로세스에서 공유 메모리의 연결을 분리 한다

shmdt( shareMemory );


printf( "%s\n" , buf )         // 해당 소스를 실행시키면 '7777' 공유메모리에 있는 값이 출력되서 나올것이다

return 0;

}







이제 본격적으로 level10문제풀이를 시작하겠습니다



< 그림 10.1 >


힌트에서 key_t = 7530 임을 알려주고 있습니다 해당 번호의 공유메모리에 접근하여 값을 읽어오면 문제는 해결 될것입니다

그럼 해당 공유메모리에 접근하는 소스를 직접 만들어 봅시다



< 그림 10.2 >


처음 개념설명하면서 썻던 코드와 key_t 값을 바꿔서 작성한 뒤 컴파일하고 실행시키면 됩니다


< 그림 10.3 >


공유메모리에 관한 함수만 알고있다면 쉽게 풀 수 있는 문제입니다

다음 문제로 넘어가도록 하겠습니다







'SystemHacking > FTZ' 카테고리의 다른 글

FTZ level12 Buffer OverFlow  (0) 2017.05.23
FTZ level11포맷 스트링 버그를 이용한 풀이  (0) 2017.05.23
FTZ level9 Buffer OverFlow  (0) 2017.05.23
FTZ level8 리눅스 패스워드 파일 크랙  (0) 2017.05.23
FTZ level7 암호화  (0) 2017.05.23