[bandit] Level 16 → Level 17

우주먼지·2024년 4월 8일
0

[War Game]Bandit

목록 보기
18/34
post-thumbnail
post-custom-banner

Bandit Level 16 → Level 17
Level Goal
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.

Sol)
이번엔 포트가 31000~32000 사이에 존재한다고 한다. 그 중 SSL을 리스닝하는 서버는 단 1개라고 하니 그 포트에 제출하면 비밀번호를 알려 줄 것 같다.

일할 때 많이 썼던 'netstat' 명령어를 이용하려고 했다.

#netstat [-option]
	#[option]
    	# -t: TCP 연결을 나타낸다.
    	# -u: UDP 연결을 나타낸다.
    	# -l: 리스닝 중인 서비스만을 나타낸다.
    	# -n: 주소와 포트를 숫자로 표시, DNS해석을 안해서 더 빨리 표시된다.
        
netstat -ln | grep ':31[0-9]\{3\}\|32000'
#grep에서 '\|'을 쓴 이유는 32000포트를 포함시키기위해 or의 의미로 씀

두 개의 포트가 나왔는데 해보면 되겠지만 'nmap'명령어를 한번 써보겠다.

# nmap [Options] {target specification}
nmap -p 31000-32000 localhost

내 이론상 netstat와 nmap에서 같은 결과가 나올 것이라 생각했지만 안나왔고, 두 명령어의 차이점을 알아보자.

netstat

내부에서 시스템에 현재 연결된 네트워크를 스캔한다. 한마디로, 로컬을 기준으로 연결된 내트워크를 확인할 때 씀.

nmap

외부에서 대상 시스템에 현재 네트워크를 스캔한다. 외부관점에서 스캔.

결국 nmap 명령어와 netstat 명령어의 결과가 다른 이유는

nmap의 결과를 보면 포트의 상태가 'open'인 경우 출력이 되었지만 실제 리스닝 상태인지는 모른다. 외부에서 포트의 상태가 열린 경우를 확인했기 때문.

netstat의 결과는 'LISTEN' 상태인 경우를 출력했다. 내부에서 스캔하여 리스닝 중인 경우에 출력을 한 것이다.

결과적으로 netstat의 두 개의 포트는 현재 리스닝 중이므로 이 중에서 확인을 해야하는데 '31518' 포트와 '31790' 포트이다.

nmap으로 서비스까지 확인을 했다. 예상으로는 nmap 결과에 따라서 '31518' 포트는 'ssl/echo' 서비스라고 하니 입력을 그대로 출력할 것이고 나머지 'ssl/unknown'인 '31790' 포트에서 비밀번호를 줄 것이라 예상해본다.

먼저 '31518' 포트로 연결을 시도한다.

비밀번호를 제출하면 입력과 똑같이 출력된다. 예상대로다.

다음, '31790' 포트로 연결을 시도.

'Correct!' 가 나오면서 Private key를 준다.

해당 내용을 복사해서 파일로 만들어야 하니 로컬PC(나는 Windows, 그러니까 내 컴퓨터! 얘네 서버 말고!)에 'private.key' 파일을 작성해 준다.

이제 해당 key파일로 접속을 시도한다.

하지만 'bad permissions'가 뜬다. 권한이 너무 열려있다고 하니 파일에 대한 권한을 제한해 줘야한다.

Windows 기준

  1. 해당 파일의 속성으로 들어간다.
  2. '보안' 탭에서 고급을 클릭한다.
  3. '상속 사용안함'을 클릭하여 허용된 모든 권한을 없애준다.
  4. '추가' 버튼을 클릭한다.
  5. '보안 주체 선택'을 클릭하여 개체 유형을 사용자로 선택한다.
  6. 개체 이름을 현재 PC의 사용자 이름으로 입력 후 '이름 확인'을 클릭한다.
  7. '확인'을 클릭하고 권한을 '읽기 및 실행'과 '읽기'만 체크한다.
  8. 동일한 방법으로 보안 주체를 '그룹'으로 선택 후 Administrators 이름으로 추가한다.

해당 형태로 권한이 부여 되었다면 이전 ssh 접속을 다시 시도해준다.

클리어.

profile
오늘보다 내일 더 문제가 많았으면 좋겠다.
post-custom-banner

0개의 댓글