운영체제/Linux | Mac(OSX)

[Overthewire] Bandit level 14~16

며용 2021. 5. 2. 03:35

15.

 

현재 비밀번호를 localhost:30000로 보내면 다음 레벨 비밀번호를 알 수 있다

 

 

- 풀이

더보기

 

nc는 network cat으로 네트워크 상에서 간단하게 주고 받는 걸 보기 위함이다

telnet이나 ssh는 특정한 규약이 있는데 nc는 데이터를 보내고 받는 것만 있다 (전달만 확실하게)

 

그래서 nc로 localhost인 127.0.0.1에 포트는 30000로 연결하고 bandit14의 비밀번호를 보내면 bandit15의 비밀번호를 리턴해준다

 

 

+

내 연결성 확인하기

netstat -ano

 

열려있는 포트 체크하기

nc
-z: 데이터 전송 안함
-v: 상세출력
-n: no DNS, IP로
-w 1: 최대 1초의 연결 리슨 시간

 

(내가 쓰는 것들은,,실습용 가상머신이다,, 이거,,)

(내 하드디스크랑 통신하기 위한 거: cat / 네트워크에 있는 디스크에서 뭘 받아오기: nc)

(nc는 서버용으로도 만들 수 있대 지금은 클라이언트인데, 아무튼 다양하게 사용 가능)

 

 

 

 

16.

현재 비밀번호를 ssl을 이용해서 localhost:30001로 보내면 다음 레벨 비밀번호를 알 수 있다

 

 

- 풀이

더보기

 

터미널 환경에서 ssl접속을 어떻게 하는지 물어보는건데

원래는 Heartbleed Bug가 나서 그걸 해결하는 건데 이 버그가 TLS 1.0버전에 있었다고 한다

 

지금은 이 서버가 1.2버전인가로 업그레이드가 돼서 더이상 이 오류가 안난다고 한다

(원래는 -igf 옵션을 붙여야 이 버그가 해결된다고 한다)

 

 

로컬로 루프백으로 접속을 해야한다

 

openssl은 nc의 암호화 버전 정도로 생각하면 된다

s_client는 ssl client program이고 ssl 연결을 위해서 openssl s_client 명령어를 사용하면 된다

openssl s_client -connect localhost:30001

 

연결이 되면, 근데 서버는 ssl이니까 인증서가 날라온다 (or 공개키)

그래서 초이스 없이 공개키를 무조건 받아서 통신이 이루어지는거고

 

단순히 접속만 한거다. 단순히 패킷 보내고 주면 받고 안주면 안 받고 그래서 전차가 없다

내가 뭔지 보내지 않으면 저쪽에서도 아무것도 주지 않는다

 

 

 

그래서 정상적으로 연결이 됐으면 현재 bandit15의 비밀번호를 보내주면 bandit16의 비밀번호를 리턴해준다

 

 

+

ssl 연결이 되면 이제 정보들을 확인해볼 수 있다

 

TLS 1.2버전을 사용하고 있고 public key는 1024짜리구,,

 

 

self signed certificate는 인증서를 CA에서 못 받으니까 네트워크 애들은 자기가 자기한테 받는 셀프 사인된 인증서를 쓴다

 

 

 

 

17.

 

31000에서 32000 포트 중에서 ssl 연결을 하는 곳을 찾아 다음 레벨로 갈 수 있는 credential 얻기

 

 

- 풀이

더보기

 

우선 범위 내에서 열린 포트들을 체크한다

 

어떤 포트는 ssl로 얘기하고 어떤 건 뭐,, 그 중에 한 서버만이 다음 단계 패스워드를 알려주니까

포트마다 특정한 서비스가 들어간다 생각하면 된다 

 

 

그리고 열린 포트들에 연결을 해보고 먼저 평문으로 a를 넣는데 a가 오면 평문 통신이다

암호화 통신을 안해도 돌려준다

echo 서비스가 돌아가고 있는 것

(살아있는지 아닌지 체크용으로 에코 서비스를 만들었었다. 근데 보안 이슈 때문에 요새는 이렇게 에코 서비스를 안한다고 함)

 

 

 

여기 이렇게 반응이 없으면 암호화 통신을 해야한다

 

 

 

이렇게 하면 연결이 되고

 

 

현재 패스워드를 보내면 인증서인 private key가 날라온다 (bandit17의 키)

 

 

이렇게 날라온 prviate key는 전체 복사를 해서 저장을 해준다 (vi or notepad 이용)

윈도우 편집기는 디폴트로 특수 기호가 들어가니까 리눅스 상에서 특수기호 안들어가게 저장하는게 가장 깔끔하긴 하다

(노트패드는 잘 안들어가는 워드패드는 잘 들어간다고 함)

 

파일 체크를 했을 때 RSA private key라고 뜨면 정상적으로 저장된 것이다

 

 

 

그리고 이 키로 접속하기 위해서 먼저 사용자 권한을 변경해주고

 

 

 

저장한 키를 사용해 로그인하면 성공

 

 

 

마지막으로 bandit17의 비밀번호를 알아내 가져온다