ssoL2 TISTORY

[FTZ] LEVEL 10 풀이 본문

challenge/pwn

[FTZ] LEVEL 10 풀이

ssoL2 2021. 1. 29. 03:19

level10 / interesting to hack!

 

key_t 값이 7530인 공유 메모리를 읽고 level11의 권한을 얻으라는 문제이다. 

공유 메모리 : 보통 프로세스에서 사용되는 메모리영역은 해당 프로세스만이사용할수 있다. 하지만 때때로 여러개의 프로세스가 특정 메모리영역을 사용했으면 하는때가 있을것이다. 이때 사용하는 것이 공유 메모리이다.

출처: https://unabated.tistory.com/entry/공유-메모리-shared-memory [랄라라]

 

일단 level11 SetUID를 가진 파일은 찾을 수 없다. 지금 할 수 있는 건 공유 메모리에 접근하는 것뿐이다.

 

ipcs 명령어를 통해 현재 생성되어 있는 IPC 지원 목록을 조회 가능하며 [-m] 옵션으로 공유 메모리 자원만 볼 수 있다. 아까 힌트에서 key 값이 7530이라 했는데, 7530 = 0x00001d6a 이다. 고로 공유 메모리 조회에서 나온 첫번째 줄이 내가 찾는 공유메모리임을 알 수 있다. 저 공유 메모리는 1028 bytes의 크기를 갖고 perms 값은 0666이다.(뒤에서 사용됨)

IPC(Inter-Process Communication) : 프로세스 간 통신을 위한 하나의 매커니즘으로, 사용하는 자원은 메세지큐, 공유메로리, 세마포어가 있다.

 

공유 메모리에 접근하기 위해선 시스템콜을 이용해야 한다. 코드를 짜기 위해 tmp 폴더로 가서 vim을 사용한다.

 

첫 번째 if 문은 shmget 시스템콜을 사용했다. 해당 key를 접근번호로 하는 공유 메로리 공간할당을 요청한다. 인자는 key 값, 공간 크기, 그리고 동작 옵션이다. IPC_CREAT는 만약 공유메로리가 있다면 옵션은 무시된다. 0666은 해당 메모리 perm 값을 넣었다.

반환 값은 성공하면 공유 메모리 식별자가, 실패하면 -1이다.

두 번째 if 문은 shmat 시스템콜이고, 공유메모리를 호출 프로세스 메로리로 첨부한다. 메모리를 사용할 수 있도록 가져온다는 뜻이다. 인자는 shmget 반환값인 공유 메모리 식별자, 첨부되는 어드레스 주소로 일반적인 경우 null

그리고 동작옵션으로 읽기 전용 0을 넣었다.

마지막으로 공유메모리 주소에 있는 내용을 print 하면 된다.

 

이제 실행하면 공유 메모리를 가져와서 공유 메모리 주소에 있는 내용을 보여줄 것이다.

 

 

gcc 컴파일 시킨 후 실행해봅시다.

 

 

멍멍씨와 구타씨가 흥미로운 대화를 나눴군요. 해결 완료!

 

'challenge > pwn' 카테고리의 다른 글

[FTZ] LEVEL12 풀이  (0) 2021.02.01
[FTZ] LEVEL 11 완벽분석  (1) 2021.02.01
[FTZ] LEVEL 9 완벽 분석  (0) 2021.01.28
[FTZ] LEVEL 8 풀이  (0) 2021.01.28
[FTZ] LEVEL 7 풀이  (0) 2021.01.28
Comments