본문 바로가기

리버싱/FTZ

해커스쿨 FTZ Level10 (공유 메모리 취약점)

ID : level10

Password : interesting to hack!



힌트 : 



 두명의 사용자가 대화방을 이용하여 비밀스런 대화를 나누고 있다.

 그 대화방은 공유 메모리를 이용하여 만들어졌으며,

 key_t의 값은 7530이다. 이를 이용해 두 사람의 대화를 도청하여

 level11의 권한을 얻어라

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




문제를 풀기 전에 :


공유메모리란 ?


1) 공유메모리란 여러 프로세스가 함께 사용할 수 있는 메모리이다. 


2) 이 공유메모리를 이용하면 커널에 내려가지 않고 프로세스끼리 통신을 할 수 있으며 같은 데이터 공유를 할 수 있다. 


3) 프로세스가 공유 메모리를 사용하기 위해선 커널에 요청을 해야 한다. 


4) 프로세스가 지워져도 해당 공유메모리는 잔재한다.



shmat()


공유메모리를 프로세스에 첨부시키는 함수이다.


void *shmat(int shmid, const void* shmaddr, int shmfig);


int shmid : 공유메모리를 구별하는 식별번호


void *shmaddr : 첨부되는 어드레스 주소, 일반적으로 NULL을 지정


int shmfig : 동작 옵션


    - SHM_RDONLY : 공유 메모리를  읽기 전용으로

    - SHM_RND : shmaddr이 NULL이 아닐 경우 첨부 주소를 반올림하여 메모리 페이지 경계에 맞춤



공유 메모리 정보를 보는 명령어


 ipcs -lm




등록된 공유 메모리 정보를 보는 명령어


  ipcs 




풀이 :


1) ipcs 명령어를 통해 shmid를 획득한다. : 0


2) 프로그램을 작성하여 메모리의 값을 읽는다.





사용한 코드 :


attack.cpp