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

오늘은 'Suninatas(써니나타스)'에서 4번 문제를 풀기로 했다. 2번과 3번은 아직 공부가 부족해서 어떤식으로 접근을 해야하는 지 몰라서 나중에 풀기로 했다.

(문제 목록)

 

 

4번 문제를 들어가 보면 아래의 화면 처럼 'point', 'Plus' 버튼, 'User-Agent', 'Auth key' 이렇게 보였다. 일단 네모 박스에 있는 것들을 제외하고 'User-Agent'는 사용자의 환경을 말하는 것 같다. 그리고 '?????' 되어있는 것을 내가 알아내야 하는 문제인 것 같다.

(4번 문제)

 

 

'User-Agent'가 정말 내 환경인지 궁금해서 크롬 우측 상단에 설정 창에 들어가 보았다. 들어가서 보니 문제에서 보았던 'Chrome/80.0.3987.132'는 사용자의 환경을 뜻하는 것이었다. 즉 문제를 푸는 사용자들의 환경을 확인해보라는 뜻인 것 같았다.

(Chrome 정보)

 

 

그러면 'Point'와 'Plus'는 무엇일까?

 

나의 고민은 해당 페이지 소스코드의 힌트를 보고나서 무엇인지 알 수 있었다. 아래의 화면은 해당 페이지 소스코드로서 주석처리가 된 곳을 볼 수 있다. 힌트에서는 'Point'가 50으로 만들면 문제가 해결되는 것 같았다.

(4번 문제 소스코드)

 

 

그래서 나는 바로 'Plus'를 눌러서 'Point'를 50으로 만들려고 했다. 하지만 'Point'는 25까지밖에 올라가지 않았다.

('Plus'가 25이상으로 올라가지 않는다.)

 

(25이상일때 뜨는 팝업창)

 

 

아무래도 서버와 클라이언트 통신을 주고받을 때 전달되는 패킷을 조작해야 될 것 같다. 그래서 나는 'Burp Suite(버프 스위트)'라는 툴을 이용해서 패킷을 조작하기로 했다.

(버프 스위트를 사용할 때 악의적인 목적을 가지고 사용시에는 문제가 발생할 수 있으니, 문제풀이 등 합법적인 용도에만 사용하여야 한다.)

 

 

아래의 화면은 'Burp Suite'를 키고 나서 문제 화면에서 'Plus'를 누른 뒤 캡처한 화면이다. 그 다음 오른쪽 클릭 한 후 'Sned to Repeater'를 누른다.

('Plus'를 누른 뒤 'Burp Suite'가 캡처한 화면)

 

 

'Send to Repeater'를 클릭한 후 'Repeater' 화면으로 넘어가면 아래와 같다.

('Repeater' 화면)

 

 

여기서 'User-Agent'를 'SuNiNaTaS'로 변환한 뒤 'Send' 버튼을 25번을 누른다. 정확히 25번을 눌러야 'Point' 값이 50이 된다.

('User-Agent' 설정 화면)

 

 

그러면 문제 화면에서 'Point' 값이 25에서 50으로 바뀐것을 확인할 수 있다. 정확하게 50이 되면 문제가 풀렸다는 팝업창이 뜨게 된다.

(문제 해결 팝업창)

 

 

키값 또한 문제화면에서 '?????' 대신 나타나게 될 것이다. 키값을 그대로 제출하면 포인트가 올라가 있다.

(포인트 획득!)

 

 

 

[느낀점]

프록시 서버를 처음 만져본 오늘 어떤식으로 작동되는 지 혼란이 많이 왔다. 다음에는 좀 더 정확하게 이해해서 문제에 접근을 해야겠다. 그리고 프록시 서버 뿐만 아니라 값을 올릴 때에도 문제였다. 처음에 단순히 'Send'만 보내면 해결될 줄 알았지만, 아무런 변화가 이루어지지 않았다. 왜냐하면 'User-Agent'값을 바꾸지 않았기 때문이다. 값을 바꾸고 나니 문제가 금방 풀렸다.

 

이번 문제를 풀면서 'Burp Suite'의 사용법에 대해 조금이나마 익힐 수 있는 시간이어서 너무 감사했다. 사실 이런 툴을 직접 이용해서 실전에 사용하기에는 많은 위험과 문제들이 동반된다. 하지만 이번 문제를 통해서 조금이나마 툴에 대한 사용법을 익힐 수 있어서 좋았다. 또한 나에게 부족한 부분이 무엇인지 확실하게 알아가는 시간이었다.

 

 

 

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

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

오늘은 [Webhacking] 문제가 아닌 "Suninatas(써니나타스)"라는 워게임에서 문제를 풀었다.

아래의 화면처럼 1번부터 문제가 쭉 나열되어있었고, 문제를 해결할 시 나처럼 바탕색이 파란색으로 바뀐다. 문제를 못 풀었으면 1번을 제외한 나머지 화면처럼 바탕색이 흰색이다.

(Suninatas 문제 목록)

 

 

1번 문제는 100point 문제로 옆에 'PASS'는 지금까지 푼 사람인 것 같다. (4298명인 것 같은데, 많은 사람이 풀었다. 쉬운 문제일 것 같지만 어제처럼 방심하지 않고 정신 차리고 문제를 풀었다.)

 

