일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 해커 팩토리 6번
- 부트스트랩
- 테이블명 수집
- CTF-d
- 네트워크 포렌식
- python flask
- 웹 해킹
- 포렌식
- SQL Injection
- 해커 팩토리
- SANS
- Burp Suite Intruder
- 보안
- 레나 튜토리얼
- 리버싱
- union sql injection
- 게시판 만들기
- 로그 분석
- ftz
- 시스템 해킹
- Burp Suite
- Blind Sql Injection
- 해커팩토리
- 해커팩토리 7번
- 웹해킹 실습
- 디스크 포렌식
- 해커팩토리 10번
- 리버싱 기초
- 파일 다운로드 취약점
- 해커팩토리 8번
- Today
- Total
Cha4SEr Security Study
[FTZ-Level5] 풀이 본문
ID : level5
PW : what is your name?
/usr/bin/level5 프로그램은 /tmp 디렉토리에
level5.tmp 라는 임시 파일을 생성한다는 힌트가 주어졌다.
그럼 주어진대로 level5 프로그램에 대해 살펴보고 level5.tmp 파일을 보도록 해보자
level6의 권한으로 SetUID가 걸려있고 level5는 실행이 가능하다.
실행하면 /tmp 디렉토리에 level5.tmp 파일이 생성된다고 하니 실행해서 확인해보쟝
잉.. 분명히 파일이 생성된다고 했지만 없다..
추측해보면 파일이 생기기는 하지만 프로그램의 끝에서 다시 삭제해주겠지 라고 생각해 볼 수 있다.
그럼 여기서 해결책은 바로! 링크를 걸어주는것이다!
===== 리눅스의 링크 =====
1. 심볼릭 링크
- 특정 파일이나 디렉토리에 대하여 참조를 하는 특수한 파일.
- 원본 파일의 이름을 가리키는 링크로. 원본 파일이 사라지게 되면 역할을 수행할 수 없다.
- 전혀 다른 파일이라도 원본 파일과 이름이 같다면 계속 사용 가능하다
-> ln -s [원본파일] [링크할 파일]
1-1. a1.txt의 내용 : "11111"
1-2. 원본파일 : a1.txt 링크파일 : a2.txt (ln -s a1.txt a2.txt)
1-3. a2.txt의 내용 : "11111"
1-4. a2.txt의 내용을 "22222" 로 바꾸면
1-5. a1.txt의 내용도 동일하게 바뀜
1-6. a1.txt(원본파일)을 삭제하면 링크파일인 a2.txt 실행 불가!
2. 하드 링크
- 원본파일과 동일한 inode를 가진다.
- 원본파일이 삭제 되더라도 원본 파일의 inode를 갖고 있는 링크 파일은 여전히 사용 가능하다.
-> ln [원본파일] [링크할 파일]
2-1. b1.txt의 내용 : "11111"
2-2. 원본파일 : b1.txt 링크파일 : b2.txt (ln b1.txt b2.txt)
2-3. b2.txt의 내용 : "11111"
2-4. b2.txt의 내용을 "22222" 로 바꾸면
2-5. b1.txt의 내용도 동일하게 바뀜 (심볼릭 링크와 같은점)
2-6. b1.txt(원본파일)을 삭제하더라도 링크파일인 b2.txt 실행 가능! (심볼릭 링크와 차이점)
본 문제에서는 심볼릭 링크를 사용할 계획이다.
바로 아무 내용의 파일 하나를 만들고 이를 원본파일로 하고 문제파일과 같은 이름인 "level5.tmp"를
링크로 걸어주는 것! 이렇게 되면 링크가 걸린 파일은 문제 파일로 덮어씌어 질 것이고
링크가 걸린 원본 파일도 문제파일과 동일하게 바뀌겠지? 직접 해보자
우선 "This is temp File" 이라는 내용의 temp.tmp 파일을 생성하자.
그다음 문제파일과 같은 이름의 "level5.tmp"라는 파일을 심볼릭 링크로 걸자!
ln -s temp.tmp level5.tmp 로 링크를 걸어준 후 ls -al로 확인해 보면 level5.tmp -> temp.tmp 라고 되어있는 것을
확인 할 수있다. 정상적으로 링크가 걸렸다는 뜻이다!
*원본파일 : temp.tmp
*링크된 파일 : level5.tmp
이제 /usr/bin/ 폴더에 level5를 실행시키면 다음과 같은 일이 일어난다.
1. /tmp 폴더에 level5.tmp 파일이 생성된다.
2. 하지만 이미 level5.tmp 파일이 있기때문에 파일이 덮어씌어진다.
3. 파일을 덮어쓰면서 링크가 걸려있는 temp.tmp 파일에도 똑같은 내용이 덮어씌어 진다.
4. level5.tmp 파일이 삭제된다.
5. temp.tmp 파일을 보면 원하는 내용을 볼 수 있따!
자 이제 직접 해보쟝
temp.tmp 파일의 내용이 덮어씌어졌고 패스워드가 나왔따!
답은 나왔지만 빈틈을 발견했다.
level5.tmp는 삭제되어야 하는데 링크가 걸리고 덮어씌워지면서 삭제하는 코드가 실행이 안되었는지 삭제도 안되었고,
출력도 정상적으로 되었다. 아직 원인은 잘 모르겠다. 공부를 더 열심히 해봐야겠다...
+ 삭제가 되더라도 복사본을 삭제하는 것이기 때문에 심볼릭 링크가 아닌 하드링크를 사용해도 문제를 푸는데
지장은 없었다.
★ 요약 ★
- 링크를 걸고 복사본을 수정하면 원본 파일에도 적용됨
- 심볼릭 링크는 원본 파일 삭제 시 사용 불가
- 하드 링크는 원본 파일 삭제하더라도 사용 가능
- 복사본 삭제는 심볼릭/하드 둘다 원본파일 사용 가능
이로써 Level5를 다 풀었따!
'System > FTZ' 카테고리의 다른 글
[FTZ-Level7] 풀이 (0) | 2019.12.28 |
---|---|
[FTZ-Level6] 풀이 (0) | 2019.12.28 |
[FTZ-Level4] 풀이 (0) | 2019.12.23 |
[FTZ-Level3] 풀이 (0) | 2019.12.23 |
[FTZ-Level2] 풀이 (1) | 2019.12.22 |