해킹 공부/시스템 해킹

FTZ 해커스쿨 level10 - 공유 메모리

O'bin 2021. 11. 18. 22:57

id :  level10

pw :  interesting to hack!

 

 

 

<나의 풀이 기록>

 1.  파일 목록 확인(ls) 후 힌트 파일 내용 확인(cat hint)

 

 

 

 

 2.  힌트 내용 해석 

 

두 사용자의 대화방이 공유메모리를 이용하여 만들어졌다고 한다.

- 공유 메모리

  컴퓨터 환경에서 여러 프로그램이 동시에 접근할 수 있는 메모리

- 프로세스 간 통신(Inter-Process Communication, IPC)

  프로세스들 사이에 서로 데이터를 주고받는 행위 또는 그에 대한 방법이나 경로

 

-> 공유 메모리는 IPC 방식 중 하나이다.

 

key_t 값 : 공유 메모리에 접근 및 할당하기 위한 공유 메모리 번호

 

 

 

 3.  IPC 정보 확인(ipcs)

 

 

ipcs : IPC 정보 출력

ipcs -m : 공유메모리 세그먼트 관련 정보만 출력

 

공유 메모리 세그먼트에 관한 정보가 출력되었다.

맨 앞 key값 0x00001d6a는 16진수 숫자로, 10진수로 변환하면 7,530이다. 힌트의 내용과 일치한다.

 

아래 semaphor arrays와 message queues에는 아무 정보가 없다.

 

 

 

 4.  공유메모리 내용 가져오는 프로그램 작성

 

 

tmp 디렉토리로 이동 후(cd tmp), -> 왜인진 모르겠지만 다들 tmp에 소스를 작성하시길래 나도 따라서..

vi편집기를 이용해 c언어로 프로그램을 만들었다. 프로그램 이름은 shm.c로 작성했다.

 

sys/shm.h, sys/types.h : 공유메모리 관리 함수 사용 위한 헤더

shmget(공유메모리 key값, 공유메모리 크기, 옵션(여기선 permission)) : 공유메모리 생성함수

+) 0666은 파일의 기본 permission 

shmat(메모리 식별번호, 첨부되는 주소,  옵션) : 공유메모리를 프로세스에 첨부

memcpy(복사 받을 메모리, 복사할 메모리, 복사 데이터 크기) : 메모리 복사

shmdt(shmat에서 전달받은 포인터) : 공유된 메모리 프로세스에서 분리

 

간단히 보면 sharedMemoryID는 힌트에서 알려준 것 처럼 7530이고

이 주소에서 sharedMeory를 가져와 buf 배열에 복사한 뒤

buf 배열을 출력함으로써 대화 도청이 가능해지는 원리이다.

 

이 부분은 인터넷의 도움을 얻었다. 공유메모리 개념이 생소해 어려웠다.

소스 작성이 끝나면 esc를 누르고 :wq를 입력하면 vi편집기를 저장 후 종료할 수 있다.

아직도 vi편집기 사용은 어색하게 느껴진다. 사용하다가 도저히 키가 안먹어서 putty를 종료했다가 다시 시작하기도 했다...

 

 

 

 5.  작성한 프로그램 컴파일 후 실행

 

 

gcc -o shm shm.c : shm.c라는 c파일을 shm이라는 실행파일로 컴파일

./ shm : 현재 공간에 있는 shm 실행

 

비밀번호 획득 성공

 

 

 

 

 

 

 

<풀이 요약>

1. 파일 목록 확인(ls), 힌트 파일 확인(cat hint)
2. 힌트 내용 분석
3. IPC 정보 확인(ipcs)
4. 공유메모리 내용 가져오는 프로그램 작성
5. 위 프로그램 실행 통해 비밀번호 획득

 

 

 

 

 

 

 

 

 

 

 

공유메모리.... 새로운 지식....공부해야겠다...