1번 문제는 아래의 화면처럼 소스코드가 주어져있었다. 그 외에 기능들은 'main', 'Back', 'Check' 이렇게 3가지가 있다. 

(1번 문제)

 

각각 클릭하게 된다면 

'main' 은 "Suninatas(써니나타스)"의 메인 화면으로 이동하는 것이다.

'Back'은 이전 화면으로 이동하는 것이다.

'Check'은 답을 제출하때 사용되는 것이다.

 

 

문제를 해결하려면 소스코드의 이해부터 필요하다.


(아직 정확하게 모르기 때문에 설명에서 잘못된 부분이 있으면 알려주세요!)

Request 값을 받아오는 함수
Replace 값의 문자를 바꿔주는 함수
Mid 원하는 부분의 값을 가져오는 함수
& 두 값을 합치는 함수

 

더 부연설명을 하자면


Replace(abcd, "a" , "fg") 라고 하면

adcd에서 a를 fg로 치환하는 것이다.

그러면 해당 값의 출력은 "fgdcd" 가 출력되는 것이다.

 


Mid(abcd, 2, 2) 라고 하면

a가 1번, b가 2번, c가 3번, d가 4번이다.

그러면 2번째부터 2개만 가져와서 출력하는 것이기 때문에

해당 값의 출력은 "bc" 가 출력되는 것이다.

 


a = 노랭이

b = 라바

result = a & b 일 경우

result 값은 a와 b의 문자열이 합쳐진 "노랑이 라바"가 출력되는 것이다.

 

 

그러면 해당 1번 문제의 소스코드를 분석하면 아래와 같다.


str = Request("str") // 문자열을 받아서 'str'에 값을 집어넣는다.

If not str = "" Then // 받아온 문자열(str)이 아무것도 없으면 실행하지 않는다.

    result = Replace(str, "a", "aad") // 받아온 문자열(str)에서 "a" 문자를 "aad"로 바꿔준 다음 'result'에 값을 넣어준다.

    result = Replace(result, "i", "in") // 받아온 문자열(result)에서 "i" 문자를 "in"로 바꿔준 다음 'result'에 다시 넣어준다.

    result1 = Mid(result, 2, 2) // 받아온 문자열(result)에서 2번째부터 2개를 반환해 'result1'에 값을 넣어준다.

    result2 = Mid(result, 4, 6) // 받아온 문자열(result)에서 4번째부터 2개를 반환해 'result2'에 값을 넣어준다.

    result = result1 & result2 // 'result1'과 'result2'의 문자를 합친다.

    Response.write result

    If result = "admin" Then // 'result' 값이 admin 일 경우 실행

         PW = "????????"       // PW 값 출력

    End if // if문 종료

End if // if문 종료

그러면 나는 'result' 값에 admin이 출력되도록 값을 만들어 주면 되는 것이다.

그래서 내가 선택한 방법은 처음에 admin 값을 넣어서 순서대로 코딩을 진행하고 나서 거꾸로 문제를 해결하기로 했다.

str 값이 admin일 경우

result -> aaddmin

result -> aaddminn

result1 -> ad

result2 -> dmi

result -> addmi

위와 같은 방법으로 진행했을 경우에는 출력 값이 admin이 아닌 addmi이 출력되었다. 그래서 나는 최종적으로 result 값이 admin이 나오도록 고민해 봤고, 결국 답을 얻어냈다.

 


str = ami

result -> aadmi

result -> aadmin

result1 -> ad

result2 -> min

result -> admin

str의 값으로 "ami"을 넣었을 때, result 값이 "admin" 출력되는 것을 알 수 있다.

 

ami 값을 넣으면 아래의 화면처럼 문제가 풀렸다고 팝업창이 뜨게 된다.

(문제 해결 팝업)

 

그리고 문제 밑에 'Authkey' 값이 출력되는 데 이 값을 드래그해서 답을 제출하면 점수를 획득할 수 있다.

 

처음에 문제를 풀고 나서 점수가 안 올라가 의문점이 들었는데, 아래의 화면에 'AUTH'를 클릭해서 들어가야 한다.

 

들어가게 된다면 방금 전에 드래그한 값을 여기다가 제출하면 점수가 올라갈 것이다. 처음에는 답을 입력만 하면 끝인 줄 알았는데 해당 코드를 제출까지 해야만 문제가 해결되는 것을 알 수 있었다.

(Authkey 값 제출해야하는 화면)
(코드값을 제출하면 뜨게 되는 팝업창)

 

 

문제를 풀고 나면 점수가 올라가는 것을 확인할 수 있다. 

()

 

 

[궁금증]

문제를 풀 다보다가 result 값이 똑같이 admin이 나왔지만 문제의 답이 되지 않았다.

str = amin

result -> aadmin

result -> aadminn

result 1-> ad

result 2 -> min

result -> admin

str 값이 amin을 넣었을 시 result 값이 admin이 나왔다. 하지만 답이 되지 않는 걸 보니, "첫 번째 Request 값에서 str이 세 글자이니 'ami'만 가능한 것 아닌가"라는 생각을 했다. 왜냐하면 'amin'은 네 글자이기 때문이다. 혹시 알고 있으신 분들은 알려주실 수 있으신가요?

 

 

 

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

+ Recent posts