문제 정보
Username: natas8
Password: a6bZCNYwdKqN5cGP11ZdtPg0iImQQhAB
URL: http://natas8.natas.labs.overthewire.org

그림 1은 natas8 사이트에 접속한 화면이다. 특정 secret값을 넣어서 옳을 경우 natas9의 비밀번호를 줄 것이라고 예상된다.

소스코드를 확인하였고 해당 페이지는 php로 작성되었다.
코드 리뷰를 해보자면 우리가 입력한 특정 값을 encodeSecret 함수를 통해 인코딩 시켜서 encodedSecret값과 같으면 natas9의 비밀번호를 얻을 수 있다.
먼저 encodeSecret 함수에 쓰인 함수들을 알아야한다.
bin2hex() 함수 : ASCII문자의 문자열을 16진수 문자형태로 변환해 준다. ex) A => 41
strrev()함수 : 문자열을 입력받아 순서를 뒤집는 함수. ex) 1234 => 4321
base64_encode() : base64로 인코딩 하는 함수
함수를 알았으니 해석하자면 우리가 입력한 값을 1. base64로 인코딩, 2. 순서 뒤집기, 3. ASCII문자를 16진수 문자형태로 변환 과정을 거친다.
이 값이 encodedSecret이기 때문에 반대로 1. 16진수 문자를 ASCII로, 2. 순서 뒤집기, 3. base64로 디코딩 과정을 거치면 입력값을 찾을 수 있을 것이다.
hex2bin() : 16진수 문자를 ASCII로 변환
strrev() : 순서 뒤집기
base64_decode() : bas64 디코딩
필자는 위와 같은 함수를 써서 문제를 해결하였다.

encodedSecret값을 첫번째로 hex2hin()함수로 ASCII값으로 변환하였고, 두번째로 strrev()함수로 순서를 뒤집었으며, 마지막으로 base64_decode()함수를 사용하여 base64로 디코딩 하였다.
따라서 나온 값은 oubWYf2kBq이다.

해당 입력값을 넣어서 제출하면 natas9의 비밀번호를 출력한다.
natas9 Credentials
Username : natas9
Password : Sda6t0vkOPkM8YeOZkAGVhFoaplvlJFd
결론
해당 문제는 코드 해석이 중요한 문제인 것 같다.
레퍼런스
https://www.php.net/manual/en/function.base64-encode.php
https://www.php.net/manual/en/function.bin2hex.php
https://www.php.net/manual/en/function.strrev.php
https://www.php.net/manual/en/function.hex2bin
https://www.php.net/manual/en/function.base64-decode
'OverTheWire WriteUp' 카테고리의 다른 글
OverTheWire Natas [Level10] - WriteUp (0) | 2023.06.21 |
---|---|
OverTheWire Natas [Level9] - WriteUp (0) | 2023.06.19 |
OverTheWire Natas [Level7] - WriteUp (1) | 2023.06.15 |
OverTheWire Natas [Level6] - WriteUp (0) | 2023.06.13 |
OverTheWire Natas [Level5] - WriteUp (0) | 2023.06.11 |