[SuNiNaTaS(써니나타스)] 15번 문제 풀이


오늘은 써니나타스 15번 문제 풀이를 해보려고 한다.

15번 문제를 들어가면 아래의 화면과 같다.

(15번 문제)

 

15번 문제는 'Do you like music? Hint : Authkey is in this file.' 이라고 나와있다. 음악을 좋아하냐면서 키값의 힌트는 파일 안에 있다고 한다. 이런 문제는 링크를 바로 클릭해서 들어가야 한다.

 

 

링크를 클릭해서 들어가면 아래와 같이 플레이어 바처럼 보이는 것이 자동 실행된다.

(노래가 좋아서 아무생각없이 노래를 듣게 된다.)

(노래~)

 

 

적당히 노래를 들었으면 노래 파일을 다운받아야 한다. 왜냐하면 아까 문제에서 힌트가 파일 안에 키값이 있다고 했으니깐... 그래서 아래의 화면처럼 다운로드를 진행한다.

(다운로드)

 

 

파일을 다운받아보니 나비의 '다이어리'라는 노래였다. 역시 좋은 노래는 다르다..ㅎㅎ

(나비 '다이어리')

 

 

이제 파일 내부 알아봐야하는 데 툴을 사용하지 않고 바로 '속성'부터 확인을 해봤다.

(속성 확인~)

 

 

정말 문제가 쉽게 풀릴 거 같은 느낌이 드는 키값이 눈 앞에 떡하니 있었다. 분명 해당 노래를 부른 사람은 나비일 테인데 지휘자가 다른 느낌이었다. 

(딱 봐도 이상한 느낌)

 

 

그래서 바로 키값으로 인지하고 입력했더니 아래와 같은 화면처럼 축하하다는 팝업창과 함께 문제가 풀린 것을 볼 수 있었다.

(문제해결!)

 

 

이번 문제는 노래를 들으면서 즐겁게 문제를 풀 수 있었던 시간이었다. 문제 난이도도 어렵지 않았고 잠깐 쉬어가는 느낌이 강한 문제였다.

 

 

 

 

 

 

*해당 블로그는 개인적인 공부와 정보 공유를 위해 만들었습니다.

[SuNiNaTaS(써니나타스)] 16번 문제 풀이


오늘은 16번 문제를 풀어보았다. 어제 9번 문제를 풀려고 했으나, 나에게 많이 부족한 리버싱 문제였다. 그래서 공부를 한 다음에 문제를 풀 예정이다.

16번 문제를 들어가 보면 'Can you find the password for a member of SuNiNaTaS.com' 라는 문구가 존재한다. 써니나타스 회원의 패스워드를 찾으라는 말 같다. 그리고 바로 밑에 'Download'가 있었다. 그래서 바로 다운로드를 진행했다.

(16번 문제)

 

 

다운로드를 한 파일을 확인해보면 'pacp'파일로 나온다. 해당 파일은 packet capture로 패킷을 캡처한 파일이다.

(다운로드 파일)

 

 

그래서 나는 'WireShark(와이어샤크)'라는 툴을 이용해서 확인해보기로 했다. 해당 툴은 통신이 이루어진 패킷을 캡처해서 사용자가 쉽게 알 수 있게 해주는 도구이다. 밑에 화면은 와이어샤크를 실행한 화면이다.

(와이어샤크 실행 화면)

 

 

와이어샤크에서 검색 기능이 있는데, 써니나타스의 비밀번호를 알아내기 위해서 http로 패킷을 주고받았을 가능성이 크다. 그래서 아래의 화면처럼 검색 기능에다가 http라고 입력했다.

(http로 필터링)

 

 

protocol이 http인 것들만 모은 상태에서 'info'를 클릭하면 http기준에서 또다시 정렬이 이루어진다. 여기서 'POST' 부분만 확인을 진행할 것이다.

('info' 이용한 정렬)

 

 

'POST' 부분을 확인해보면 id와 pw를 확인할 수 있을 것이다. 'POST'는 한개가 아니라 여러 개가 존재하는 데 전부 찾아봐서 로그인을 진행했다.

('POST'에서 ID, PW 발견)

 

 

'POST' 값에 있는 id와 pw를 이용해서 로그인을 하면 키값을 얻을 수 있다. 로그인을 성공하면 아래와 같은 팝업창을 볼 수 있었다.

