- 이번 레벨은 너에게 token파일을 읽기를 요구한다. 하지만, 코드는 읽을수 있는 파일을 제한한다. 이것을 우회하는 방
법을 찾아라
- 이 레벨을 하기 위해서는 패스워드 level04로 level04로 로그인해라. 이번레벨을 위한 파일은 /home/flag04에 있다.
소스코드 분석
- 인자의 개수가 한개이면 argv[0] [file to read] 형태의 문자열 반환하고 종료
- 첫번째 값에 token이라는 이름이 시작되는 index를 반환 후, NULL이 아니면 종료. (이름에 token이 들어가면안됨ㅇㅇ)
- 나머지 파일 디스크립터를 이용해서 파일을 읽고 쓰는 형태
즉, 인자의 개수가 한개 이상이어야하고, argv[1]값에 token이라는 이름이 들어가면 안됨.
- level04 입장
- /home/flag04 디렉터리에 실행파일 flag04파일과 token파일이 존재
- flag04파일은 리눅스 실행파일
- token은 읽을 권한이없지만 일반 파일.
- 소스코드에서도 나왔지만, 인자의 개수가 한개면 argv[0] [file to read]반환후 종료함.
- 또한, argv[1]에 token이 들어가면 종료.
- 첫번쨰로 생각할 수 있는 생각은. mv나 cp를 사용해서 파일 이름 변경.
- 하지만, 권한이 없는 것을 확인 가능.
- 두번째로 생각할수 있는것은 바로가기파일생성. 즉, symbolic link file을 만들어주어 token이라는 문자열이 들어가지
않는 파일을 생성하는 것.
- 링크 파일을 실행하면 level04권한으로 실행하는것이 아니고, 단지 /home/flag04/token 에 가서 실행하라고
가리켜주는 것임. 따라서 본질적으로 flag04권한으로 실행되는 것임.
(링크 파일을 만들어줄때는 절대경로로 표시해주어야 함 )
- level04디렉터리에 심볼릭 링크파일이 만들어진 것을 확인할 수 있음.
- argv[1]에 token이라는 이름이 들어가있지 않아서 정상적으로 우회 성공
- 사용자 입력 값에 대한 필터링 미흡
- 출력된 값은 getflag를 입력하기위한 flag04 계정의 password인 것 같음.
- su - flag04 로 flag04의 계정에 로그인
( - 는 flag04의 환경변수도 같이 불러오겠다는 의미. - 를 써지 않으면 환경변수는 현재 환경변수를 이용하겠다는 뜻.)
- getflag 입력하고 스테이지 클리어
'SystemHacking > Nebula' 카테고리의 다른 글
[Nebula] Level06 (0) | 2022.01.29 |
---|---|
[Nebula] Level05 (0) | 2022.01.29 |
[Nebula] Level03 (0) | 2022.01.23 |
[Nebula] Level02 (0) | 2022.01.23 |
[Nebula] Level01 (0) | 2022.01.22 |