전체 보기

    Main Level 1

    해외에서 유명한 사이트 중 하나인 "HACK THIS!!"라는 사이트를 찾게 되었습니다. 그러고 나서 가장 처음 만날 수 있는 문제인 'Main Level'부터 시작하도록 하겠습니다. 문제 설명을 보면 제 ID, PW를 넣지 말라는군요. 그래서 페이지 전체를 훑어보았지만 아무것도 발견할 수 없었습니다. 그래서 생각한 방법이 바로 'Ctrl + U'를 눌러 페이지의 소스를 보는 것이었습니다. 해당 페이지의 원본 소스를 볼 수 있는데요, 여기서 조금만 자세히 보게 되면... ah-ha 이렇게 발견할 수 있게 됩니다. 입력을 하고 다음 문제로 넘어가 보도록 합시다.

    Level 19 → Level 20

    이번엔 setuid 문제입니다. 로그인을 하고 home 디렉터리의 파일의 권한을 확인해보니 ls -l bandit20의 실행 권한이 현재 s로 setuid로 설정된 것을 보실 수 있습니다. 이 권한(s)은 이 파일을 실행한 어떠한 유저라도 일시적으로 해당 파일의 소유자의 권한을 얻을 수 있습니다. 즉 우리가 노려할 것은 이 파일이 어떤 파일인지 알아본 뒤, bandit20의 권한을 일시적으로 얻었을 때에 /etc/bandit_pass/bandit20의 패스워드를 훔쳐보는 것입니다. 일단 그룹권한으로 현재 bandit19도 읽고 실행할 수 있으니 실행해 봅시다. ./bandit20-do 아하 인자를 하나 전달해서 실행하라고 하네요. 일단 예시 그대로 따라 실행해보도록 하겠습니다. ./bandit20-do ..

    Level 18 → Level 19

    이전 레벨에서 얻은 패스워드로 로그인을 시도해보겠습니다. ssh bandit18@localhost 하지만 웬일인지 바로 로그아웃되며 창이 닫히는군요... 당황스러웠지만 이전 레벨의 NOTE 부분을 보도록 합시다. see 'Byebye!'가 정확히 적혀있군요. 그리고 문제를 보니 로그인을 하려는 순간 .bashrc라는 파일이 실행되어 저희를 로그아웃 시키나 봅니다. 그래서 저는 ssh로 접속하라는 힌트라고 생각을 하고 어떻게 하면 ssh 명령어와 함께 이 문제를 풀 수 있을까를 생각해보았습니다. 그렇게 구글링을 하던 도중에 ssh 사용법 중 하나를 발견하게 되었습니다. 바로 ssh [사용자]@[서버] [명령어] 이렇게 사용할 수 있다는 것입니다. 바로 시도해보았습니다. 저희가 원하는 건 bandit18의 ..

    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로 이미 바뀌어진 상태라는 걸 알고 일단 다른 형태로 바꾸어야 한다고 생각했습니다. 그래서 이 문제는 조금 복잡하면서 노가다성이 짙습니다. 한번 해보죠. 정리를 좀 해보려 했는데... 좀 힘들더군요. 대신 다른 분의 블로그를 참고하시면 될 것 같습니다... 여기로 다음으로 가봅시다.