오늘도 문제를 풀어봅시다
Bandit Level 15 → Level 16 문제 풀이
ssh bandit15@bandit.labs.overthewire.org -p 2220
password : jN2kgmIXJ6fShzhT2avhotn4Zcka6tnt
Bandit Level 15 → Level 16 문제는 SSL 암호화를 사용하여 localhost의 포트 30001에 현재 패스워드를 제출하여 level 16의 패스워드를 찾아내는 문제입니다
이 문제는 openssl 명령어를 사용했습니다 openssl은 보통 HTTPS 설정, 데이터 암복화 등에 많이 사용되는 명령어입니다
추가로 SSL과 TLS의 보안 통신을 위해 사용하는 프로토콜입니다
(TLS : Transport Layer Security) - SSL의 뒤를 잇는 표준입니다
그래서 전달 인자로 s_client를 함께 사용했는데 s_client(SSL/TLS client program)는 openssl과 관련된 테스트를 하거나 필요한 경우 운영 중인 웹 서버의 SSL 인증서 정보를 살펴볼 수 있습니다
사용법 : openssl s_client -connect [서버]:4433[옵션]
연결한 호스트와 포트를 지정합니다 포트가 지정되지 않으면 자동으로 4433의 로컬 호스트에 연결을 시도합니다
이후 "read R BLOCK" 문구 밑에 현재의 패스워드를 입력하면 다음 레벨의 패스워드를 획득할 수 있습니다
Bandit Level 16 → Level 17 문제 풀이
ssh bandit16@bandit.labs.overthewire.org -p 2220
password : JQttfApK4SeyHwDlI9SXGR50qclOAil1
Bandit Level 16 → Level 17 문제는 localhost 31000~32000 범위의 포트에서 연결되어 있는 포트를 찾아 연결 후 현재의 패스워드를 제출해야지만 다음 레벨의 패스워드를 획득할 수 있다고 합니다
우선 localhost에 31000~32000 범위의 포트 중에 열려있는 포트를 확인해야 합니다
전 nc 명령어를 사용했습니다 nc : Netcat은 단일 포트 또는 포트 범위를 검색할 수 있습니다
-v 옵션 : 보다 자세한 정보를 제공하는 옵션
-z 옵션 : 열린 포트만 검색하도록 지시하는 옵션
nc 명령을 사용 후 커서를 내려보면 이렇게 열려있는 포트를 확인할 수 있습니다
하지만 31000~32000개의 포트가 나열되어 있어 하나씩 눈으로 찾기 힘들 겁니다
그래서 열려있는 포트만 출력할 수 있게 표준 에러를 표준 출력으로 바꾸는 리다이렉션과 grep 파이프를 이용했습니다
nc -vz localhost 31000-32000 2>&1 | grep succeeded
총 5개의 포트가 열려있는데 이제 하나씩 openssl 명령어를 이용하여 출력시켜봅시다
하나씩 해본 결과 31790 포트가 정답이었습니다 해당 명령어는 전 단계에서 사용한 명령어입니다
"read R BLOCK" 문구 이후 현재의 패스워드를 입력해 주면 RSA 키를 획득할 수 있습니다 ( 출력된 RSA 키 부분을 복사 )
RSA 키? Level 14 문제에서 풀었던 방식이 떠오를 겁니다 이 방식대로 bandit17 계정으로 들어가서 비밀번호를 찾으면 됩니다
[ Bandit Level 14 RSA 키 문제 풀이 ]
bandit17 계정의 로그인하기 전에 RSA 키 파일을 생성해야 합니다 전 /tmp 경로의 musa라는 디렉터리를 생성했습니다
여기다가 파일을 생성하여 아까 복사한 RSA 키 내용을 넣어주면 됩니다
vi 명령어로 sshkey.private 파일을 생성했습니다 해당 파일 내용은 복사한 RSA 키 내용입니다
이제 ssh 명령어로 bandit17 계정에 접속해 봅시다
ssh -i sshkey.private bandit17@localhost -p 2220
그런데 bandit17 계정을 접속을 해보니 private key 파일이 보호되지 않았다고 합니다 아마 private key 파일의 권한이 소유자(bandit16) 말고는 읽을 수 없게 권한 설정이 필요한 거 같습니다
권한을 주기 전 그룹, 기타 소유자가 설정되어 있어 private key 파일이 보호되지 않았던 모양입니다
chmod 600 sshkey.private 명령어로 권한을 다시 설정해 줍시다
[ 권한 변경하는 방법 ]
권한을 다시 설정하니 정상적으로 bandit17 계정에 접속했습니다 Level 14와 동일한 위치에서 bandit17의 패스워드를 찾을 수 있습니다
이번 문제는 여태까지 배운 내용을 토대로 나온 문제라 다시 한번 공부할 수 있었습니다