본문 바로가기

OverTheWire/Bandit

OverTheWire Bandit Level 13 → 14 ~ 16 → 17

connect :  ssh bandit13@bandit.labs.overthewire.org -p 2220

password : 8ZjyCRiBWFYkneahHwxCv3wb2a1ORpYL

 

Level 13 → 14


클릭 시 문제로 이동

문제 : 비밀번호는 / etc / bandit_pass / bandit14에 저장되어있다. 사용자만 읽을 수 있고 비밀번호는 못 얻지만 비공개 ssh 키를 받을 수 있다고 한다.
참고 : localhost는 작업중인 시스템을 참조하는 호스트 이름이다.

ssh 접속하는 방법은 우리가 bandit문제를 접속할 때와 같다.

  • ssh [옵션] 사용자명@도메인(또는 IP주소)

ssh 키를 통해서 접속을 시도할 것이다.

  bandit13@bandit:~$ ls
  sshkey.private

ls 를 해보면 키 파일이 있는 것을 확인할 수 있다.

  bandit13@bandit:~$ ssh -i sshkey.private bandit14@localhost
  Could not create directory '/home/bandit13/.ssh'.
  The authenticity of host 'localhost (127.0.0.1)' can't be established.
  ECDSA key fingerprint is SHA256:98UL0ZWr85496EtCRkKlo20X3OPnyPSB5tB5RPbhczc.
  Are you sure you want to continue connecting (yes/no)? yes

ssh i 옵션은 인증을 위한 비밀키를 읽어올 파일을 선택하는 옵션이다. 

 

Level 14 → 15


 

문제 : 비밀번호는 현재 레벨의 비밀번호를  localhost의 포트 30000에 제출하면 알 수 있다.
  bandit14@bandit:~$ cd /etc/bandit_pass
  bandit14@bandit:/etc/bandit_pass$ cat bandit14
  4wcYUJFw0k0XLShlDzztnTBHiqxU3b3e

13번 문제에서  sshkey.private 파일을 통해 왔으므로 키를 모른다. 13 → 14에서 알려주었던 경로로 들어가 현재 레벨의 비밀번호를 얻었다.

  bandit14@bandit:/etc/bandit_pass$ cd #
  bandit14@bandit:~$ telnet localhost 30000
  Trying 127.0.0.1...
  Connected to localhost.
  Escape character is '^]'.
  4wcYUJFw0k0XLShlDzztnTBHiqxU3b3e
  Correct!
  BfMYroe26WYalil77FoDi9qh59eK5xNr

다시 돌아와서 telnet을 통해서 접속을 시도해준다. 현재 비밀번호를 제출해주면 다음 레벨의 비밀번호를 얻을 수 있다.

 

Level 15 → 16


문제 : 비밀번호는 SSL 암호화를 사용하여 localhost의 포트 30001에 현재 레벨의 비밀번호를 제출하면 알 수 있다.

openssl을 통해서 접속을 할 것이다.

  bandit15@bandit:~$ openssl s_client -connect localhost:30001
  CONNECTED(00000003)
  depth=0 CN = localhost
  verify error:num=18:self signed certificate
  verify return:1
  depth=0 CN = localhost
  verify return:1
  ---
  Certificate chain
   0 s:/CN=localhost
     i:/CN=localhost
  ---
  < 생략 >
   Start Time: 1621177789
      Timeout   : 7200 (sec)
      Verify return code: 18 (self signed certificate)
      Extended master secret: yes
  ---

이런식으로 주루룩 뭐가 뜬가. 현재 레벨의 비밀번호를 제출해주면,

  BfMYroe26WYalil77FoDi9qh59eK5xNr
  Correct!
  cluFn7wTiGryunymYOu4RcffSxQluehd

  closed

비밀번호가 뜬다.

 

Level 16 → 17


