본문 바로가기
CTF/SuNiNaTaS

[CTF] SuNiNaTaS(써니나타스) 1번 Write-Up | Web

by spareone 2022. 10. 2.

 써니나타스 1번 문제풀이 Write Up 입니다.

 

[그림 1] Level 1 접속 페이지

 해당 문제에 접속하면 다음과 같은 페이지가 나옵니다.

[그림 2] TextBox에 값 입력

 지금 가장 눈에 띄는 것은 텍스트박스와 Check 버튼이므로, 아무 값을 입력하고 Check 버튼을 눌러 보겠습니다.

 

[그림 3] 값 입력 후 URL 변화

 입력된 문자열이 GET 방식으로 전송된 것을 확인할 수 있습니다.

 

[그림 4] Level 1 소스코드

 이제 해당 페이지의 코드를 살펴봅니다.

 str로 임의의 문자열을 받고, 해당 문자열이 admin이면 flag가 나타나나 봅니다.

 다만 중간에 문자열이 변하는 함수가 있으므로, 최종 결과물이 admin이 되기 위한 문자열을 넣어야 합니다.

 

 해당 소스코드는 ASP로 작성되었고, 코드에 쓰여진 문자열 조작 함수는 다음과 같습니다.

 

 Replace([해당 문자열], [변경할 문자열], [새로운 문자열])    // 해당하는 문자열을 새로운 문자열로 교체

 Mid([해당 문자열], [n], [m])   // n번째의 문자열부터 m개의 문자열 가져오기 (n의 index는 1부터 시작)

 result1 & result2   // result1과 result2의 문자열을 합치기

 

 핵심이 되는 코드를 살펴보겠습니다.

result = Replace(str,"a","aad")    // 문자열 a -> aad로 교체합니다.  ex) admin -> aaddmin
result = Replace(result,"i","in")   // 문자열 i -> in로 교체합니다.   ex) admin -> adminn
result1 = Mid(result,2,2)   // result에서 2번째 문자부터 2개를 가져옵니다.
result2 = Mid(result,4,6)   // result에서 4번째 문자부터 6개를 가져옵니다.
result = result1 & result2  // result1 문자열과 result2 문자열을 합칩니다.


If result = "admin" Then  // result가 admin이면 flag가 나타납니다.

 

 result1 과 result2가 합쳐진 최종 결과가 admin입니다.

 result1은 2개의 문자가 들어가니까, result1 = 'ad' / result2 = 'min'이 됩니다.

 

 result1은 result의 2번째 문자부터 2개를 가져오니, aad

 result2는 result의 4번째 문자부터 6개를 가져오니, min

 원래 result = 'aadmin' 이었고, Replace()를 역으로 수행하면 'ami'가 됩니다.

 

 따라서 정답은 ami입니다.

댓글