2024 SWLUG/Dreamhack

7주차_CTF/써니나타스 문제풀이 (2) - Game 01

un_plugged 2024. 5. 25. 23:48

▶문제

http://suninatas.com/challenge/web01/web01.asp

 

Game 01

<%    str = Request("str")    If not str = "" Then        result = Replace(str,"a","aad")        result = Replace(result,"i","in")        result1 = Mid(result,2,2)        result2 = Mid(result,4,6)  

suninatas.com

항상 드림핵만 풀다가 써니나타스라는걸 처음 접했다! 드림핵이랑 비슷하게 워게임을 제공하는 사이트라고 한다.

 

 

 

▶ 풀이

문제 사이트를 클릭하니 위와 같이 소스코드가 먼저 나왔다. 이것저것 보다가 상단에 "main"을 눌러봤더니 써니나타스 홈페이지로 연결되었다. "Check"를 눌러 답을 제출하면 되는 것 같다. pw에 ?라고 되어있는걸 봐서 pw 값을 구하는 문제인 것 같다. 

 

사이트에서 개발자도구를 열어보았다. asp 파일로 작성된 것을 알 수 있었다.


ASP(Active Server Page)

    • 웹 프로그래밍 할 수 있도록 해 주는 서버에서 동작하는 페이지로써 기존의 HTML 페이지와는 상당히 다른 동적인 구성을 가질 수 있게 해 준다.
    • 서버 내에서 ASP를 해석하는 특정 처리를 한 후, 그 처리 결과를 html태그로 번역하여 형식을 바꾼 뒤, 만들어진 페이지를 새로 사용자의 브라우저에게 보낸다.
    • html: 사용자가 다운받아 자신의 로컬 하드에 카피해놓으면, 언제라도 더블 클릭으로 브라우저에서 해석된 모습으로 확인 가능하다.
    • 그러나 ASP는 웹서버를 항상 거쳐야 처리의 결과를 볼 수 있기 때문에, 로컬 하드에서 페이지를 더블클릭해 실행하고자 하면, 다운로드 화면 혹은 연결 에디터를 만나게 될 것이다. 

 


소스코드를 해석해보겠다. 이 코드는 HTTP 요청에서 받은 문자열(str)을 처리하는 과정을 보여준다.

If not str = "" Then

 

 

str이 빈 문자열이 아닌 경우에만 아래의 코드를 실행한다. 

  result = Replace(str,"a","aad")
  result = Replace(result,"i","in")
  1.  
  • Replace(str, "a", "aad"): 입력 문자열에서 모든 'a'를 'aad'로 대체한다. 
  • Replace(result, "i", "in"): 결과 문자열에서 모든 'i'를 'in'으로 대체한다. 

replace() 함수: 문자열의 특정 부분을 검색하여 다른 문자열로 대체(replace)하는 함수이다. 

result1 = Mid(result,2,2)
result2 = Mid(result,4,6)

 

  • Mid(result, 2, 2): result의 두 번째 문자부터 두 글자를 추출하여 result1에 저장한다. 
  • Mid(result, 4, 6): result의 네 번째 문자부터 여섯 글자를 추출하여 result2에 저장한다. 

Mid() 함수: 선택한 문자열의 지정한 위치부터 원하는 문자수만큼 문자열을 반환한다. 

 MID ( 추출할_문자열, 시작위치, 추출할_문자수 )
result = result1 & result2
Response.write result

 

result1과 result2를 결합하여 result에 저장한다. 이 최종 result 값을 HTTP 응답으로 출력한다. 

 If result = "admin" Then
     pw = "????????"

 

최종 result가 "admin"과 같으면 pw 변수에 "????????"를 할당한다. 

결국, result = "admin" 이 되어야한다는 말이다!

 

다시 거꾸로 조건들을 살펴보면 2, 3번째 문자(=result1)가 ad, 4번째부터의 문자(=result2)가 min이 되어야 한다.

모든 a는 add로 대체되므로 일단 a가 첫문자로 있어야한다. 일단 aad까지 완성.

또한 모든 i는 in으로 대체되므로 i도 필요하다. 

따라서 ami를 입력하면, "aadmin"이 되므로 result1 = "ad", result2 = "min"이 되어 pw를 얻을 수 있다!

ami를 입력해주면

문제 풀이에 성공하였다!