Level10 으로 접속하여 힌트를 보면
여기서 공유메모리와, key_t의 값 7530이 핵심 포인트이다.
우선 공유메모리에 대해서 알아보면 프로세스들은 원래 자신에게 할당된 메모리만 사용할 수 있는데,
프로그램 특성상 여러 프로세스들이 특정 메모리 영역을 공유할 때가 있는데 이것을 공유메모리라고 한다.
공유메모리는 알았고 key_t 값 7530이 있다.
이것을 보고 유추할 수 있는게 프로그램을 작성하여 key_t값을 활용하여 해당 공유 메모리를 통해
level11의 비밀번호를 가져오는 것이라고 알수 있다.
우선 공유 메모리와 관련된 내용을 구글링 해보았다.
대표적으로 shmget, shmat함수가 있다.
shmget함수로 key 값을 사용해 원하는 공유 메모리에 요청을 하고 shmat함수로 해당 메모리를 사용가능하도록 만드는 것이다.
간단히 더 설명하자면, shmget함수는
shmget(key_t key, sit_t size, int shmflg);
형태로 사용되는데
해석하면 'Key를 접근번호로 하고, 최소 크기의 (byte단위) 공유메모리 공간을 요청한다.' 이다.
이 함수는 공유메모리를 지시하는 int형의 식별자를(shmid) 반환한다.
shmat함수는
shmat(int shmid, char *shmaddr, int shmflg);
형태로 사용되는데
해석하면
'지금의 프로세스가 공유메모리를 사용가능하도록 하고, 식별자(shmid)에 해당하는 공유메모리의 주소를 반환' 이다.
이제 프로그램을 짜볼려고 하는데 홈 디렉토리에서 vi 에디터가 저장이 되지않는다.
여기서 좀 당황했지만 tmp 폴더에 권한이 다부여 되어있는 걸 확인하고 tmp 폴더 내에서 작성을 하니 저장이 잘되었다.
아래는 프로그램 내용이다.
7530을 키값으로 1028 크기의 공유 메모리를 요청하는에 이때 존재하지 않다면 생성시켜준다.
그리고 지금의 프로세스가 공유메모리를 사용 가능하게 하고, 해당하는 공유메모리를 반환 시켜준다.
그리고 그 값을 출력 해주는 것이다.
'Security > Pwnable' 카테고리의 다른 글
Buffer Overflow 원리 - 8086CPU 레지스터 구조 (0) | 2021.08.06 |
---|---|
Buffer Overflow 원리 - 8086 메모리구조 (0) | 2021.08.06 |
FTZ Level 9 (0) | 2021.08.06 |
FTZ Level 8 (0) | 2021.08.06 |
FTZ Level 7 (0) | 2021.08.06 |