생각보다 서니나타스를 푸는 사람이 없는 것 같다. 라이트업도 없는 것 같고.

그래서 써봄.


28번 라이트업이 맘에 드는 게 없어서 고통 받다가 라이트업 써야겠다는 생각이 듬.


서론은 이것으로 마침.



문제 화면


위는 해당 페이지의 서버 사이드 스크럽트 코드를 보여준 것이다.

result의 값이 "admin"이 되도록 적절한 입력값을 입력하면, 문제는 풀리게 된다.


우리는 이 코드가 어떻게 동작하는 지 이해해야 한다.

방법은 두 가지다. 게싱 또는 코드 분석.

코드를 분석하여 푸는 방법을 소개하겠다.




코드를 분석하려면, 먼저 무슨 언어인지 알아야한다.

이미 이 언어를 사용해본 사람은 이 언어가 ASP라는 것을 알 수 있을 것이고

그렇지 않은 사람은 검색을 하거나 해당 페이지의 확장자를 보는 것이다.

서니나타스는 디렉토리 리스트를 숨겨놨다. 하지만, 우리는 이를 어렵지 않게 우회할 수 있다.




서니나타스 사이트의 아무데서나 빈 곳에 우클릭으로 페이지 소스보기를 클릭하면

메인 페이지의 경로를 확인할 수 있다. 크롬 기준 해당 링크를 클릭하면 이후부터는 디렉토리 리스트가 그대로 보인다.

1번 문제 페이지는 http://suninatas.com/Part_one/web01/web01.asp이다. 확장명을 통해 asp임을 우리는 확신할 수 있다.


굳이 asp임을 몰라도 php 등을 다뤄봤다면, 혹은 검색을 잘 했다면 replace, mid 함수의 기능을 알고 있을 것이다.

replace는 말그대로 치환하는 함수이고, mid 함수는 문자열의 일부를 자르는 함수이다.



Mid 함수의 결과는 첫 번째 글자의 인덱스를 1로 하여 "2번쨰 글자부터 길이 2만큼" 자른 것이다.

마지막으로 & 연산자는 asp에서 문자열을 합치는(연결하는) 연산자이다.

즉, 이 함수의 결과가 "admin"이 되도록 적절한 입력값을 주면 성공이다.


고로 이 문제의 정답은...

"ami"이다.

"ami"는 Replace 함수 처리 후 "aadmin"이 된다.

result1은 Mid 함수 처리 후 "ad"가 되고

result2는 Mid 함수 처리 후 "min"이 되어

result에는 둘을 이은 "admin"이 되어 문제가 클리어된다.


함수와 연산자가 어떻게 동작하는 지만 잘 알아낸다면 쉽게 클리어 할 수 있는 문제였다.




'Wargame Writeup > SuNiTaTaS' 카테고리의 다른 글

[SuNiNaTaS] 6번 문제  (4) 2015.11.05
[SuNiNaTaS] 5번 문제  (5) 2015.11.05
[SuNiNaTaS] 4번 문제  (0) 2015.11.04
[SuNiNaTaS] 3번 문제  (0) 2015.11.04
[SuNiNaTaS] 2번 문제  (0) 2015.11.04

WRITTEN BY
hojongs
블로그 옮겼습니다 https://hojongs.github.io/