Bandit

리눅스 nmap 포트 스캔 | Bandit Level 16 -> Level 17

developerYoung 2023. 9. 3. 22:54
반응형

문제

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

 
localhost에 31000부터 32000사이에 어떤 포트로 패스워드를 보내면 다음 레벨로 가는 credentials를 알 수 있다.

문제를 풀기전에 기본적인 리눅스 지식을 공부하고 풀어봅시다!
 

리눅스 nmap 명령어

nmap은 대표적인 네트워크 스캐너 명령어입니다. 주로 nmap을 사용하여 특정 서버의 열려 있는 모든 포트를 스캔하는데 사용되어집니다. 
그렇다면 왜 열려있는 포트를 스캔해야하는지 알아본다면, 포트는 서버를 운영하기 위해선 포트를 열어야합니다. 그렇기때문에 서버의 네트워크 서비스들을 공격하기 위해 해킹하는 입장에서는 열려있는 포트를 수집하여 그 정보로 공격을 시도하기 때문입니다.

그럼 이제 서버의 포트를 스캔하는 방법을 알아보도록 하겠습니다.

nmap사용법

nmap [Scan Type(s)] [Options] [서버 IP]

nmap 옵션 종류

  • default : 시스템의 포트에 대한 정보 리턴
  • -F : 주로 사용하는 포트 스캔
  • -p- : 1부터 65535 까지 모든 포트 스캔
  • -p : 특정 포트 스캔 (범위 가능)
  • -sT : TCP 연결을 사용하여 스캔

예시

  • nmap 127.0.0.1
  • nmap 127.0.0.1-255 (1부터 255까지 IP 스캔)
  • nmap 127.0.0.1/10000-30000 (10000부터 30000까지 포트 스캔)
  • nmap -p- localhost (열려있는 모든 포트 스캔)
반응형

풀이

이번 문제는 일단 전체적인 흐름을 다시 한 번 잡고 시작하는게 좋을것 같네요!
문제를 읽으며 풀 과정을 한번 나눠봅시다!

  1. localhost의 31000 ~ 32000 포트 사이에서 열려있는 포트를 탐색한다.
  2. 찾은 포트로 SSL을 적용하여 현재 단계의 패스워드를 보낸다.
  3. 딱 하나의 서버로부터 중요한 힌트를 얻을 수 있다.
  4. 그 힌트를 통해 다음 레벨로 가자!

 
1번 과정 진행을 위해 배운 nmap 포트스캔으로 31000 부터 32000까지 스캔을 해볼까요?
항상 먼저 명령어를 생각하고나서 보는게 좋다고 생각하니 생각해보세요!

nmap -p 31000-32000 localhost

nmap 포트 스캔 결과

nmap 으로 31000부터 32000까지의 포트 스캔 과정을 가졌습니다.
결과로 얻은 31046, 31518, 31691, 31790, 31960 5가지의 포트가 열려있는 것을 확인했지만, 아직 이 중에 우리가 원하는 서버가 어딘지는 잘 모르겠죠.
그래서 5개 밖에 없으니 하나씩 요청을 보내보도록 하죠!
 
2번 과정을 보면 SSL로 보내는 명령어를 기억하시나요? (생각이 안나신다면 아래 포스팅에서 확인해보세요!)
https://youngari.tistory.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4-ncat-SSL-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%ED%86%B5%EC%8B%A0-Bandit-Level-15-Level-16

 

리눅스 ncat SSL 네트워크 통신 | Bandit Level 15 -> Level 16

문제 Level 15. The password for the next level can be retrieved by submitting the password of the current level to port 30001 on localhost using SSL encryption. Helpful note: Getting “HEARTBEATING” and “Read R BLOCK”? Use -ign_eof and read the

youngari.tistory.com

 

ncat --ssl localhost 31046
패스워드 입력

이런식으로 주어진 포트들을 직접 해봤습니다!
사진에서 결과를 확인해주세요!

ncat 결과

31790 포트에서 우리는 굉장히 의미있는 정보를 얻을 수 있었어요! 혹시 해당 파일을 기억하시나요? 전전 포스팅의 단계에서 풀었던 RSA 공개키 인증 방법이죠.
 
그렇다면 우리는 해결책을 이렇게 얻을 수 있을거에요!
4번 과정에서 RSA 키를 얻었고, bandit17 계정으로 로그인을 하기 위해선 이 private key 파일을 통해 ssh 연결을 하면 된다는 결론을 얻을 수 있습니다.
 
그렇다면 이 내용을 그대로 vi를 통해 /tmp/keyfile 로 저장하고, ssh 연결을 하도록 해봅시다!

아래에서 Permissions 0664 for '/tmp/keyfile' are too open 이라고 말해주네요.
이런 상황은 ssh keyfile로 연결할 때, 종종 발생하는데요. 해당 key file이 너무 열려있는 파일이라 보안이 낮다고 판단하기 때문이죠.
그래서 chmod로 해당 파일의 권한을 600으로 바꾼 후 다시 접속을 시도하도록 해봅시다!

chmod 600 /tmp/keyfile
ssh -i /tmp/keyfile bandit17@localhost -p 2220

짠! 다음 단계로 넘어온 것을 확인했나요?? 그렇다면 성공입니다.


더보기를 눌러 비밀번호를 확인하세요!

더보기

이 레벨은 비밀번호가 없습니다.

 

반응형