Pwn

    Level 17 → Level 18

    home 디렉터리에는 두 파일이 존재합니다. passwords.old와 passwords.new가 있습니다. 문제에서는 두 파일의 다른 점이 딱 한 줄 존재한다고 합니다. 그렇다면 저희가 이용할 수 있는 명령어인 diff가 있습니다. 이 명령어는 전달받은 두 파일 간의 차이점(difference)을 발견하고 결과를 출력해줍니다. 자세한 사용법은 여기를 참고하시길 바랍니다. diff passwords.old passwords.new 결과를 보면 .old에 있던 한 줄()을 볼 수 있습니다. 그렇다면 밑에 있는 것이 다음 레벨로 가기 위한 패스워드라는 것을 알 수 있습니다. 이제 다음 레벨로 로그인 해볼까요?

    Level 16 → Level 17

    이번에는 Port Scan에 대한 문제인가 봅니다. 어떤 port가 살아있는지 찾으라는 것 같습니다. 그래서 port scan을 하기 위한 명령어로 nmap을 써보도록 하겠습니다. 사용법과 옵션에 대한 내용은 여기를 참고하시길 바랍니다. nmap -p 31000-32000 localhost 열려있는 port가 3개 보이는군요. 문제에서도 말했듯이 열려있는 port들 중에서 ssl에 현재 패스워드를 넣었을 때 반응하는 곳은 '한 곳'밖에 존재하질 않는다고 합니다. 그렇다면 저희는 지난 일에 배운 것처럼 openssl s_client -connect localhost:[얻은 포트 중 하나] 을 이용해서 반응을 하는 포트를 보면 됩니다. 그리고 현재 패스워드를 제출해보시면 반응하는 한 포트가 있습니다. 그리고..

    Level 15 → Level 16

    힌트를 보니 이번 문제는 OpenSSL과 관련된 문제인 것 같습니다. 그래서 이 분 블로그를 참조해서 사용법을 좀 알아보았습니다. 아무래도 OpenSSL 1.0.1 ~ 1.0.1f 버전에서 발생하는 취약점인 것 같습니다. 그래서 먼저 openssl 명령어의 버전이 무엇인지 알아보았죠. openssl version -a 뭐죠 이건... 왜 1.1.0k 버전인 걸까요... 그래서 에라 모르겠다는 심정으로 그냥 정석대로 연결해보았습니다. openssl s_client -connect localhost:30001 이후 현재 비밀번호를 입력하고 결과를 보았습니다. ?????????????? 다른 블로그 분들의 풀이를 보았는데 원래라면 -ign_eof 옵션을 주지 않으면 답이 나오지 않았습니다. 게다가 애초에 He..

    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 명..