OverTheWire_Wargame Bandit

[ level13 -> level14 ]



다음 문제로 갈 수 있는 패스워드는 /etc/bandit_pass/bandit14 에 저장이 되어 있으나, bandit14 계정으로만 접근이 가능하다고 합니다.

하지만 이번 레벨에서는 다음 레벨로 가는 패스워드 없이 private SSH key를 이용하여 다음 레벨로 올라갈 수 있다고 합니다.

접속 후 ls 명령어를 입력 해 보면 아래와 같이 sshkey.private라는 파일이 존재합니다.



sshkey.private 파일을 읽어보면 RSA private key가 저장되어 있는데, 이 key를 putty에서 SSH-RSA key로 변경 할 수 있습니다.

putty의 keygen 기능을 이용하여 ssh key를 만들어 보도록 하죠.



load로 sshkey.private에 저장되어 있던 rsa_private key를 불러오고, save private key를 눌러주면 새로운 ppk 파일을 만들어줍니다.



이제 새로운 putty 콘솔을 열고, bandit 세션을 적어준 후 [Connection - SSH - Auth]에서 Browse를 클릭하여 방금 전에 생성한 ppk 파일을 넣어 준 후 세션을 열어줍니다.


그리고 Login 계정을 bandit14로 해주면 bandit14로 패스워드 없이 바로 접속이 가능합니다.


OverTheWire_Wargame Bandit

[ level12 -> level13 ]




이번 문제는 data.txt파일이 hexdump로 제공되며, 압축이 연속적으로 걸려있다고 하네요. 이를 /tmp에 새 이름으로 폴더를 만든 후 거기서 문제를 진행하라고 합니다. 그대로 따라해주도록 하죠.



/tmp/fstr3am 아래에 data.txt 파일을 넣어주었습니다.



data.txt 파일의 hexdump입니다. 헤더를 보면 1f8b 0808로 시작하는 것을 알 수 있는데, 이는 gzip의 파일 포맷입니다. hexdump를 바이너리화 시켜주면서 파일명의 뒤에 .gz을 불여주도록 하죠. 이 때 사용하는 툴은 xxd입니다. -d 옵션을 주어 출력해주면 바이너리 파일이 생성됩니다.


생성된 data.txt.gz을 gzip -d 옵션으로 압축 해제를 해주면 다시 data.txt 파일이 나타납니다.

이러한 형식으로 다중 압축이 되어 있는데, 이 문제 같은 경우 3가지의 압축 방법이 적용되어 있습니다.

위에서 설명한 헤더를 가지고 있는 gzip,

그리고 바로 아래 그림에서 볼 수 있는 425a 헤더를 가지고 있는 bzip2,



마지막으로 헤더에 파일명을 가지고 있으며, 아래 섹션에서는 해당 파일 hex값이 나타나는 tar 압축입니다.



이런식으로 하나하나 압축을 풀어 나가다 보면 마지막에는 data8.bin이 남게 되며, 이 파일을 읽어내면 key값을 얻어 낼 수 있습니다.






P.S - xxd로 파일 헤더를 볼 필요 없이, file 명령어를 이용하면 어떤 압축 포맷인지 바로 알 수 있다고 합니다.... 쮸륵..


OverTheWire_Wargame Bandit

[ level11 -> level12 ]



이번 문제도 이전 레벨과 동일하게 data.txt에 패스워드가 들어있다고 합니다. 하지만 소문자와 대문자 알파벳이 13의 간격을 두고 바뀌어 있다고 하네요.

파이썬이나 다른 언어로 13씩 앞/뒤로 당겨 출력하면 key값을 구할 수 있을 것입니다.


위 값이 13의 크기만큼 rotatation 된 문자열입니다. 이를 바꿔보도록 하죠.






이를 출력하면 키값을 구할 수 있습니다.

OverTheWire_Wargame Bandit

[ level10 -> level11 ]


자, 드디어 레벨10입니다. 한참 한 것 같은데 아직 절반도 못 왔네요.. 부지런히 해야겠습니다.

힌트부터 살펴보죠.


이전 레벨과 마찬가지로 data.txt에 패스워드가 들어있으며, base64로 인코딩 된 데이터가 패스워드라고 합니다.

확인해보죠.


위와 같이 base64로 인코딩 된 데이터를 확인 할 수 있는데, 이를 python으로 디코딩 해줍시다.


바로 패스워드를 뱉어줍니다.


OverTheWire_Wargame Bandit

[ level9 -> level10 ]


자, 이제 레벨10으로 가는 마지막 관문이 남았습니다. 힌트를 확인 해 보도록 하죠.