(키값 발견!)

 

 

이제 찾은 키 값을 넣으면 축하한다는 팝업창과 함께 문제가 풀리는 것을 확인 할 수 있다.

(문제 해결!)

 

 

오늘도 점수가 올라가는 것을 볼 수 있다!

(점수 획득!)

 

 

 

 

 

*해당 블로그는 개인적인 공부와 정보 공유를 위해 만들었습니다.

[SuNiNaTaS(써니나타스)] 3번 문제 풀이


오늘은 어제에 이어서 연속으로 3번 문제를 풀려고 한다. 

(문제 목록)

 

 

3번 문제를 들어가면 아래의 화면처럼 보인다. "Write articles in Notice Board!"라고 써 있을 뿐, 그 외에는 아무것도 존재하지 않는다. 영어를 해석해보자면, Notice Board에 articles(기사, 글)을 작성하라고 한다. 단순히 이것만 보았을 때, 이해가 잘 가지 않았다.

(3번 문제)

 

그래서 나는 페이지 소스코드를 한번 확인해보기로 했다. 숨겨져있는 코드들도 전부 확인해보았지만, 얻을 수 있는 것이 없었다. 그래서 첫 화면에서 Notice Board에 글을 작성하라는 문구 그대로 써니나타스 메인화면으로 이동했다.

(페이지 소스코드)

 

 

메인화면에서 'NOTICE' 메뉴에 들어갔다. 'NOTCIE' 페이지에는 글을 작성할 수 있는 버튼이나 방법이 존재하지 않았다. 3번문제에서 분명 NOTICE에 글을 작성하라고 했는 데....

(Notice 메뉴)

 

 

그래서 다른 메뉴도 들어가서 글을 작성할 수 있는지 확인해보았다. 'FREE'라는 메뉴에 들어가니 'Write'라는 글을 작성할 수 있는 버튼이 있었다.

(FREE 메뉴)

 

 

해당 버튼을 누르니 'FREE WRITE'라는 새로운 페이지로 넘어갔고, 이때 중요한 것은 URL이 "suninatas.com/board/free/write"라는 것이다. 이것을 NOTICE에 그대로 가져와서 사용하려고 한다.

(FREE WRITE 화면)

 

 

바로 아래의 화면처럼 말이다. 아까전에 봤던 'FREE'의 WRITE URL처럼 'NOTICE'도 기존 NOTICE URL 뒤에 '/write'을 적으면 "NOTICE WRITE"라는 게시물을 작성할 수 있는 페이지로 이동한다.

(NOTICE WRITE 화면)

 

 

이동한 페이지에서 'TITLE'과 'CONTENT'에 아무 글자나 넣고 'SUBMIT'을 눌러 제출하면 끝이다!

(SUBMIT!)

 

 

글을 작성하게 되면 아래의 팝업창처럼 키값을 구할 수 있다.

(키값 발견!)

 

 

해당 키값을 들고 정답을 제출하면 아래처럼 축하 문구 팝업창을 볼 수 있다!

(문제 해결!)

 

 

물론 점수도 향상되었다!!

(점수 획득!)

 

 

 

 

 

*해당 블로그는 개인적인 공부와 정보 공유를 위해 만들었습니다.

[SuNiNaTaS(써니나타스)] 2번 문제 풀이


오늘은 2번 문제를 풀었다. 사실 9번을 풀려고 했으나, 2번과 3번을 빼놓고 문제를 풀면 빈 공간이 생기는 찝찝함 때문에 2번을 풀게 되었다.

(문제 목록)

 

 

2번 문제를 들어가면 아래와 같은 화면을 보게 된다. 'ID'와 'PW'를 입력해서 'Join' 버튼을 누르는 것 같다. 이 화면만 보기엔 아무것도 얻을 수 없기에 페이지 소스코드를 확인해 봤다.

(2번 문제)

 

 

'F12'를 눌러서 소스코드를 확인해 보니, 힌트가 바로 보였다.

Hint : Join / id = pw

힌트를 보면 id와 pw가 같다고 한다. 그래서 한번 같은 값을 넣어봤다.

(힌트!)

 

 

'ID'와 'PW' 값에 동일한 값 1 을 넣어봤는데 아래와 같은 팝업창이 보였다. 내가 무엇을 놓치고 있는 것 같았다. 그래서 다시 페이지 소스코드를 들어가서 놓치고 있는 부분을 다시 확인해봤다.

