티스토리 뷰

level10에서 hint를 보겠습니다. 


ls -al을 보면 못보던 program이라는 디렉터리입니다. 하지만 root권한이라서 읽지도 못합니다. 분명히 program 안에는 단서가 있을텐데 말입니다.


혹시 몰라서 평소같이 level11을 권한으로 하는 파일을 찾아봤더니, 전혀 없네요..


다르게 생각해보면 프로그램을 시스템이 시작될 때 자동으로 시작되도록 등록하는 설정에 해당 파일이 있을 수 있으므로 rc.local 파일을 확인해 볼 필요가 있습니다. 그 파일은 /etc/rc.d/rc.local 경로에 있습니다.


이제 rc.local 파일에서 실행파일의 이름과 경로를 알았으니 level10이라는 이름으로 실행중인 프로세스가 있는지 확인해 봅니다. 하지만 level10으로 실행 중인 프로세스는 없다. 즉, level10이라는 프로그램은 데몬 형태가 아닌 단순 프로세스임을 알 수 있습니다.


추측을 이용해서 소스코드를 분석해야 한다. 공유 메모리를 사용하고 있고, key_t라는 변수와 값으로 7530을 사용한다는 조건이 있으므로 공유 메모리의 값을 읽을 수가 있다. 


소스를 상세하게 설명 해보겠습니다.

먼저 shmget() 함수는 먼저 공유 메모리를 생성하거나 생성된 공유 메모리를 사용할 수 있다.

구분 

설명 

shmget() 함수 

#include <sys/ipc.h>

#include <sys/shm.h>
int shmget(key_t key, int size, int shmflg); 

key_t key 

공유 메모리를 읽기 위한 key 변수 

int size 

공유 메모리의 크기 

int shmflg 

공유 메모리 생성이나 사용 옵션을 지정

*IPC_CREAT : 공유 메모리 생성

*0666 : 공유 메모리의 사용 권한 

* 공유 메모리를 생성하거나 생성돼 있는 공유된 메모리의 ID 반환


shmat() 함수는 이미 할당된 공유 메모리 공간을 다른 프로세스에서 사용할 수 있게 권한을 부여하는 함수이다. 이를 동적 메모리 할당/해제에 비유하자면 malloc() 함수에 해당한다.

구분 

설명 

shmat() 함수 

#include <sys/types.h>
#include <sys/shm.h>

void xshmal(int shmid, const void xshmaddr, int shmflg);

int shmid 

공유 메모리를 생성할 때 만들어진 공유 메모리의 ID 

xshmaddr 

공유 메모리가 할당된 주소 

int shmflg 

공유 메모리 사용 옵션을 지정

* SHM_RND : 공유 메모리 주소를 프로세스에 맞게 따로 할당

* SHM_RDONLY : 공유 메모리를 읽기 전용으로 설정

* 생성된 공유 메모리를 프로세스에 연결(Attach)


shmdt() 함수는 다른 프로세스에 연결된 공유 메모리 공간의 사용을 끝낸 후 프로세스와 공유 메모리 공간의 연결을 끊는다.

동적 메모리 할당/해제에 비유하자면 free() 함수에 해당한다.

구분

설명 

shmdt() 함수 

#include <sys/types.h>

#include <sys/shm.h>

int shmdt(const void xshmaddr); 

xshmaddr  

공유 메모리가 할당된 주소 

* 프로세스에 연결된 공유 메모리를 분리(Detach)


----------------------------------------------------------------------

위와 비슷하게 공격 코드를 한번 만들어 보았습니다. 달라진건 memcpy 함수에서 인자를 buf와 sharedMemory부분을 변경해주었고, 14번 줄에서 sharedMemID 부분에서 shmget의 3번째 인자값에서 IPC_CREAT 옵션을 제거했습니다. 이미 공유 메모리가 존재하기 때문입니다. 0666의 공유 메모리의 사용 권한만 주도록 합니다.


실행을 하면 생성되어 있는 공유메모리를 읽는 과정에서 '7530'이라는 키로 공유한 것을 볼 수가 있습니다. 이런 식으로 한 프로세스에서 공유 메모리에 값을 저장하고, 다른 프로세스에서 그 값을 읽어 사용하면 프로세스 사이에서 데이터를 전달하는 프로세스 간 통신이 가능해집니다. 



'시스템해킹 > FTZ' 카테고리의 다른 글

FTZ LEVEL11 문제풀이  (2) 2015.07.28
FTZ LEVEL9 문제풀이[BOF]  (0) 2015.07.23
FTZ LEVEL8 문제풀이  (0) 2015.07.22
FTZ LEVEL7 문제풀이  (0) 2015.07.22
FTZ LEVEL6 문제풀이(시스템 인터럽트)  (0) 2015.07.21
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함