Pwn/Bandit

    Level 14 → Level 15

    현재 레벨의 패스워드, 즉 로그인할 때 입력했던 bandit14의 패스워드를 포트 30000, localhost에 접속해서 제출하라고 합니다. 저희가 이때 사용할 수 있는 명령어가 있습니다. 바로 nc 명령어입니다. 좀 더 자세한 내용은 이 블로그를 참고하시길 바랍니다. 그래서 nc 명령어를 이용해 봅시다. nc localhost 30000 그리고 커서가 깜빡거릴텐데 여기에 이번 레벨의 비밀번호를 입력해줍시다. 엔터 치면 밑에 다음 레벨의 패스워드가 나올 것입니다. 다음 레벨로 가봅시다.

    Level 13 → Level 14

    이번에는 다음 레벨로 가기 위한 접속만 하면 된다고 하는군요. home 디렉터리에 있는 파일을 한번 확인해보겠습니다. ls -l sshkey.private 라는 파일이 하나 존재하네요. 이름에서도 알 수 있으시다시피 ssh를 이용하여 이 키를 전달하여 접속하나 봅니다. 그래서 ssh 명령어에서 key를 전달할 때 사용하는 옵션인 -i를 이용하여 전달하고 문제에 나온 곳으로 접속해봅시다. ssh -i sshkey.private bandit14@localhost 마지막에 계속해서 접속할 것인지 물어보는데 당연히 'yes'라고 답해주시면 됩니다. ㅎㅎ 이렇게 잘 접속이 되었습니다. 하지만 다음 레벨로 가기 전에 이번 라운드의 패스워드를 알고 가야 하죠. cat /etc/bandit_pass/bandit14 다..

    Level 12 → Level 13

    이 문제는 어떻게 접근해야 할지 몰라서 처음에 좀 헤맸습니다. 일단 data.txt가 origin이 아니라 hex dump로 이미 바뀌어진 상태라는 걸 알고 일단 다른 형태로 바꾸어야 한다고 생각했습니다. 그래서 이 문제는 조금 복잡하면서 노가다성이 짙습니다. 한번 해보죠. 정리를 좀 해보려 했는데... 좀 힘들더군요. 대신 다른 분의 블로그를 참고하시면 될 것 같습니다... 여기로 다음으로 가봅시다.

    Level 11 → Level 12

    지난번 예상이 틀렸군요..ㅠㅠ 아무튼 로그인을 하고 내용을 확인해봅시다. cat data.txt 뭔가가 나왔군요. 뭔지 잘 모르다가 힌트로 준 Rot13에 대해 읽어보았습니다. Rot13이란 "rotate by 13 places(13자리가 돌려진 것)"입니다. 즉 간단한 13자리 대치 암호화인 것입니다. 그리고 중요한 점은 항상 역원이 존재해야 하는 것입니다. 좀 더 밑을 보게 되면 라고 되어있고, 그대로 위의 글을 대치하면 되겠군요. 대치할 때 좋은 명령어인 tr을 이용해보겠습니다. tr은 translate의 약자입니다. 사용법: tr [source] [destination] cat data.txt | tr 'N-ZA-Mn-za-m' 'A-Za-z' 이제 다음으로 가죠.

    Level 10 → Level 11

    이번 문제는 base64 관련 문제인가 봅니다. 먼저 data.txt 안에 든 내용이 뭔지 살펴봅시다. cat data.txt base64로 인코딩 된 하나의 줄이 출력됩니다. 그럼 이 줄을 base64 명령어를 이용해서 디코딩해보도록 합시다. 이때 이용할 옵션으로는 -d 로 디코딩 시 써줘야 합니다. 없으면 인코딩입니다. base64 -d data.txt 결과로 정직한 한 문장이 출력되는군요. 다음 문제로 가봅시다. 지금까지의 문제들 특성상 왠지 base64를 이용하는 심화 문제가 나올 듯합니다.

    Level 9 → Level 10

    cat data.txt | sort | uniq | grep = 이전 레벨과 매우 비슷하니 먼저 이걸로 바로 확인해보았습니다. 하지만 이런 식으로 바이너리 파일과 매치된다면서 제대로 된 결과가 나오고 있지 않습니다. 이럴 때 쓸 수 있는 명령어가 있습니다. 바로 strings 명령어입니다. 바이너리 파일들은 작성된 내용들을 볼 수 없지만 부분적으로 문자 또는 숫자로 저장된 ASCII 문자들을 확인할 수 있게 해주는 명령어죠. 이걸 이용해서 grep과 함께 조건에 맞는 줄을 찾아보도록 하죠. strings data.txt | grep = 결과 중에서 = 몇 개로 시작하는 줄이 몇 개 보입니다. 하지만 당연 눈에 띄는 하나의 줄이 있죠. 이거 말고도 할 수 있는 하나의 방법이 더 있습니다. 바로 grep 명..

    Level 8 → Level 9

    cat data.txt | sort | uniq -c | grep 1 저는 이런 식으로 일단 만들었습니다. 차례대로 설명하자면 ...더보기 cat [파일] : 파일의 내용을 출력합니다. | (파이프) : 출력의 결과를 버퍼에 담아두어 다음 명령어의 입력으로 사용할 수 있게 합니다. sort : 파일을 하나하나의 줄을 기준으로 정렬합니다. (자세한 정렬 기준은 검색을 통해 알아보세요.) uniq : 중복되는 줄을 없애준다. sort를 통해 같은 내용의 떨어진 것들을 모은 후에 사용했습니다. (옵션 -c: 중복되는 줄의 개수를 센다.) grep [패턴] : 패턴에 맞는 줄을 찾아준다. 저렇게 여러 줄이 나오는데 그중에서 앞의 개수가 딱 1개인 것이 보입니다. 그게 바로 위에서 말한 다음 레벨의 패스워드이겠죠..

    Level 7 → Level 8

    로그인을 하고 home 디렉터리에 뭐가 있는지 보죠. ls -l 이번에는 find 명령어로 찾는 일 없이 바로 home 디렉터리에 있네요. 그리고 절대로 cat data.txt 라고 하지 마시길 바랍니다... 데이터 사이즈가 보이시나요? 4184396... 비록 블록 단위이기는 하지만 매우 큰 데이터가 들어있을 것으로 추정됩니다. 그렇다면 우리는 힌트를 이용해서 찾을 수 밖에는 없죠. 이럴 때 유용한 명령어가 바로 grep 명령어입니다. 어떠한 파일 내에 든 텍스트에서 지정한 패턴들을 찾아주는 역할을 하죠. 그래서 이 명령어를 이용해서 찾아보도록 하겠습니다. grep "millionth" data.txt 아하 찾았습니다. 다음으로 넘어가 보죠.

    Level 6 → Level 7

    로그인을 한 뒤에 문제를 보았습니다. "서버 어딘가에" 다음 3가지 조건을 만족시키는 패스워드 파일이 존재한다는군요. 이번 문제는 바로 전 단계 문제의 Advanced 버전이라는 느낌이 듭니다. 한번 find 명령어를 이용해서 작성해볼까요? find / -user bandit7 -group bandit6 -size 33c -exec cat {} \; 엄청난 오류들이군요. 모두 권한으로 인한 접근 거부 에러들이 대부분이군요. 밑에 로그들을 살펴보다 보면 답을 바로 찾을 수 있겠지만 저는 여기서 하나를 더 추가하여 깨끗하게 보려 합니다. find / -user bandit7 -group bandit6 -size 33c -exec cat {} 2> /dev/null \; 이렇게 빨갛게 칠해진 부분을 추가합니다..