-
[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신호를 무시하여 온전한 비밀번호가 입력될 수 있게 하는 것이 방법이 될 수 있다는 것을 배웠습니다.
'OverTheWire:Bandit' 카테고리의 다른 글
[OverTheWire:Bandit] Level3 → Level4 문제풀이 (1) 2024.09.24 [OverTheWire:Bandit] Level2 → Level3 문제 풀이 (6) 2024.09.22 [OverTheWire:Bandit] Level2 문제 풀이 (5) 2024.09.21 [OverTheWire:Bandit] Level1 문제 풀이 (2) 2024.09.20 [OverTheWire:Bandit] Level 0 문제 풀이 (1) 2024.05.26