이전 레벨과 동일하게 data.txt 안에 패스워드가 저장되어 있으며, 몇 개의 '='로 시작하는 문자열에 읽을 수 있는 문자열이 약간 있다고 합니다.

확인해봅시다!



grep으로 '==='를 필터링 하여 실행 해 보니 'Binary file (standard input) matches'라는 오류를 뱉으며 제대로 실행이 되지 않습니다.

이 오류는 바이너리 파일을 grep 했을 때 나타나는 오류라고 하는데, 이 때 -a 옵션을 주면 바이너리를 텍스트로 읽어들여 제대로 필터링 할 수 있다고 합니다.



-a 옵션을 걸어주고 grep 해 봅시다.


몇 개의 equals 뒤에 key 값이 나타난 걸 확인 할 수 있습니다.


OverTheWire_Wargame Bandit


[ level8 -> level9 ]




이번 문제는 data.txt 안에 패스워드가 저장되어 있으며, 단 한번 발생한 라인의 텍스트가 패스워드라고 합니다.

결국 이 말은 data.txt 안에는 중복되는 값이 여럿 존재하며, 이를 제거하면 단 하나의 key가 남을 것입니다.


sort와 uniq는 한 번도 사용하지 않았던 명령어라서 구글링을 통해 알아냈습니다. sort는 말 그대로 아스키 순으로 소팅을 해주는 명령어이고, uniq 함수는 중복을 제거해주는 명령어입니다. 그 중에서도 -u 옵션을 넣어주면 중복되는 값을 제거하고 남은 값을 출력해주기 때문에 key값을 바로 도출 해 낼 수 있습니다.

OverTheWire_Wargame Bandit


[ level7 -> level8 ]



이번 문제도 힌트부터 확인하도록 하죠!

이번 레벨의 목표는 data.txt 파일 안에 다음 레벨로 갈 수 있는 패스워드가 저장되어 있다고 합니다.

그러나 'millionth' 라는 단어 옆에 있다고 하네요.

직접 확인해보도록 합시다.


ls -al 명령어로 해당 파일의 크기를 확인 해 보니 4000kb가량 되는 걸 보니... 아마 사전 데이터같은 값들이 저장되어있는 것 같습니다.

이런 다량의 데이터 속에서 원하는 값을 찾아내기 위해서는 grep 명령어를 사용해야하죠. bash에서는 파이프(|)를 사용하여 두 개 이상의 명령어를 동시에 사용 할 수 있습니다.

확실히 말하자면 동시에 실행하는 것은 아니고, 파이프라인 뒤에 있는 명령어를 실행하는데 그 입력값으로 파이프라인 앞에 있는 명령어의 실행 결과를 던져주는거죠.

millionth 뒤에 있는 key값이 바로 우리가 찾고자 하는 키값입니다!

OverTheWire_Wargame Bandit


[ level6 -> level7 ]


자, 벌써 6레벨까지 도달했습니다. 힌트부터 확인하도록 하죠.



이번 레벨의 목표는 서버 어딘가에 저장되어있는 다음 단계로의 패스워드를 찾으라는 것입니다.

bandit7의 유저권한, bandit6의 그룹권한, 그리고 33byte의 크기를 가지고 있다는 것을 알려주고 있네요.

이전 레벨과 동일하게 find 명령어로 한방에 찾아주도록 합시다.



짜잔.

OverTheWire_Wargame Bandit


[ level5 -> level6 ]



자, 이번 문제는 힌트를 한번 참고해서 풀어보도록 하죠.

이번 레벨의 목표는 inhere 디렉토리 안에 1033바이트의 읽을 수 있는 non-exec 파일이 있다고 합니다.

직접 확인해보도록 하죠.


inhere 디렉토리 아래에는 여러개의 디렉토리가 또 존재하고 있으며, 이 디렉토리 아래에는 여러개의 파일이 더 존재합니다. 그러나 우리는 찾고자 하는 파일이 1033바이트인 것을 이미 알고 있기 때문에 find 명령어로 size 옵션을 지정해주어 1033바이트인 파일만 추려냈습니다.

그러면 key값을 바로 확인 할 수 있습니다.

OverTheWire_Wargame Bandit

[ level4 -> level5 ]



이번 문제도 level3와 동일하게 inhere 라는 디렉토리가 있습니다.

해당 폴더로 친절하게 들어가주면 -file* 이름으로 여러개의 파일이 있습니다.

처음에는 바이너리를 merge시키는 문제인 줄 알았지만, 해당 폴더에 쓰기 권한이 없기 때문에 그냥 전체 파일을 출력 해 주었더니 마지막에 있는 key값을 찾아 낼 수 있었습니다.

+ Recent posts