ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [OverTheWire:Bandit] Level16 문제 풀이
    OverTheWire:Bandit 2024. 11. 30. 14:22

    문제

    bandit16 문제

    localhost의 31000번 포트부터 32000번 포트까지 한개의 맞는 포트만 Credentials를 bandit16의 비밀번호를 입력하였을 때 리턴해준다고 합니다

     

    그 포트를 찾아서 openssl s_client를 사용하여 tls 연결 후 현재 비밀번호 입력하면 Credential이 나온답니다.

     

    여기서 Helpful Note는 굳이 안봐도 될 것 같았지만 여기 나오는 내용이 오늘 글을 쓰게 된 이유가 되었습니다.

    풀이 방법

    우선 31000번 포트 부터 32000포트까지 열려 있는 포트를 찾기 위해 nmap을 사용했습니다.

     

    nmap -sV localhost -p 31000-32000

     

    이것을 사용하면 시간은 오래 걸리지만(돌려놓고 다른거 좀 하다 와도 됩니다) ssl 인증서 여부와 echo 같은 정보도 나와서 포트 5개 나오는 것중에 맞는 것을 한번에 찾을 수 있었습니다.

     

    여기서 31790 포트 echo가 없고 ssl을 사용하여 이 포트로 연결하면 되겠다 해서 연결하고 다음 명령어를 입력하여 연결하여

    openssl s_client -connect localhost:31790

     

    현재 비밀번호인 

    kSkvUpMQ7lBYyCM4GBPvCvT1BfWRy0Dx

    를 입력하여 Credential을 받으려 했지만, 문제에서 봤던 KEYUPDATE가 나오면서 비밀번호가 입력이 안되는 문제가 있었습니다.

     

    이것을 해결하기 위해 검색을 해보니 openssl의 s_client에서 tls1.3부터는 "k" 혹은 "K"가 입력의 첫번째로 나왔을 경우 그것을 TLS명령으로 오판하여 EOF신호를 내보내 비밀번호를 입력할 수 없는 상황이라고 판단되었습니다. 

     

    그래서 -ign_eof 옵션을 사용하여 EOF신호가 발생하더라도 이를 무시하고 입력하였습니다.

    openssl s_client -connect localhost:31790 -ign_eof

     

    그랬더니 입력이 잘되었고 rsa Private Key가 나왔습니다.

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

     

    이것을 복사하고 bandit16애서 나가 로컬 환경에서 이것을 vi편집기를 사용하여 bandit17Key라는 이름으로 저장하였습니다. 

    그 후, 바로 접속을 해보려 했는데, 현재 권한은 너무 오픈되어 있어 나쁜 권한이라 하고 비밀번호 입력하라고 하길래 권한을 축소시키고 다시 시도 했습니다.

    chmod 400 <만들어둔 키 이름>

     

    권한 변경 후

    ssh -i "<만들어둔 키 이름>" bandit17@bandit.labs.overthewire.org -p 2220

     

    를 입력했더니 접속이 되었습니다.

     

    항상 키 입력해서 접속해도 되지만 비밀번호를 알면 더 좋으니

    bandit17에 접속한 상태에서 다음 명령어를 입력하여

    cat /etc/bandit_pass/bandit17

     

    비밀번호를 얻어서 저장해둡니다.

    EReVavePLFHtFlFsjn3hyzMlvSuSAcRD

     

    이 비밀번호를 사용하면 키를 사용하지 않고 원래 비밀번호를 입력하여 접속하던 방식대로 접속 할 수 있습니다.

    배운 점

    openssl의 s_client가 현재 기본적으로 tls1_3 버전이고, 여기서는 k혹은 K로 시작하는 문자열이 TLS명령(KEYUPDATE)으로 인식되고, 이것을 임시방편으로 해결하기 위해서는 -ign_eof 옵션을 사용하여 EOF신호를 무시하여 온전한 비밀번호가 입력될 수 있게 하는 것이 방법이 될 수 있다는 것을 배웠습니다.

Designed by Tistory.