본문으로 바로가기

우리가 했던 1번~9번문제와는 다르게 여기서는 setuid가 걸려있는 취약점이 없다.

하지만 여기서 현재 두명의 사용자가 비밀스러운 대화를 나누고 있다고 하였고, 공유메모리의 key값도 주었다.

따라서 우리는 코딩으로 두사람의 대화를 도청할 수 있다.


코드는 다음과 같다.

코드를 대략적으로 설명해보면..



<    shmget 함수는 공유메모리를 만들어주는 함수이다.    >

key_t key : 공유메모리를 구별하는 key값이다.           //  ★몹시중요★문제에서 주어짐!


int size : 공유메모리 크기를 결정한다.         // 보통 0으로 함.


int shmflg : 여러가지 옵션을 추가할 수 있다.         // 현재 공유메모리가 돌고있으므로 CREATE로 옵션 추가!

- IPC_CREATE : 퍼미션 0666을 설정한다. 첫번째인수 key에 해당하는 메모리가 없으면 공유메모리를 생성한다.

- IPC_EXCL : 공유메모리가 있으면 실패로 반환하고 접근하지못하게 한다. 


반환에 성공하면 shmid를 int형으로 반환한다!





<    shmat함수는 공유메모리에 메모리공간을 찾아주는 함수이다.    >


int shmid : shmget 함수에 의해 반환된 int형의 식별자이다.             // 위의 코드에서는 shm

const void *shmaddr : 일반적으로 NULL 지정. 커널에 매핑되지않은 곳을 자동으로 찾아서 붙여준다.        // 보통 NULL

int shmflg : 여러가지 옵션을 추가할 수 있다.

- SHM_RDONLY : 공유메모리를 읽기전용으로 설정한다.                    // 읽기만 할꺼니까 RDONLY

- SHM_RND : shmaddr 이 NULL이 아닐경우에만 쓴다. shmaddr을 반올림하여 메모리경계에 맞춘다.


이 함수는 shmid에 대한 주소를 리턴해주고 , 실패시 -1 리턴된다.




따라서 shmat함수는 shmid에 대한 주소를 반환해주었고, char형으로 선언된 shmstr에 shmid의 첫번째 주소가 들어갔다.


즉, 여기서 shmstr을 출력하면 패스워드를 구할수있을듯 하다.






성공!

'System Hacking ( pwnable ) > hackerschool FTZ Write-up' 카테고리의 다른 글

[FTZ] level12 ( write - up )  (0) 2019.05.28
[FTZ] level11 ( write - up )  (0) 2019.05.27
[FTZ] level9 ( write - up )  (0) 2019.05.21
[FTZ] level8 ( wirte - up )  (0) 2019.05.21
[FTZ] level7 ( write - up )  (0) 2019.05.21