(잘못된 접근 방법)

 

 

스크립트를 확인해보니 'chk_form()'이라는 함수가 있었다. 해당 소스를 해석해보면 id와 pw이 같은 값일 시 아까 팝업창으로 보았던 "You can't join! Try again" 문구가 출력될 것이고, 다른 값일 시 문제가 풀리는 것이다.

(chk_form 함수)

 

 

아까 힌트에서는 id와 pw 값이 같을 경우라고 했고, 스크립트에선 다를경우 문제가 풀린다고 했다. 그러면 우회하는 방법을 통해서 문제를 풀어야 한다. 나는 'F12'에 있는 'Console' 기능을 이용했다.

우선 'ID'와 'PW' 값에 동일한 숫자(1)를 넣고 'Console'창에 "document.web02.submit()"을 입력한 다음 엔터를 눌렀다.

1. ID와 PW에 동일한 값을 입력

2. Console 창에 "document.web02.submit()" 입력

3. 엔터(Enter)

(문제 풀이)

 

 

해당 방법으로 키값을 쉽게 구할 수 있었다.

(키 값 획득!)

 

 

곧바로 키값을 입력하니 아래와 같은 팝업창으로 축하해주었다.

(문제 해결!)

 

 

점수 획득! 점수가 올라가는 것을 보니 뿌듯함도 밀려온다!

(점수 획득!)

 

 

 

 

 

*해당 블로그는 개인적인 공부와 정보 공유를 위해 만들었습니다.

[SuNiNaTaS(써니나타스)] 8번 문제 풀이


오늘 문제는 8번 문제를 풀었는 데, 많은 고생이 있었다.

(문제 목록)

 

 

8번 문제를 들어가면 아래의 화면처럼 ID와 PW를 입력하라는 창이 존재한다. 정말 8번 문제 화면에는 이것만 존재해서 바로 페이지 소스코드를 확이해봤다.

(8번 문제)

 

 

페이지 소스코드를 확인해보면 힌트가 나와 있다.

"Hint : Login 'admin' Password in 0~9999"

ID가 'admin'이고 PW가 0부터 9999 중 하나인 것 같았다.

(힌트)

 

 

ID 창에 'admin'을 PW 창에 0부터 9999까지 손으로 입력하기가 힘들어서 'Burp Suite(버프 스위트)' 툴을 이용하기로 했다.

'Burp Suite(버프 스위트)' 설치 및 설정 방법은 아래의 링크를 참고하면 된다.

https://200301.tistory.com/7

 

[Burp Suite (버프스위트)] 설치 및 설정 방법

[Burp Suite] 설치 방법 오늘은 어제 "Suninatas(써니나타스) 4번 문제"에서 사용했던 [Burp Suite]에 대한 설치 방법에 대해 설명하고자 합니다. 아래의 링크는 어제 내가 풀었던 링크를 걸어놨습니다. https://2..

200301.tistory.com

 

 

처음에 ID에 'admin'을 PW에 '1'을 집어넣고 버프스위트를 실행시킨다. 그 다음 아래의 화면처럼 우측클릭 후 'Send to Intruder'을 선택한다.

(PW을 0 부터 시작 안한 이유가 처음에 0을 집어 넣었을 때, 값이 아니라고 했기 때문이다.) 

 

 

그 다음 "Intruder" 창에 들어오면 "Payloads" 부분에 들어온다. 거기서 Payload type 에서 "Numbers"로 바꾸고, Payload Options에서 From, To, Step 부분을 설정해준다.

From : 처음 숫자

To : 마지막 숫자

Step : 몇개씩 숫자를 증가 시킬 것인가?

(설정!)

 

 

그 다음 "Positions"으로 돌아와서 'Start attack'을 눌르면 된다. 여기서 주의해야 할 점은 ∮(이거..? 비슷한걸 못찾았네...)을 지워야한다는 것이다. PW의 값만 제외하고!

 

 

그러면 버프 스위트가 자동으로 값을 1씩 증가시키면서 PW에 대입하는 것을 볼 수 있다.

 

 

이렇게 0부터 9999까지 자동으로 넣어주고 나서 Request와 Response를 확인해보면 정답을 찾을 수 있다. "Response"에 "Raw"를 들어가면 대부분 'Password Incoorrect' 출력되지만, 정답일 경우 'Authkey'값이 출력된다.

