The credentials for the next level can be retrieved by submitting the password of the current level to a port on localhost in the range 31000 to 32000. First find out which of these ports have a server listening on them. Then find out which of those speak SSL/TLS and which don’t. There is only 1 server that will give the next credentials, the others will simply send back to you whatever you send to it.
Helpful note: Getting “DONE”, “RENEGOTIATING” or “KEYUPDATE”? Read the “CONNECTED COMMANDS” section in the manpage.
이번 문제에서는 port 중 31000~32000 중 하나에서 실행되고 있다고 하는데, 어떤 번호에서 실행되고 있을까요?
해결
먼저, localhost에 대해 nmap를 실행해보면, 31000에서 32000 사이의 포트가 보이지 않습니다.
스캔할 포트의 범위를 지정하여 다시 입력해보면 5개의 포트가 열려있는 것을 확인할 수 있습니다.
이 중, 인증을 주는 포트는 단 한가지이며, 아쉽지만 하나씩 시도해봐야 했습니다.
① 31046
31046 포트로 openssl 연결하니 인증이 되지 않습니다.
② 31518
31518 포트는 openssl을 지원하는 것 같았지만 현재의 password를 입력하였을 때 어떠한 결과도 얻을 수 없습니다.
③ 31691
31691 포트 또한 openssl에 대한 인증이 존재하지 않습니다.
④ 31790
1번째 방법
31790 포트는 openssl에 대한 인증이 존재하였고, password를 입력해보면 private key를 획득할 수 있습니다.
해당 private key를 통해 bandit17에 -i 옵션으로 ssh 접속을 시도하면 되겠네요.
두 번째 방법
직접 입력하지 않고, 바로 전달하는 방법도 있습니다.
echo로 password를 호출하여 파이프로 전달하는 방법인데, 한 가지 문제점은 private key를 확인할 수 없었습니다.
DONE 으로 끝나버렸는데, -ign_eof 를 통해 해결할 수 있습니다.
세 번째 방법
cat으로 bandit16 의 password 파일을 읽어 파이프로 전달하면 key를 획득할 수 있습니다.
앞선 echo와 같은 방식이지만 차이점은 -quiet 옵션을 사용하는 것입니다.
-quiet 옵션은 s_client의 output을 출력하지 않습니다. 그리고 default로 -ign_eog를 포함합니다.
제가 풀면서 들었던 의문은..
2-3번 방법에서 출력 길이에 제한이 있는 것일까? 왜 -ign_eog와 -quiet 옵션을 붙여야만 sshprivate.key가 출력되지?
획득한 key를 서버의 /tmp 속에 저장할 수 있습니다.
/tmp로 이동하여 hello라는 폴더를 만든 후, hi라는 파일을 만들어 RSA PRIVATE KEY에 대한 내용을 저장할 수 있는데요. 그러나 이는 바로 보낼 수 없습니다.
여기서 -----BEGIN RSA PRIVATE KEY----- 와 -----END RSA PRIVATE KEY-----까지 꼭 넣어줘야 합니다. 오타 발생하면 접속안되니 유의해주세요.
이대로 보내게 되면 다음과 같은 메세지를 확인할 수 있습니다.
Permissions 0644 for 'hi' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored.
라는 메세지에 주목해보겠습니다.
현재 private key가 담긴 hi 파일의 권한은 644로 설정되어 있는데, private key는 다른 누군가에 의해 접근이 불가한 고유의 키이기 때문에 다른 사람과 공유되어선 안됩니다.
따라서 파일의 권한이 소유자 외에는 0으로 설정되어 있어야 합니다.
파일의 권한을 600이나 400, 700 등으로 설정하면 bandit17에 접속할 수 있습니다.
핵심
port scanner
A port scan or portscan is a process that sends client requests to a range of server port addresses on a host, with the goal of finding an active port; this is not a nefarious process in and of itself.[1] The majority of uses of a port scan are not attacks, but rather simple probes to determine services available on a remote machine.
To portsweep is to scan multiple hosts for a specific listening port. The latter is typically used to search for a specific service, for example, an SQL-based computer worm may portsweep looking for hosts listening on TCP port 1433.