일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 번역
- forensics
- reversing
- Protostar
- Smashing The Stack For Fun And Profit
- 스택
- writeup
- KOISTUDY
- general skills
- picoCTF2018
- WEB
- picoCTF
- dreamhack
- #hacking
- grep
- #picoCTF2018
- 리눅스
- cryptography
- 리버싱
- 해킹 공부
- 버퍼오버플로우
- Hxd
- write up
- Aleph One
- 시스템해킹
- 시스템
- CTF
- 카이사르
- 정답
- 해설
- Today
- Total
Security || AI
[해커스쿨 FTZ] level1 본문
level1에 접속하여 hint를 아래의 명령어를 사용하여 확인해 봅니다.
[level1@ftz level1]$ cat hint
힌트: level2 권한에 setuid가 걸린 파일을 찾는다.
여기서 setuid는 사용자가 파일을 열 때 파일 소유자의 권한 즉 level2가 소유하고 있는 파일의 권한을 파일을 실행할 때만 주는 것이다.
[level1@ftz level1]$ find / -perm +4000 -user level2 2> /dev/null
위 명령어를 통해 찾으면 되는 문제이다. 위 명령어에 대해 설명하자면 level2권한에 최소한 4000의 퍼미션을 가진 파일을 찾는 것이다. 여기서 4는 setuid이고 000은 0-유저 0-그룹 0-나머지를 의미하는 것이므로 setuid가 걸린 모든 파일을 찾아낼 수 있다. 그 뒤에 2> /dev/null에서 2는 표준에러를 의미하고, /dev/null은 리눅스에서의 휴지통을 의미한다. 그러므로 이는 검색 결과 중 표준에러가 발생하는 것을 전부 휴지통에 버린다는 의미이므로 표준 출력만을 출력하게된다. 위 명령어는 FTZ를 푸는데 매우 중요하므로 외워두면 좋다.
- 실행결과 -
/bin/ExecuteMe를 실행시키면 잠시 level2로 넘어가게 된다.
여기서 my-pass를 막았으므로 level2를 풀 수 있는 비밀번호는 바로 알아낼 수 없다. 그러므로 level2의 권한을 유지하면서 my-pass를 통해 비밀번호를 얻어내야한다. 이때 쉘을 실행시키면 level2의 권한을 유지시킬 수 있으므로 sh 명령어를 사용하면 성공한다.