이 과정이 정말 많은 시간을 요구했다.... 좀 더 편한 방법을 찾아봐야 할 것 같다.

(정답확인)

 

 

Authkey값을 그대로 넣어주면 문제가 해결된다.

(문제 해결!)
(점수 획득!)

 

 

 

 

 

*해당 블로그는 개인적인 공부와 정보 공유를 위해 만들었습니다.

 

[SuNiNaTaS(써니나타스)] 7번 문제 풀이


오늘(3.13)은 어제 6번 문제에 이어서 7번 문제를 풀기로 했다. 하얀색 바탕이 파란색 바탕으로 바뀌는 것을 보니 기분이 좋았다. 하나씩 채워가는 모습을 보면서 이런 맛에 문제를 푸는 것 같다.

(문제 목록)

 

 

7번 문제를 클릭하게 되면 아래의 사진처럼 처음에는 아이유 사진이 나온다. 아이유 사진 위에는 'Do U Like girls?'라는 문구와 함께 스크롤을 내리다보면 끝부분에서는 윤아 사진을 볼 수 있다. 맨 처음에 문구는 단순히 물어보는 문구인 것 같다. 해당 박스에 난수 값을 입력해도 아무일도 일어나지 않았기 때문이다.

(처음에 아이유 사진이 엄청 크게 나와서 놀랐다......)

(7번 문제)

 

 

그리고 아이유와 윤아 사진 중간에 'YES' 입력 버튼 하나가 덩그러니 있었다. 

(뭘까...?)

('YES' 입력 화면)

 

 

저렇게 덩그러니 있는 것들은 한번 눌러보고 싶은 욕구가 생기기 마련이다. 그래서 바로 클릭해봤더니 아래와 같은 팝업창이 떴다.

('YES'버튼을 누른 후 팝업창)

 

 

'실패... 내가 너무 느리다'라고 한다.... 이제 해당 페이지에서는 아무것도 발견할 수 없어서 html 소스코드를 확인해보기로 했다. 들어가자마자 힌트가 있었다.

'Faster and Faster'

힌트는 빠르게 하라는 데 어떤걸 빠르게 하는지 감이 안잡혔다. 그래서 소스코드 안에 숨겨져 있는 것을 자세히 확인해보기로 했다.

(힌트!)

 

 

<head>부분을 확인해보니 스크립트를 발견했다. 이벤트 부분인 것 같았다.

(이벤트 : 사용자가 어떤 행동을 취했을 때, 그로 인해서 변화가 이루어지는 것을 말한다. 여기서 행동은 "사용자가 클릭했을 때", "스크롤을 내렸을 때" 등을 의미한다.)

(스크립트)

 

 

소스코드 해석


        function noEvent() { // noEvent라는 함수
        
            if (event.keyCode == 116 || event.keyCode == 9) { // keyCode가 116,9일때 실행한다.
            
                alert('No!');	// 'No!'을 출력한다.
                
                return false;	// false 값을 반환한다.
            }
            
            else if (event.ctrlKey && (event.keyCode = 78 || event.keyCode == 82)) {
            			// Ctrl을 누르면서 keyCode 값이 78이거나 82일때 실행한다.
            
                return false;	// false 값을 반환한다.
                
            }
            
        }
        document.onkeydown = noEvent;	// 행동을 했을 때 noEvent 함수가 실행된다.
    

 

더 자세히 설명하자면

event.keyCode


해당 함수는 Javascript로 사용자의 키 입력을 감지하는 함수입니다. 아래 표는 event.keyCode 모음을 나타낸 것이다.

