OverTheWire WriteUp

OverTheWire Natas [Level8] - WriteUp

Roronoa 2023. 6. 17. 22:09
반응형

문제 정보

Username: natas8
Password: a6bZCNYwdKqN5cGP11ZdtPg0iImQQhAB
URL:      http://natas8.natas.labs.overthewire.org

 

[그림 1] natas8 사이트 접속

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

 

[그림 2] 소스 코드 확인

소스코드를 확인하였고 해당 페이지는 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 디코딩

필자는 위와 같은 함수를 써서 문제를 해결하였다.

 

[그림 3] 입력값 구하기

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

 

따라서 나온 값은 oubWYf2kBq이다.

 

[그림 4] natas9 비밀번호

해당 입력값을 넣어서 제출하면 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

 

 

반응형