Bandit6 → Bandit7
-문제-
다음 단계로 가는 패스워드는 아래조건에 해당하는 어딘가에 있다.
파일의 유저가 bandit7, 그룹이 bandit6, 사이즈는 33 bytes
풀이방법 : user bandit7, group bandit6, 사이즈는 33byte인 파일을 찾자.
fine / -user bandit7 -group bandit6 -size 33c 명령어를 사용했더니 permission denied가 엄청 많이 뜬다...
Permission denied가 뭐지?
Permission denied 메시지는 파일이나 디렉토리에 대한 접근 권한이 없는 경우에 발생하는 표준 에러 메시지이다.
- 표준 입력 (stdin): 파일 디스크립터 번호 0
- 표준 출력 (stdout): 파일 디스크립터 번호 1
- 표준 에러 (stderr): 파일 디스크립터 번호 2
해결방법으로 permission denied를 제거하자
어떻게 제거하지?
표준 에러 메세지를 redirection(>, >>, < 등)으로 출력을 다른 곳으로 바꾸자!
redirection은 입출력값을 다른 곳으로 옮겨주거나 파일로 저장한다는 뜻이다.
즉, permission denied라는 표준에러 메시지(fd2번)를 redirection으로 내 화면에 안 뜨도록 할 계획이다.
2>/dev/null로 에러 메시지를 모두 없애자.
dev/null로 경로를 지정한 이유는 ?
리눅스와 유닉스 시스템에서 표준으로 출력을 버리는 데 사용되는 특수 파일이기 때문이다. (꼭 이 경로를 사용할 필요가 없음, 그러나 여기서 새로운 디렉토리를 만들어서 경로를 지정하려 했으나 권한이 없어서 생성 불가능 했음)
find / -user bandit7 -group bandit6 -size 33c 2>/dev/null을 입력해서 permission denied를 모두 없애면 딱 하나의 파일만 남게 된다.
cat 명령어로 실행하면 완료!
Bandit7 → Bandit8
-문제-
다음 단계로 가는 패스워드는 data.txt 파일 안에 millionth 단어 옆에 있다.
풀이방법 : data.txt 파일 안에 millionth를 찾아보자.
ls 명령어로 안에 data.txt가 있는 걸 발견했고 vi 명령어로 data.txt 파일의 내부로 들어가 보자.
왼쪽에 단어와 오른쪽에 암호 같은 게 보인다.
이제 millionth단어를 찾아야 한다.
vi editor에서는 / 로 내가 원하는 단어를 찾을 수 있다.
/millionth를 입력하면 옆에 비밀번호가 나온다.(n, N 명령어로 다음 단어를 찾을 수 있으나 여기선 하나뿐이었다.)
Bandit8 → Bandit9
-문제-
다음 단계로 가는 패스워드는 data.txt안에 오직 하나의 줄로만 나타나는 패스워드이다.
풀이방법 : 한 줄로만 나오는 패스워드를 찾아보자
cat data.txt로 파일 안의 내용을 확인해 보자... 엄청 지저분하게 나온다.
이 중에서 한 줄 빼고 나머지는 모두 중복으로 나오는 문자들이다.
일단 sort 명령어로 지저분한 내용을 깔끔하게 정리해 보자..
sort data.txt를 사용한 결과 위의 사진처럼 몇 개의 글들이 중복되는 것을 볼 수 있다.
내가 찾고자 하는 패스워드는 중복이 없는 한 줄이니까 중복 횟수가 1인내용을 찾으면 된다.
어떻게 찾을까?
uniq 명령어를 사용하자.
uniq 명령어는 파일이나 표준 입력으로부터 연속적으로 중복된 라인들을 제거하고 고유한(unique) 줄들만 출력하는 기능이다.
uniq -c data.txt를 입력해 보자.
음.. 왜 이렇게 뜨는 거지?
uniq -c는 입력 데이터가 연속된 중복을 기반으로 동작한다. 따라서 정렬되지 않은 데이터에서는 올바른 결과를 보장하지 않는다.
그럼 정렬해 주는 sort 명령어와 uniq -c를 같이 쓰면 내가 원하는 값이 나올 것이다!
그렇다면 파이프( | )를 사용해서 연결시켜 주자.
파이프는 한 명령어의 출력을 다른 명령어의 입력으로 전달하는 역할을 합니다.
sort | uniq -c는 sort 명령어로 정렬한 출력값을 uniq -c의 입력값으로 들어가기 때문에 정렬된 내용을 uniq -c로 중복의 개수를 카운트해 줄 것이다.
즉, cat data.txt | sort | uniq -c 명령어를 입력하면 된다.
이 처럼 혼자만 1인 줄이 패스워드이다.
Bandit9 → Bandit10
-문제-
다음 단계로 가는 패스워드는 data.txt파일 안에 저장되어 있고 몇 개의 human-readable 한 string타입으로 이루어져 있고 몇몇 개의 = 로 시작한다.
풀이방법 : 수많은 내용 중에서 string이고 패스워드 앞이 = 인 것을 찾자.
특정 문자로 시작하는 단어를 어떻게 찾을까?
grep 명령어를 사용하자.
grep은 주어진 텍스트나 파일에서 패턴을 검색하는 명령어이다.
grep [옵션] 패턴 [파일]
grep "=" data.txt 명령어로 =로 시작하는 내용을 찾으려고 했으나 위의 파일은 binary라서 grep를 사용할 수 없다.
grep은 텍스트 형식의 파일을 읽을 수 있기 때문에 위의 내용을 string으로 따로 빼 온다음에 사용해야 할 거 같다.
그러니 string을 찾기 위한 명령어 strings을 이용하자.
strings data.txt로 string만 출력한 상황이다. 이제 여기서 몇몇 개의 =로 시작하는 패스워드를 찾기만 하면 된다.
sting인 내용을 grep 명령어를 사용해서 찾을 거라서 파이프를 사용해야 한다.
strings data.txt | grep "="를 해보자.
저기 패스워드처럼 보이는 것이 있다. 문제에서 몇몇 개의 =로 이루어졌다 했으니 하나만 더 추가해 보자.
이렇게 패스워드를 찾았다.
그래서 cat 명령어로 비밀번호를 출력하자.
Bandit10 → Bandit11
-문제-
다음 단계로 가는 패스워드는 data.txt로 저장돼 있고 base64로 인코딩 되어있다.
풀이방법 : 인코딩 된 data.txt를 디코딩해서 출력하자.
cat 명령어로 data.txt 파일을 출력해 보자
패스워드로 입력해 보니 역시나 틀린 패스워드였다.
문제에서 base64로 인코딩 되어있다고 하니 인코딩 된 파일을 디코딩으로 풀어버리자!
base64 --decode data.txt 명령어를 사용해서 인코딩 된 data.txt파일을 디코딩할 수 있다.
이 문제는 알기만 한다면 이처럼 패스워드를 쉽게 찾을 수 있다.
'wargame > bandit' 카테고리의 다른 글
Bandit21 ~ Bandit26 문제 풀이 (1) | 2024.07.03 |
---|---|
Bandit16 ~ Bandit21 문제 풀이 (0) | 2024.06.28 |
Bandit11 ~ Bandit16 문제 풀이 (0) | 2024.06.26 |
Bandit1 ~ Bandit6 문제 풀이 (0) | 2024.06.21 |
리눅스 기반 Wargame 소개(Bandit) 및 Bandit0 문제 풀이 (0) | 2024.06.21 |