일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Aleph One
- 버퍼오버플로우
- 리버싱
- 리눅스
- 해설
- Smashing The Stack For Fun And Profit
- 스택
- 해킹 공부
- writeup
- 시스템
- Hxd
- KOISTUDY
- grep
- picoCTF2018
- dreamhack
- cryptography
- WEB
- write up
- Protostar
- 시스템해킹
- general skills
- #picoCTF2018
- reversing
- picoCTF
- 정답
- #hacking
- forensics
- 번역
- 카이사르
- 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 명령어를 사용하면 성공한다.