[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