Level9에서 얻은 패스워드를 이용해 level10으로 로그인하면 hint 파일과 program 디렉터리가 존재한다. hint 파일을 cat 명령어로 읽어보니 공유 메모리(key_t : 7530)를 이용해 두 명의 사용자가 대화를 나누고 있는데, 주어진 키 값을 이용해 대화를 도청한 후 권한을 얻는 것이 목적이다.
처음에는 리눅스 공유 메모리의 존재를 몰랐기에 level10 폴더에 존재하는 program 디렉터리에 들어가려 하거나, find 명령어로 level11로 Setuid가 걸린 파일을 찾았다.
하지만 보이지 않았고, 몇 번 삽질을 하다 힌트에 나와있던 공유 메모리를 구글링해봤다.
공유 메모리란 여러 프로그램이 사용할 수 있는 메모리로, key 값을 통해 메모리를 읽을 수 있다.
#include <sys/shm.h>
#include <sys/ipc.h>
int main()
{
key_t key = 7530; // key value
int shmid;
void *shmaddr;
shmid = shmget(key, 0, IPC_CREAT); // key value에 해당하는 공유 메모리를 얻고 공유 메모리 조각 id를 반환
shmaddr = shmat(shmid, (void *)0, 0); // shmget 함수를 통해 얻은 id로 메모리에 존재하는 내용을 읽음
printf("%s\n",(char *)shmaddr); // 읽은 내용을 출력
}
주어진 키 값과 shmget 함수로 해당 공유 메모리 조각의 id를 얻었고, 얻은 id를 shmat 함수에 사용해 메모리의 내용을 읽어서 출력하도록 코드를 작성했다.
작성한 소스 코드를 gcc로 빌드한 후 실행하니 level11의 패스워드를 얻을 수 있었다.
'Wargame > FTZ' 카테고리의 다른 글
[FTZ] Level 12 (0) | 2021.05.29 |
---|---|
[FTZ] Level 11 (0) | 2021.05.28 |
[FTZ] Level 9 (0) | 2021.05.10 |
[FTZ] Level 6 ~ Level 8 (0) | 2021.03.28 |
[FTZ] Level 1 ~ Level 5 (0) | 2021.03.27 |