오늘은 16번 문제를 풀어보았다. 어제 9번 문제를 풀려고 했으나, 나에게 많이 부족한 리버싱 문제였다. 그래서 공부를 한 다음에 문제를 풀 예정이다.
16번 문제를 들어가 보면 'Can you find the password for a member of SuNiNaTaS.com' 라는 문구가 존재한다. 써니나타스 회원의 패스워드를 찾으라는 말 같다. 그리고 바로 밑에 'Download'가 있었다. 그래서 바로 다운로드를 진행했다.
다운로드를 한 파일을 확인해보면 'pacp'파일로 나온다. 해당 파일은 packet capture로 패킷을 캡처한 파일이다.
그래서 나는 'WireShark(와이어샤크)'라는 툴을 이용해서 확인해보기로 했다. 해당 툴은 통신이 이루어진 패킷을 캡처해서 사용자가 쉽게 알 수 있게 해주는 도구이다. 밑에 화면은 와이어샤크를 실행한 화면이다.
와이어샤크에서 검색 기능이 있는데, 써니나타스의 비밀번호를 알아내기 위해서 http로 패킷을 주고받았을 가능성이 크다. 그래서 아래의 화면처럼 검색 기능에다가 http라고 입력했다.
protocol이 http인 것들만 모은 상태에서 'info'를 클릭하면 http기준에서 또다시 정렬이 이루어진다. 여기서 'POST' 부분만 확인을 진행할 것이다.
'POST' 부분을 확인해보면 id와 pw를 확인할 수 있을 것이다. 'POST'는 한개가 아니라 여러 개가 존재하는 데 전부 찾아봐서 로그인을 진행했다.
'POST' 값에 있는 id와 pw를 이용해서 로그인을 하면 키값을 얻을 수 있다. 로그인을 성공하면 아래와 같은 팝업창을 볼 수 있었다.
이제 찾은 키 값을 넣으면 축하한다는 팝업창과 함께 문제가 풀리는 것을 확인 할 수 있다.
3번 문제를 들어가면 아래의 화면처럼 보인다. "Write articles in Notice Board!"라고 써 있을 뿐, 그 외에는 아무것도 존재하지 않는다. 영어를 해석해보자면, Notice Board에 articles(기사, 글)을 작성하라고 한다. 단순히 이것만 보았을 때, 이해가 잘 가지 않았다.
그래서 나는 페이지 소스코드를 한번 확인해보기로 했다. 숨겨져있는 코드들도 전부 확인해보았지만, 얻을 수 있는 것이 없었다. 그래서 첫 화면에서 Notice Board에 글을 작성하라는 문구 그대로 써니나타스 메인화면으로 이동했다.
메인화면에서 'NOTICE' 메뉴에 들어갔다. 'NOTCIE' 페이지에는 글을 작성할 수 있는 버튼이나 방법이 존재하지 않았다. 3번문제에서 분명 NOTICE에 글을 작성하라고 했는 데....
그래서 다른 메뉴도 들어가서 글을 작성할 수 있는지 확인해보았다. 'FREE'라는 메뉴에 들어가니 'Write'라는 글을 작성할 수 있는 버튼이 있었다.
해당 버튼을 누르니 'FREE WRITE'라는 새로운 페이지로 넘어갔고, 이때 중요한 것은 URL이 "suninatas.com/board/free/write"라는 것이다. 이것을 NOTICE에 그대로 가져와서 사용하려고 한다.
바로 아래의 화면처럼 말이다. 아까전에 봤던 'FREE'의 WRITE URL처럼 'NOTICE'도 기존 NOTICE URL 뒤에 '/write'을 적으면 "NOTICE WRITE"라는 게시물을 작성할 수 있는 페이지로 이동한다.
이동한 페이지에서 'TITLE'과 'CONTENT'에 아무 글자나 넣고 'SUBMIT'을 눌러 제출하면 끝이다!
오늘(3.13)은 어제 6번 문제에 이어서 7번 문제를 풀기로 했다. 하얀색 바탕이 파란색 바탕으로 바뀌는 것을 보니 기분이 좋았다. 하나씩 채워가는 모습을 보면서 이런 맛에 문제를 푸는 것 같다.
7번 문제를 클릭하게 되면 아래의 사진처럼 처음에는 아이유 사진이 나온다. 아이유 사진 위에는 'Do U Like girls?'라는 문구와 함께 스크롤을 내리다보면 끝부분에서는 윤아 사진을 볼 수 있다. 맨 처음에 문구는 단순히 물어보는 문구인 것 같다. 해당 박스에 난수 값을 입력해도 아무일도 일어나지 않았기 때문이다.
(처음에 아이유 사진이 엄청 크게 나와서 놀랐다......)
그리고 아이유와 윤아 사진 중간에 '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 모음을 나타낸 것이다.
즉, 해당 소스코드
event.keyCode == 116 || event.keyCode == 9
116은 'F5', 9는 'tab'으로 7번 문제 페이지에서 'F5'와 'tab'을 입력시 'No!' 팝업창이 출력되고 false 값을 반환하는 것이다.
오늘은 'Suninatas(써니나타스)'에서 4번 문제를 풀기로 했다. 2번과 3번은 아직 공부가 부족해서 어떤식으로 접근을 해야하는 지 몰라서 나중에 풀기로 했다.
4번 문제를 들어가 보면 아래의 화면 처럼 'point', 'Plus' 버튼, 'User-Agent', 'Auth key' 이렇게 보였다. 일단 네모 박스에 있는 것들을 제외하고 'User-Agent'는 사용자의 환경을 말하는 것 같다. 그리고 '?????' 되어있는 것을 내가 알아내야 하는 문제인 것 같다.
'User-Agent'가 정말 내 환경인지 궁금해서 크롬 우측 상단에 설정 창에 들어가 보았다. 들어가서 보니 문제에서 보았던 'Chrome/80.0.3987.132'는 사용자의 환경을 뜻하는 것이었다. 즉 문제를 푸는 사용자들의 환경을 확인해보라는 뜻인 것 같았다.
그러면 'Point'와 'Plus'는 무엇일까?
나의 고민은 해당 페이지 소스코드의 힌트를 보고나서 무엇인지 알 수 있었다. 아래의 화면은 해당 페이지 소스코드로서 주석처리가 된 곳을 볼 수 있다. 힌트에서는 'Point'가 50으로 만들면 문제가 해결되는 것 같았다.
그래서 나는 바로 'Plus'를 눌러서 'Point'를 50으로 만들려고 했다. 하지만 'Point'는 25까지밖에 올라가지 않았다.
아무래도 서버와 클라이언트 통신을 주고받을 때 전달되는 패킷을 조작해야 될 것 같다. 그래서 나는 'Burp Suite(버프 스위트)'라는 툴을 이용해서 패킷을 조작하기로 했다.
(버프 스위트를 사용할 때 악의적인 목적을 가지고 사용시에는 문제가 발생할 수 있으니, 문제풀이 등 합법적인 용도에만 사용하여야 한다.)
아래의 화면은 'Burp Suite'를 키고 나서 문제 화면에서 'Plus'를 누른 뒤 캡처한 화면이다. 그 다음 오른쪽 클릭 한 후 'Sned to Repeater'를 누른다.
'Send to Repeater'를 클릭한 후 'Repeater' 화면으로 넘어가면 아래와 같다.
여기서 'User-Agent'를 'SuNiNaTaS'로 변환한 뒤 'Send' 버튼을 25번을 누른다. 정확히 25번을 눌러야 'Point' 값이 50이 된다.
그러면 문제 화면에서 'Point' 값이 25에서 50으로 바뀐것을 확인할 수 있다. 정확하게 50이 되면 문제가 풀렸다는 팝업창이 뜨게 된다.
키값 또한 문제화면에서 '?????' 대신 나타나게 될 것이다. 키값을 그대로 제출하면 포인트가 올라가 있다.
[느낀점]
프록시 서버를 처음 만져본 오늘 어떤식으로 작동되는 지 혼란이 많이 왔다. 다음에는 좀 더 정확하게 이해해서 문제에 접근을 해야겠다. 그리고 프록시 서버 뿐만 아니라 값을 올릴 때에도 문제였다. 처음에 단순히 'Send'만 보내면 해결될 줄 알았지만, 아무런 변화가 이루어지지 않았다. 왜냐하면 'User-Agent'값을 바꾸지 않았기 때문이다. 값을 바꾸고 나니 문제가 금방 풀렸다.
이번 문제를 풀면서 'Burp Suite'의 사용법에 대해 조금이나마 익힐 수 있는 시간이어서 너무 감사했다. 사실 이런 툴을 직접 이용해서 실전에 사용하기에는 많은 위험과 문제들이 동반된다. 하지만 이번 문제를 통해서 조금이나마 툴에 대한 사용법을 익힐 수 있어서 좋았다. 또한 나에게 부족한 부분이 무엇인지 확실하게 알아가는 시간이었다.