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

+ Recent posts