Nebula Level04
🔶배경 지식
1. 심볼릭 링크
심볼릭 링크는 원본 파일을 가르킨다. 그리고 이 원본파일은 자신이 가지고 있는 data를 가르키고 있다. 따라서 원본파일이 사라지면 원본 파일이 가리키고 있던 data까지 도달하지 못하기 때문에 더 이상 소용이 없다. 단순히 원본 파일을 가르키고 있다고 생각하면 된다.
2.하드 링크
하드 링크는 원본파일을 직접 가르키는 게 아니라 원본 파일의 inode를 가르킨다. 따라서 원본파일이 사라졌다 하더라도 inode를 통해 원본 파일의 data에 접근할 수 있다. 원본 파일의 데이터에 도달할 수 있는 방법을 새로 만든것이라고 생각하면 된다.
하드링크는 다른 시스템에 있는 파일이나 디렉토리에 대해서는 만들지 못하지만 심볼릭 링크보다 데이터에 도달하느 시간이 더 빠르고 더 작은 용량을 차지한다.
*inode 파일이나 디렉토리는 자신에 해당하는 하나의 inode를 가지고 있으며 여기에는 파일에 대한 정보가 담겨있다. 64byte로 표현되는 표로서 파일소유권과 이용할 수 있는 여부에 대한 정보 , 파일내용이 들어있는 디스크 내의 물리적 주소, 파일의 링크 수, 파일의 형태, 파일의 크기, 파일의 만들어진 시간, 최근 사용시간, 최근 수정시간, inode의 최근 수정시간 이 담겨있다.
링크를 만들 수 있는 명령어는 ln이다. 여기에 옵셥을 –s로 두면 심볼릭 링크를, 옵션 없이 사용하면 하드 링크를 실행할 수 있다.
Ln [옵션]원본파일 링크파일
🔶배경 지식
1. 심볼릭 링크
심볼릭 링크는 원본 파일을 가르킨다. 그리고 이 원본파일은 자신이 가지고 있는 data를 가르키고 있다. 따라서 원본파일이 사라지면 원본 파일이 가리키고 있던 data까지 도달하지 못하기 때문에 더 이상 소용이 없다. 단순히 원본 파일을 가르키고 있다고 생각하면 된다.
2.하드 링크
하드 링크는 원본파일을 직접 가르키는 게 아니라 원본 파일의 inode를 가르킨다. 따라서 원본파일이 사라졌다 하더라도 inode를 통해 원본 파일의 data에 접근할 수 있다. 원본 파일의 데이터에 도달할 수 있는 방법을 새로 만든것이라고 생각하면 된다.
하드링크는 다른 시스템에 있는 파일이나 디렉토리에 대해서는 만들지 못하지만 심볼릭 링크보다 데이터에 도달하느 시간이 더 빠르고 더 작은 용량을 차지한다.
*inode 파일이나 디렉토리는 자신에 해당하는 하나의 inode를 가지고 있으며 여기에는 파일에 대한 정보가 담겨있다. 64byte로 표현되는 표로서 파일소유권과 이용할 수 있는 여부에 대한 정보 , 파일내용이 들어있는 디스크 내의 물리적 주소, 파일의 링크 수, 파일의 형태, 파일의 크기, 파일의 만들어진 시간, 최근 사용시간, 최근 수정시간, inode의 최근 수정시간 이 담겨있다.
링크를 만들 수 있는 명령어는 ln이다. 여기에 옵셥을 –s로 두면 심볼릭 링크를, 옵션 없이 사용하면 하드 링크를 실행할 수 있다.
Ln [옵션]원본파일 링크파일
🔶풀이
About
토큰 파일을 읽어야 하지만 아래 코드가 이 파일이 읽히는 것을 방해한다.
Source code
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <stdio.h>
#include <fcntl.h>
int main(int argc, char **argv, char **envp)
{
char buf[1024];
int fd, rc;
if(argc == 1) {
printf("%s [file to read]\n", argv[0]);
exit(EXIT_FAILURE);
}
if(strstr(argv[1], "token") != NULL) {
printf("You may not access '%s'\n", argv[1]);
exit(EXIT_FAILURE);
}
fd = open(argv[1], O_RDONLY);
if(fd == -1) {
err(EXIT_FAILURE, "Unable to open %s", argv[1]);
}
rc = read(fd, buf, sizeof(buf));
if(rc == -1) {
err(EXIT_FAILURE, "Unable to read fd %d", fd);
}
write(1, buf, rc);
}
if (argc ==1) -->만약 실행파일 이름 하나만 입력됐을 경우 실패. 해당 파일이 읽기 위한 파일이라는 말을 출력한다.
if (strstr(argv[1], "token") != NULL) -->strstr(st1, st2)라는 함수는 st1에서 st2라는 문자열이 있는지 확인하는 함수이다. 만약 있다면 st1dptj st2이 처음 등장하는 위치를 반환하고 그렇지 않다면 NULL을 반환한다.
만약 argv[1]에 "token"이라는 문자가 있으면 접근하지 못한다는 문자열을 출력하고 실패.
fd는 argv[1] 이라는 이름을 가진 파일을 읽기 전용으로 열게 하여 그 결과값을 가진다. 0이상의 값은 파일이 정상적으로 열렸다는 것이지만 -1일 경우는 파일이 정상적으로 열리지 못했다는 것이다.
if (fd ==-1) --> 파일이 정상적으로 열리지 못했을 경우 열지 못한다는 문자열을 출력하면서 실패.
rc는 fd로 연 파일을 buf의 크기만큼 읽어 들인다. 정상적으로 읽었으면 읽은 buf의 바이트 수를 반환, 그렇지 않으면 -1을 반환한다.
rc는 fd로 연 파일을 buf의 크기만큼 읽어 들인다. 정상적으로 읽었으면 읽은 buf의 바이트 수를 반환, 그렇지 않으면 -1을 반환한다.
if (rc == -1) --> 만약 파일이 정상적으로 열리지 않았다면 읽을수 없다는 문자열을 출력하고 실패.
wirte(1, buf, rc) --> 1로 열어진 파일에 buf에서 읽었던 내용을 buf의 바이트 크기만큼 써 준다.
flag04에 존재하는 파일들을 확인했다. flag04라는 실행파일과 about에서 봤던 token 이라는 파일이 있다.
cat 명령어를 사용해 token이라는 파일을 확인하려 했지만 거부당했다.
wirte(1, buf, rc) --> 1로 열어진 파일에 buf에서 읽었던 내용을 buf의 바이트 크기만큼 써 준다.
flag04에 존재하는 파일들을 확인했다. flag04라는 실행파일과 about에서 봤던 token 이라는 파일이 있다.
cat 명령어를 사용해 token이라는 파일을 확인하려 했지만 거부당했다.
✍"token"이라는 문자열을 사용하지 않고 token 파일을 flag04 실행할 때 옆에 인지로 같이 넣어줘야 함. --> 링크파일 사용 사용
심볼릭 링크를 걸어 token 파일의 이름을 "token"이 아니라 "ForLevel04"로 쓸 수 있게 만들었다. /tmp로 이동해 확인하면 심볼릭 링크가 걸린것을 확인할 수 있다.
"token"대신 "ForLevel04"를 사용하여 flag04를 실행하니 문자열이 출력된다.
아까 나온 문자열을 su 명령어를 통해 flag04의 비밀번호로 입력한다. su 명령어는 switch user의 약자로 su user로 사용하면 user의 계정으로 바꿀수 있다.
Level04 성공!
심볼릭 링크를 걸어 token 파일의 이름을 "token"이 아니라 "ForLevel04"로 쓸 수 있게 만들었다. /tmp로 이동해 확인하면 심볼릭 링크가 걸린것을 확인할 수 있다.
"token"대신 "ForLevel04"를 사용하여 flag04를 실행하니 문자열이 출력된다.
아까 나온 문자열을 su 명령어를 통해 flag04의 비밀번호로 입력한다. su 명령어는 switch user의 약자로 su user로 사용하면 user의 계정으로 바꿀수 있다.
Level04 성공!
참고:
strstr함수 설명(http://itguru.tistory.com/101)
open 함수 설명(http://downman.tistory.com/67)
err함수 설명(http://man7.org/linux/man-pages/man3/err.3.html)
read함수 설명(http://forum.falinux.com/zbxe/index.php?document_srl=466628&mid=C_LIB)
http://infosecguide.tistory.com/113
read함수 설명(http://forum.falinux.com/zbxe/index.php?document_srl=466628&mid=C_LIB)
http://infosecguide.tistory.com/113
댓글
댓글 쓰기