[SuNiNaTaS(써니나타스)] 1번 문제
오늘은 [Webhacking] 문제가 아닌 "Suninatas(써니나타스)"라는 워게임에서 문제를 풀었다.
아래의 화면처럼 1번부터 문제가 쭉 나열되어있었고, 문제를 해결할 시 나처럼 바탕색이 파란색으로 바뀐다. 문제를 못 풀었으면 1번을 제외한 나머지 화면처럼 바탕색이 흰색이다.

1번 문제는 100point 문제로 옆에 'PASS'는 지금까지 푼 사람인 것 같다. (4298명인 것 같은데, 많은 사람이 풀었다. 쉬운 문제일 것 같지만 어제처럼 방심하지 않고 정신 차리고 문제를 풀었다.)
1번 문제는 아래의 화면처럼 소스코드가 주어져있었다. 그 외에 기능들은 'main', 'Back', 'Check' 이렇게 3가지가 있다.

각각 클릭하게 된다면
'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'를 클릭해서 들어가야 한다.

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


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

[궁금증]
문제를 풀 다보다가 result 값이 똑같이 admin이 나왔지만 문제의 답이 되지 않았다.
|
str = amin result -> aadmin result -> aadminn result 1-> ad result 2 -> min result -> admin |
str 값이 amin을 넣었을 시 result 값이 admin이 나왔다. 하지만 답이 되지 않는 걸 보니, "첫 번째 Request 값에서 str이 세 글자이니 'ami'만 가능한 것 아닌가"라는 생각을 했다. 왜냐하면 'amin'은 네 글자이기 때문이다. 혹시 알고 있으신 분들은 알려주실 수 있으신가요?
*해당 블로그는 개인적인 공부와 정보 공유를 위해 만들었습니다.
'공부 > Suninatas' 카테고리의 다른 글
| [SuNiNaTaS(써니나타스)] 8번 문제 풀이 (4) | 2020.03.14 |
|---|---|
| [SuNiNaTaS(써니나타스)] 7번 문제 풀이 (3) | 2020.03.13 |
| [SuNiNaTaS(써니나타스)] 6번 문제 풀이 (8) | 2020.03.12 |
| [SuNiNaTaS(써나나타스)] 5번 문제 풀이 (4) | 2020.03.11 |
| [SuNiNaTaS(써니나타스)] 4번 문제 풀이 (8) | 2020.03.06 |