(출처:  https://fruitdev.tistory.com/144 )

 

 

즉, 해당 소스코드

event.keyCode == 116 || event.keyCode == 9

116은 'F5', 9는 'tab'으로 7번 문제 페이지에서 'F5'와 'tab'을 입력시 'No!' 팝업창이 출력되고 false 값을 반환하는 것이다.

 

또,

event.ctrlKey && (event.keyCode == 78 || event.keyCode == 82)

78은 'n', 82는 'r', ctrlKey는 'Ctrl키를 누르는 것'으로 결국 'Ctrl'을 누르면서 'n'키나 'r'을 누르면 false 값을 반환하는 것이다.

 

 

event.ctrlCode


해당 함수는 이벤트 발생시 어떤 키를 눌러야 되는지 알 수 있는 함수이다.

속성 개요
ctrlKey Ctrl 키를 눌렀는 가
altKey Alt 키를 눌렀는 가
shiftKey Shift 키를 눌렀는 가
which 키 코드의 종류

 

 

 

다시 문제풀이로 돌아와서 'F5'랑 'Tab'키를 눌렀을 때, 아래의 화면처럼 'No!'라는 팝업창이 뜨게 된다.

 

 

 

여기서 우리가 유추할 수 있어야 하는 것은 아까 중간에 봤던 'YES'버튼을 빠르게 눌러야지 문제가 해결 되는 것 같았다. 왜냐하면 스크립트 외에도 소스코드에서 힌트가 더 있었기 때문이다.

 

아래의 화면처럼 form 형식의 소스코드를 확인할 수 있었다. 소스코드를 간략하게 설명해보자면

해당 form의 이름은 'frm'으로 'post'방식으로 'YES'에서 submit 하게 된다면 './web07_1.asp' 페이지로 넘어가는 것이다.

(form 소스코드)

 

 

좀 더 자세히 설명을 하자면 일단 오른쪽 'YES' 코드는 

<input type = "submit" value = "YES">

입력받은 데이터를 서버에 전송하기 위한 'submit'란 type을 사용한 것인데, 이때 입력할 수 있는 버튼이 자동으로 생기게 된다. 이때 버튼 안의 값을 'YES'라고 넣은 것이다.

 

즉, 

1. 서버에 데이터를 전송할 수 있는 버튼(submit)이 생성

2. 버튼 안에 값을 'YES'로 지정

3. 이따가 설명할 <form> 태그 안에 입력된 'action' 속성으로 지정한 서버로 데이터가 전송!

 

 

이제 왼쪽 코드

<form method = "post" action = "./web07_1.asp" name = "frm">

- form 데이터를 "post" 방식으로 전송하는 것이다. 다시말해 form 데이터를 HTTP POST 메소드로 전송하는 것이다.

- action은 데이터를 받을 때 전송하는 서버를 적어 놓은 것이다.

- name은 form의 이름을 "frm"으로 지정하겠다는 말이다.

 

 

그러면 문제를 풀기 위해서 해야하는 작업은 재빠르게 'YES' 버튼을 눌러야 하는 것인데, 아까 내가 직접 'YES'버튼을 눌렀을 때는 실패라고 팝업창이 떴다. 그렇기에 'F12'에서 'Console'을 이용하기로 했다. 

아래의 화면처럼 "frm.submit()"을 입력하게 계속 엔터를 눌렀다.

(직접 새로고침하기)

 

 

반복적으로 엔터를 눌러주니 축하한다는 팝업창과 함께 키값이 나왔다.

(성공!)

 

 

키값을 복사해서 AUTH 창에 넣어주니 문제가 풀렸음을 알려줬다.

(문제 해결!)

 

물론 점수도 올라갔다.

(점수 획득!)

 

 

 

[잘못된 풀이]


form에서 web07_1.asp 서버로 데이터가 옮겨지는 것이니깐 콘솔을 이용해서 문제를 푸는 것이 아닌 바로 그 서버로 옮기게끔 입력을 했다. 아래의 화면처럼 도메인 주소창에 "/web07_1.asp"을 입력해서 넘어가게끔 했다.

 

 

 

결과는 아래의 화면과 같았다.

 

 

 

 

 

 

 

*해당 블로그는 개인적인 공부와 정보 공유를 위해 만들었습니다.

[SuNiNaTaS(써니나타스)] 6번 문제


오늘은 어제에 이어서 6번문제를 풀었다. WEB 문제이기도 하고 연속으로 문제를 풀고 싶은 마음에 6번을 풀었다.

(문제 목록)

 

 

6번 문제를 들어가보면 아래의 사진과 같다. 처음 문제를 봤을 때, 잘못들어온줄 알았다. 다른 웹사이트에 접속한 줄 알았지만, 게시물 목록을 보니 문제인 것을 알 수 있었다.

(6번 문제)

 

 

1번 게시물부터 5번 게시물까지 하나하나 들어가봤다.

 

첫번째 게시물은 아래와 같다.

영어를 해석하면 '써니나타스의 글을 읽어라' 이것이 힌트라고 하는데 감이 잡히질 않았다.

(1번 'Hint')

 

 

두번째 게시물은 'md5로 바꿔주는 사이트'이다. 나중에 문제를 풀때 필요한것인가보다.

(2번 'reference!')

https://md5hashing.net/

 

MD5Hashing

Ultimate Hashing and Anonymity toolkit

md5hashing.net

(MD5Hashing 사이트)

 

 

세번째 게시물은 다른 웹 페이지로 넘어가는 것이 아니라 password를 입력하라는 창이 떴다. 밑에 문장은 SQL구문으로 해석하면 이렇다.

Select szPwd from T_Web13 where nld = '3' and szPwd = '"&pwd&"'

T_Web13 테이블에서 컬럼 nld의 값이 3이면서 컬럼 szPwd의 값이 &pwd&szPwd의 이름으로 컬럼을 찾는 것이다.

아마도 'SQL Injection'문제로 password에 참 값을 넣는 것 같다. 그래서 여기서 패스워드를 입력해야 문제가 풀릴 것 같은데, 일단 다른 게시물에 힌트가 있는 지 확인해보기로 했다.

(3번 'README')

 

 

네번째와 다섯번째 게시글은 문제를 풀기에 도움이 되는 않는, 단순히 만들어 놓은 것들로 보여서 이건 넘어갔다.

(4번 5번 게시글)

 

 

전체적인 게시글을 보았는 데, 세번째 'README'를 풀어야 문제를 푸는 데 진행이 될 것 같다.

이 문제는 'SQL Injection'로 풀어야 하는데, 가장 많이 사용이 되는 "1 'or' 1 '=' 1" 을 대입해 봤다. 대입해본 결과 "NO! hacking!" 이라는 구문이 팝업창으로 나타났다. 쿼리문이 전달되지 않았던 것 같습니다.

(가장 많이 사용하는 구문 입력 시 화면)

 

 

그래서 연산자(=)를 바꿔보았습니다. '='과 비슷한 기능을 할 수 있는 'like'로 바꿔서 SQL문을 넣어보니 쿼리문이 성공을 했습니다. 그래서 팝업창에 'suninatastopofworld!' 라는 단어와 함께 글을 읽을 수 있었습니다.

(쿼리문 해결!)

 

 

세번째 게시글의 진짜 모습은 아래의 사진과 같습니다. 'README' 게시글을 보니 키를 찾으라고 합니다. 그래서 'F12' 버튼을 눌러서 소스코드를 확인했습니다. 

(진짜 'README' 게시글)

 

 

소스코드를 확인해보니 'KET_HINT'라는 이름 옆에 'Rome's First Emperor'가 있었습니다.

(힌트 발견)

 

 

바로 구글에다가 'Rome's First Emperor'을 검색하니 아래와 같은 결과가 발견됐습니다. 

(Rome's First Emperor)

 

 

그래서 Auth 키 값에 이름을 넣으니 문제가 풀렸습니다.

(문제 해결!)

 

점수도 올랐구요!

(점수 획득!)

 

 

 

[잘못 접근한 풀이]


사실 진짜 세번째 게시글을 발견했을 때, 키 값이 'suninatastopofworld!'라고 해서 이걸 이용해서 문제를 푸는 줄 알았습니다. 그래서 쿠키값에 해당 글자를 넣었습니다. 하지만 접근권한이 없다는 것으로 나왔습니다.

(쿠키에 값을 넣은 화면)

 

 

그래서 이번에는 두번째 게시글에서 'reference!'에 있는 MD5Hashing을 이용했습니다. 'suninatastopofworld!' 문자를 MD5 변환을 이용해서 쿠키 값에 넣었는 데, 아무련 변화가 없었습니다....

(MD5Hashing)

 

 

 

 

*해당 블로그는 개인적인 공부와 정보 공유를 위해 만들었습니다.

[SuNiNaTaS(써니나타스)] 5번 문제


오늘은 'Suninatas(써니나타스)' 문제를 풀기로 했다. 매번 100점 문제들만 풀다 보니 실력이 늘지 않는 것 같아서, 오늘은 4번 옆에 있는 301 point 5번 문제를 풀기로 했다. 1번부터 5번까지 보면 4번까지는 100점대인데 5번만 300점대이다. 처음에는 살짝 겁이 났지만 그래도 할 수 있을 거라 생각했다.

(문제 목록)

 

 

5번 문제를 들어가면 아래의 사진처럼 'Check key Value' 라고만 나와있었다. 문제를 처음 접했을 때 생각은 네모 박스 안에 올바른 key 값을 넣으면 되는 것 같았다. 그럼 이제 키값을 넣어야 하는데 화면에는 아무것도 없으니 'F12'을 눌러 화면 자체의 코드를 확인해보았다.

(5번 문제)

 

 

소스코드를 확인해보니(아래의 사진) 힌트로 숫자 '12342046413275659'가 보였다. 이것을 이용해서 문제를 해결하는 것 같다.

(사실 이 값을 그대로 네모박스에 넣어봤다.... 힌트라고 그래서.... 하지만 아무 일도 일어나지 않았다ㅜㅜ)

(힌트~)

 

 

주석으로 힌트처리된 거 말고 제대로 된 소스코드를 확인해보고자 숨겨져 있는 코드들을 확인하기 시작했다. 그랬더니 아래의 사진처럼 복잡해 보이는 스크립트가 존재했다. 이것을 보고 해석하려고 했지만 실력이 없어서 무슨 소리인지 한참을 들여다보았다.

(스크립트 소스코드)

 

 

한참을 봐도 무슨 소리인지 몰라서 머리가 지끈거릴 때, 아래에 'Authkey'값에서 힌트를 얻었다. 'Unpacking JavaScript'라는 힌트를 통해 해당 소스코드가 'Packing'되어 있다는 걸 깨닫고 문제를 풀었다.

(Unpacking JavaScript)

 

 

해당 스크립트가 'Packing' 되어 있으니 'Unpacking'을 시도해줘야 한다. 나는 그래서 대신 'Unpacking' 해주는 사이트를 이용하기로 했다. 아래 사이트가 대신해주는 사이트이다.

https://www.strictly-software.com/unpacker#unpacker

 

Unpack Javascript - Strictly Software

// Create a get elements by class name function document.getElementsByClassName = function(clsName){ var retVal = new Array(); var elements = document.getElementsByTagName("*"); for(var i = 0;i < elements.length;i++){ if(elements[i].className.indexOf(" ")

www.strictly-software.com

 

 

스크립트에 있는 소스코드를 긁어와서 'Unpack'을 눌러주면 숨겨져 있는 소스코드를 확인할 수 있다.

('Unpakcing' 하는법)

 

'Unpacking'한 소스코드는 아래와 같다. PASS함수를 이용하라고 하는데, 5번 문제 소스코드에서는 PASS함수가 보이지 않았다. 그러면 PASS함수 안에 힌트 값을 넣으면 문제가 풀리지 않을까 생각했다.

var digitArray = new Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f');
function PASS(n) {
	var result = '';
	var start = true;
	for (var i = 32; i > 0;) {
		i -= 4;
		var digit = (n >> i) & 0xf;
		if (!start || digit != 0) {
			start = false;
			result += digitArray[digit]
		}
	}
	return (result == '' ? '0': result)
}

 

 

그래서 'F12'을 눌러서 'Console'창에 들어갔다. 그다음에 내가 임의로 값을 만들어서 "PASS(12342046413275659)" 입력했다. 출력 값으로 난수 값이 출력되었고, 이 값을 그대로 네모 박스 안에 넣었다.

(PASS 안에 값 넣은 화면)

 

전체적으로 보면 아래의 사진과 같이 되는데, 난수 값을 넣어주면 'Authkey'값이 출력되는 것을 확인할 수 있다.

(키값 입력 화면)

 

 

나온 Auth 값을 메인 화면에 넣어주면 아래와 같이 점수가 올라가는 것을 확인 할 수 있다!

(점수 향상!)

 

 

 

[문제 해결]


이번 문제는 5번 문제를 풀면서 어려울 줄 알았다. 사실 'Unpacking JavaScript'가 아니었으면 문제 접근을 하기 힘들었을 것이다. 다행히 넓게 봐서 문제를 풀 수 있었던 것 같았다.

그리고 언패킹에 관해서 살짝 언급되어서 이 부분에 대해서 공부가 아주 조금 된 것 같기도 하다.

또 콘솔 창에서 작업을 이번이 처음인데 아직 많이 어색하다. 좀 더 익숙해질 수 있도록 연습해야겠다.

 

 

 

 

 

*해당 블로그는 개인적인 공부와 정보 공유를 위해 만들었습니다.

+ Recent posts