두 개의 파일이 있다.
[download]를 클릭하면 test.txt 파일은 다운로드가 된다.
그러나 flag.docx는 "Access Denied" 라는 문구의 메시지 창이 뜬다.
다운로드한 test.txt 파일의 내용이다. (별 의미없는 내용인 것 같다.)
마우스 우클릭을 하여 웹페이지의 소스코드를 확인해보았다. (F12를 눌러도 소스코드를 확인할 수 있다.)
소스코드를 보면 test.txt 옆에 ?down=dGVzdC50eHQ= 가 있는 것을 볼 수 있다.
flag.docx는 "Access Denied" 창이 나오게 한다.
'?' 뒤에 오는 부분을 "쿼리 파라미터" 라고 한다.
이 부분은 웹 페이지에 정보를 전달하는 역할을 한다.
예를 들어,
https://www.example.com/page?parameter=value
위의 URL에서 parameter는 변수의 이름이고, value는 그 변수에 대한 값이다.
즉, 서버에게 "이 페이지를 열 때, parameter라는 변수에 value라는 값을 전달해주세요"라고 요청하는 것이다.
이때, value가 Base64로 인코딩되어 있다면, 이는 데이터를 안전하게 전달하기 위한 방법 중 하나이다.
Base64는 이진 데이터를 텍스트 형식으로 변환하는 인코딩 방식 중 하나이다.
이는 주로 이진 데이터를 텍스트 형태로 전송하거나 저장할 때 사용된다.
여기서 "이진 데이터"는 컴퓨터에서 사용되는 모든 종류의 데이터를 의미한다.
예를 들어, 이미지, 오디오, 비디오, 파일 등이 이진 데이터의 예시이다. 이런 데이터들은 0과 1로 이루어진 이진 형태로 저장되어 있다.
Base64 인코딩은 이진 데이터를 64개의 다양한 ASCII 문자로 구성된 문자열로 변환한다.
이 문자열은 텍스트 형태로 표현되므로, 텍스트로 전송하거나 저장하기에 용이하다.
예를 들어, "Hello, World!"라는 문자열을 Base64로 인코딩하면 다음과 같이 변한다.
(인코딩 · 디코딩 사이트: https://www.convertstring.com/ko/EncodeDecode/Base64Decode)
반대로 Base64로 인코딩된 문자열을 디코딩하면 다시 원본의 이진 데이터로 복원된다.
이를 통해 데이터를 안전하게 전송하거나 저장할 수 있다.
다시 돌아와서, ?down=dGVzdC50eHQ= 부분을 해석해보자.
먼저, '?' 기호는 쿼리 파라미터의 시작을 나타낸다.
'down='에서 down은 쿼리 파라미터의 이름이다. 이 경우에는 down이라는 변수에 값을 전달하고 있다.
'dGVzdC50eHQ=' 부분은 down 변수에 전달되는 값이다. 이 값은 Base64로 인코딩된 문자열이다.
'dGVzdC50eHQ='를 Base64로 디코딩하면 test.txt라는 문자열이 나온다.
따라서, '?down=dGVzdC50eHQ=' 부분은 "다운로드 요청을 할 때, 파일 이름은 'test.txt'입니다"라고 서버에게 전달하는 역할을 한다.
규칙을 알아냈으니, flag.docx를 Base64 인코딩하여 down 파라미터에 담아 다운로드를 시도해보자.
우선, flag.docx를 Base64 인코딩하였다.
Base64로 인코딩 된 텍스트 'ZmxhZy5kb2N4' 를 down 파라미터에 담아 주소에 입력하였다.
그랬더니 flag.docx를 다운받을 수 있었다!!
flag.docx 파일의 내용이다.
위의 내용을 Auth 페이지에 입력하면 된다.

다들 쉽게 푸는 것 같은데.... 처음 안 내용들 투성이... 화이팅...!!!!!!!!!!!!!!!!!!!!
'Hacking (CTF) > 웹 해킹' 카테고리의 다른 글
[webhacking.kr] old-12번 (0) | 2023.09.27 |
---|---|
[Root Me] Javascript - Webpack (0) | 2023.09.26 |
[Root Me] Javascript - Authentication 2 (0) | 2023.09.23 |
[Root Me] HTTP - COOKIES (0) | 2023.09.23 |
[webhacking.kr] old-19번 (0) | 2023.09.19 |