문제 : 31000에서 32000 범위의 localhost에있는 포트에 제출하면 비밀번호를 알 수 있다. 어느 포트가 수신 대기 중인 서버가 있는 지 확인하고 SSL을 사용하는 것을 찾아야한다.

 

  bandit16@bandit:~$ nmap -p 31000-32000 localhost

  Starting Nmap 7.40 ( https://nmap.org ) at 2021-05-16 17:23 CEST
  Nmap scan report for localhost (127.0.0.1)
  Host is up (0.00037s latency).
  Not shown: 996 closed ports
  PORT      STATE SERVICE
  31046/tcp open  unknown
  31518/tcp open  unknown
  31691/tcp open  unknown
  31790/tcp open  unknown
  31960/tcp open  unknown

  Nmap done: 1 IP address (1 host up) scanned in 0.09 seconds

namp을 통해서 31000~32000 범위의 포트들을 스캔해본다.

  bandit16@bandit:~$ openssl s_client -connect localhost:31790

  < 생략 >
  ---
  cluFn7wTiGryunymYOu4RcffSxQluehd
  Correct!
  -----BEGIN RSA PRIVATE KEY-----
  MIIEogIBAAKCAQEAvmOkuifmMg6HL2YPIOjon6iWfbp7c3jx34YkYWqUH57SUdyJ
  imZzeyGC0gtZPGujUSxiJSWI/oTqexh+cAMTSMlOJf7+BrJObArnxd9Y7YT2bRPQ
  Ja6Lzb558YW3FZl87ORiO+rW4LCDCNd2lUvLE/GL2GWyuKN0K5iCd5TbtJzEkQTu
  DSt2mcNn4rhAL+JFr56o4T6z8WWAW18BR6yGrMq7Q/kALHYW3OekePQAzL0VUYbW
  JGTi65CxbCnzc/w4+mqQyvmzpWtMAzJTzAzQxNbkR2MBGySxDLrjg0LWN6sK7wNX
  x0YVztz/zbIkPjfkU1jHS+9EbVNj+D1XFOJuaQIDAQABAoIBABagpxpM1aoLWfvD
  KHcj10nqcoBc4oE11aFYQwik7xfW+24pRNuDE6SFthOar69jp5RlLwD1NhPx3iBl
  J9nOM8OJ0VToum43UOS8YxF8WwhXriYGnc1sskbwpXOUDc9uX4+UESzH22P29ovd
  d8WErY0gPxun8pbJLmxkAtWNhpMvfe0050vk9TL5wqbu9AlbssgTcCXkMQnPw9nC
  YNN6DDP2lbcBrvgT9YCNL6C+ZKufD52yOQ9qOkwFTEQpjtF4uNtJom+asvlpmS8A
  vLY9r60wYSvmZhNqBUrj7lyCtXMIu1kkd4w7F77k+DjHoAXyxcUp1DGL51sOmama
  +TOWWgECgYEA8JtPxP0GRJ+IQkX262jM3dEIkza8ky5moIwUqYdsx0NxHgRRhORT
  8c8hAuRBb2G82so8vUHk/fur85OEfc9TncnCY2crpoqsghifKLxrLgtT+qDpfZnx
  SatLdt8GfQ85yA7hnWWJ2MxF3NaeSDm75Lsm+tBbAiyc9P2jGRNtMSkCgYEAypHd
  HCctNi/FwjulhttFx/rHYKhLidZDFYeiE/v45bN4yFm8x7R/b0iE7KaszX+Exdvt
  SghaTdcG0Knyw1bpJVyusavPzpaJMjdJ6tcFhVAbAjm7enCIvGCSx+X3l5SiWg0A
  R57hJglezIiVjv3aGwHwvlZvtszK6zV6oXFAu0ECgYAbjo46T4hyP5tJi93V5HDi
  Ttiek7xRVxUl+iU7rWkGAXFpMLFteQEsRr7PJ/lemmEY5eTDAFMLy9FL2m9oQWCg
  R8VdwSk8r9FGLS+9aKcV5PI/WEKlwgXinB3OhYimtiG2Cg5JCqIZFHxD6MjEGOiu
  L8ktHMPvodBwNsSBULpG0QKBgBAplTfC1HOnWiMGOU3KPwYWt0O6CdTkmJOmL8Ni
  blh9elyZ9FsGxsgtRBXRsqXuz7wtsQAgLHxbdLq/ZJQ7YfzOKU4ZxEnabvXnvWkU
  YOdjHdSOoKvDQNWu6ucyLRAWFuISeXw9a/9p7ftpxm0TSgyvmfLF2MIAEwyzRqaM
  77pBAoGAMmjmIJdjp+Ez8duyn3ieo36yrttF5NSsJLAbxFpdlc1gvtGCWW+9Cq0b
  dxviW8+TFVEBl1O4f7HVm6EpTscdDxU+bCXWkfjuRb7Dy9GOtt9JPsX8MBTakzh3
  vBgsyi/sN3RqRBcGU40fOoZyfAMT8s1m/uYv52O6IgeuZ/ujbjY=
  -----END RSA PRIVATE KEY-----

  closed

하나하나 접속을 해보면 31790 포트만 RSA 키가 있다. 해당 키를 이용해서 접속을 할 것이다.

  bandit16@bandit:~$ mkdir /tmp/pass
  bandit16@bandit:~$ cat > /tmp/pass/sshkey.private
  -----BEGIN RSA PRIVATE KEY-----
  MIIEogIBAAKCAQEAvmOkuifmMg6HL2YPIOjon6iWfbp7c3jx34YkYWqUH57SUdyJ
  imZzeyGC0gtZPGujUSxiJSWI/oTqexh+cAMTSMlOJf7+BrJObArnxd9Y7YT2bRPQ
  Ja6Lzb558YW3FZl87ORiO+rW4LCDCNd2lUvLE/GL2GWyuKN0K5iCd5TbtJzEkQTu
  DSt2mcNn4rhAL+JFr56o4T6z8WWAW18BR6yGrMq7Q/kALHYW3OekePQAzL0VUYbW
  JGTi65CxbCnzc/w4+mqQyvmzpWtMAzJTzAzQxNbkR2MBGySxDLrjg0LWN6sK7wNX
  x0YVztz/zbIkPjfkU1jHS+9EbVNj+D1XFOJuaQIDAQABAoIBABagpxpM1aoLWfvD
  KHcj10nqcoBc4oE11aFYQwik7xfW+24pRNuDE6SFthOar69jp5RlLwD1NhPx3iBl
  J9nOM8OJ0VToum43UOS8YxF8WwhXriYGnc1sskbwpXOUDc9uX4+UESzH22P29ovd
  d8WErY0gPxun8pbJLmxkAtWNhpMvfe0050vk9TL5wqbu9AlbssgTcCXkMQnPw9nC
  YNN6DDP2lbcBrvgT9YCNL6C+ZKufD52yOQ9qOkwFTEQpjtF4uNtJom+asvlpmS8A
  vLY9r60wYSvmZhNqBUrj7lyCtXMIu1kkd4w7F77k+DjHoAXyxcUp1DGL51sOmama
  +TOWWgECgYEA8JtPxP0GRJ+IQkX262jM3dEIkza8ky5moIwUqYdsx0NxHgRRhORT
  8c8hAuRBb2G82so8vUHk/fur85OEfc9TncnCY2crpoqsghifKLxrLgtT+qDpfZnx
  SatLdt8GfQ85yA7hnWWJ2MxF3NaeSDm75Lsm+tBbAiyc9P2jGRNtMSkCgYEAypHd
  HCctNi/FwjulhttFx/rHYKhLidZDFYeiE/v45bN4yFm8x7R/b0iE7KaszX+Exdvt
  SghaTdcG0Knyw1bpJVyusavPzpaJMjdJ6tcFhVAbAjm7enCIvGCSx+X3l5SiWg0A
  R57hJglezIiVjv3aGwHwvlZvtszK6zV6oXFAu0ECgYAbjo46T4hyP5tJi93V5HDi
  Ttiek7xRVxUl+iU7rWkGAXFpMLFteQEsRr7PJ/lemmEY5eTDAFMLy9FL2m9oQWCg
  R8VdwSk8r9FGLS+9aKcV5PI/WEKlwgXinB3OhYimtiG2Cg5JCqIZFHxD6MjEGOiu
  L8ktHMPvodBwNsSBULpG0QKBgBAplTfC1HOnWiMGOU3KPwYWt0O6CdTkmJOmL8Ni
  blh9elyZ9FsGxsgtRBXRsqXuz7wtsQAgLHxbdLq/ZJQ7YfzOKU4ZxEnabvXnvWkU
  YOdjHdSOoKvDQNWu6ucyLRAWFuISeXw9a/9p7ftpxm0TSgyvmfLF2MIAEwyzRqaM
  77pBAoGAMmjmIJdjp+Ez8duyn3ieo36yrttF5NSsJLAbxFpdlc1gvtGCWW+9Cq0b
  dxviW8+TFVEBl1O4f7HVm6EpTscdDxU+bCXWkfjuRb7Dy9GOtt9JPsX8MBTakzh3
  vBgsyi/sN3RqRBcGU40fOoZyfAMT8s1m/uYv52O6IgeuZ/ujbjY=
  -----END RSA PRIVATE KEY-----
  ^C

디렉토리를 만든 다음 cat으로 해당 경로에 파일을 만들어 위와 같은 내용을 넣어준 뒤 Ctrl+C로 나와준다.

  bandit16@bandit:~$ cd /tmp/pass
  bandit16@bandit:/tmp/pass$ ssh -i sshkey.private bandit17@localhost
  Could not create directory '/home/bandit16/.ssh'.
  The authenticity of host 'localhost (127.0.0.1)' can't be established.
  ECDSA key fingerprint is SHA256:98UL0ZWr85496EtCRkKlo20X3OPnyPSB5tB5RPbhczc.
  Are you sure you want to continue connecting (yes/no)? yes
  Failed to add the host to the list of known hosts (/home/bandit16/.ssh/known_hosts).
  This is a OverTheWire game server. More information on http://www.overthewire.org/wargames

  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  @         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  Permissions 0644 for 'sshkey.private' are too open.
  It is required that your private key files are NOT accessible by others.
  This private key will be ignored.
  Load key "sshkey.private": bad permissions

해석해보면 . 다른 사용자는 위 파일에 액세스할 수 없게 해야한다고 한다.

    bandit16@bandit:/tmp/pass$ ls -al
    total 1124
    -rw-r--r--    1 bandit16 root    1592 May 16 17:45 sshkey.private

권한을 보면 그룹과 다른 사용자에게도 읽기 권한이 있는 것을 확인할 수 있다.

  chmod 700 sshkey.private
  bandit16@bandit:/tmp/pass$ ls -al
  total 1124
  -rwx------    1 bandit16 root    1592 May 16 17:45 sshkey.private

사용자에게만 권한이 있도록 권한을 수정해준다. (600 or 700)

  bandit16@bandit:/tmp/pass$ ssh -i sshkey.private bandit17@localhost
  Could not create directory '/home/bandit16/.ssh'.
  The authenticity of host 'localhost (127.0.0.1)' can't be established.
  ECDSA key fingerprint is SHA256:98UL0ZWr85496EtCRkKlo20X3OPnyPSB5tB5RPbhczc.
  Are you sure you want to continue connecting (yes/no)? yes

접속을 해주면 성공적으로 접속이 된다.

  bandit17@bandit:~$ cat /etc/bandit_pass/bandit17
  xLYVMN9WE5zQ5vHacb0sZEVqbrp7nBTn

다음에 접속할 때를 위해 현재 단계의 비밀번호를 알아보았다.

 


끝.