ID : level10
PW : interesting to hack!
1.
hint를 읽어 줍니다. 두 명의 사용자가 대화를 나눈 대화방의 정보를 알려 줬군요 !
그 대화방은 공유 메모리를 이용하여 만들어졌으며, key_t의 값은 7530이라고 합니다.
공유 메모리에 접근하는 소스코드를 작성해서 공유 메모리 데이터를 읽는 문제입니다.
📌 공유 메모리란?
공유 메모리 (Shared momory)는 여러 프로세스가 함께 사용하는 메모리를 말합니다. 이 공유 메모리를 이용하면 프로세스끼리 통신을 할 수 있으며, 같은 데이터를 공유할 수 있습니다. 이렇게 같은 메모리 영역을 공유하기 위해서는 공유 메모리를 생성한 후, 프로세스의 자신의 영역에 첨부를 한 후에 마치 자기 메모리를 사용하듯 사용합니다.
출처: http://forum.falinux.com/zbxe/index.php?mid=C_LIB&document_srl=423456
HINT에서 알려준 key_t값은 공유 메모리를 구별하는 식별 번호입니다. 공유 메모리의 위치라고 생각하면 됩니다.
즉 공유 메모리에 접근 하기 위해서는 고유의 공유 메모리 key를 통해 접근이 가능하므로, key_t 7530 위치에 접근하는 소스코드를 작성하면 됩니다.
참고: https://www.joinc.co.kr/w/Site/system_programing/IPC/SharedMemory
2.
공유메모리를 위해 사용하는 함수가 있습니다.
- shmget 함수 - 공유 메모리를 요청함,
- shmat 함수 - 공유 메모리를 사용 가능하게 이어 붙임. (연결)
- shmdt - 공유 메모리를 분리시킴.
ipcs 명령어를 치니,공유메모리와 관련된 정보가 출력되네요.
key 값이 7530 인 것이 있네요 ! (7530 = 0x00001d6a)
(계산기로 16진수를 10진수로 바꿔줌)
3.
이제 tmp 디렉토리로 이동하여 코드를 작성해 봅시다!! (왜 tmp냐? : 공유폴더니까)
vi 편집기로 level10.c c언어 파일을 생성해줍니다.
키값 7530에 접근하는 소스코드(C)를 작성해줍니다. 아래에 주석으로 설명을 달아놨습니다.
#include <stdio.h> //기본. INPUT, OUTPUT을 위해 사용됨
#include <sys/ipc.h> //공유메모리 공간 생성 / 접근을 위한 shmget()함수 위해 사용
#include <sys/shm.h> //이하 생략
#include <sys/types.h> //공유메모리 사용이 가능하도록 함
int main(){
int id;
void * address;
id = shmget(7530,0,IPC_CREAT); //공유메모리 식별번호, 공유메모리 크기, 동작옵션
address=shmat(id,NULL,SHM_RDONLY); //공유메모리 읽기전용으로 설정
printf("%s",address); //adress값 출력
shmdt(address); //공유메모리 분리(사용안함)
return 0; //종료
}
마지막으로 컴파일 해주고 실행해주면? level11의 패스워드가 나옵니다ㅎㅎ
끝!
(2019.12에 작성한 글을 가져왔습니다.)
'Pwnable > FTZ' 카테고리의 다른 글
[FTZ] level 12 풀이 <BOF-gets> (0) | 2024.01.18 |
---|---|
[FTZ] level 11 풀이 <BOF-strcpy> (0) | 2024.01.18 |
[FTZ] level 9 풀이 <BOF> (0) | 2024.01.18 |
[FTZ] level 8 풀이 <John the Ripper> (0) | 2024.01.18 |
[FTZ] level 7 풀이 <진법변환, ASCII> (0) | 2024.01.18 |