문제

Bandit Level 16->17


풀이 및 정답

이번 문제는 31000 ~ 32000 사이에 있는 포트 중 1개의 포트만 서버가 listen 하고 있기에 그 포트를 찾은 후 SSL/TLS 를 사용하는지 안하는지도 확인해야 합니다.


man nmap을 통해서 nmap 명령어가 포트 스캔을 하는 도구인 것을 확인할 수 있었고 PORT SPECIFICATION AND SCAN ORDER: 부분에 -p <port ranges>옵션을 통해 범위 지정도 가능한 것을 확인했습니다.

nmap -p 31000-32000 localhost


해당 명령어 사용을 통해 31000-32000 포트 사이 오픈되어 있는 포트 확인 완료.
환인된 포트는 다음과 같습니다

  • 31046 (unknown)
  • 31518 (unknown)
  • 31691 (unknown)
  • 31790 (unknown)
  • 31960 (unknown)

이제 TLS를 사용하는 포트인지 아닌지 확인해야 한다.

–script ssl-enum-ciphers 옵션을 추가해서 어떤 포트가 SSL/TLS가 적용됐는지 아닌지 확인해볼 수 있다.

nmap --script ssl-enum-ciphers -p 31000-32000 localhost



  • 31046 (unknown)
  • 31518 (unknown) (SSL/TLS)
  • 31691 (unknown)
  • 31790 (unknown) (SSL/TLS)
  • 31960 (unknown)

두개의 포트에서 SSL/TLS가 적용되고 있으니 이제 비밀번호를 제출해 봅니다.

  • 31046 (unknown)
  • 31691 (unknown)
  • 31960 (unknown)

3개의 포트는 nc 또는 telnet 명령어로 비밀번호를 제출하면 된다.

3개의 포트는 모두 내가 제출한 문자열을 그대로 한번 더 출력하고 아무일도 일어나지 않는다.

그럼 아래의 두개의 포트 openssl s_client 명령어로 비밀번호를 제출해보자.

  • 31518 (unknown) (SSL/TLS)

해당 포트에 접근하고 비밀번호를 전송했더니 KEYUPDATE 라는 결과가 나오고 곧바로 연결이 종료되는 문구가 나왔다.

비밀번호를 일부러 틀려서 어떤 결과가 나오는지 한번 시도해봤더니 해당 포트에서는 서버로 전송한 문자열을 그대로 반환하고 k 문자가 전송되면 KEYUPDATE가 반환 되었다.
얻은 결과는 다음과 같다. 1) 위의 3개의 포트와 동일하게 입력한 문자열 그대로 출력 2) k로 시작되는 문자열을 만나면 KEYUPDATE 결과 반환

  • 31790 (unknown) (SSL/TLS)


해당 포트는 다른 4개의 포트와는 달랐다.
1) 정답이 아닌 문자열을 제출하면 틀렸다는 답변 따라서 k문자로 시작되는 문자열만 어떻게 전송하면 좋을지 고민해보면 될 것 같다. man openssl s_client을 통해서 옵션쪽을 살펴본 결과 -nocommands 옵션을 사용하면 내가 제출한 문자열이 명령어처럼 동작하지 않을 것 같았다.


!!!!! 놀랍게도 정답이라는 문구와 함께 rsa private key를 받아낼 수 있었다.
bandit17 계정에 접속하는 rsa key이기에 14 레벨에서 했던 것처럼 저장해둔다.

ssh -p 2220 bandit17@bandit.labs.overthewire.org -i 17_rsa

접속 확인
성공
그럼 다음 문제!