보안 실습

[문제 풀이] Suninatas Web 문제 1

1학년 2024. 7. 2. 00:47

먼저 문제를 간단하게 살펴보면 

1. ASP 코드

2. 코드에 pw에 해당하는 값을 찾아야하는 것 같음.

3. str에 넣은 값에 따라 결과가 달라지는 것을 확인할 수 있음

str에 값을 넣는 방식은 main 밑에 빈칸에 값을 넣어봄으로써 확인가능

ex) 확인차 

str이라는 값을 넣어봄.

옆에 Check 클릭시 

url이

web01.asp 뒤에 아무것도 없는 상태에서

?str=str이라는 값이 추가된 것을 확인할 수 있다.

 

4. str에

이 부분에 만족하도록 값을 작성하면 되는 것 같음.

 

<문제풀이>

주어진 코드를 천천히 읽어보면 

str에 들어간 값이 "" 이 아니면 (아무것도 없는게 아니라면)

Then 다음 항목들을 실행한다.

 

result = Replace(str,"a","aad") 

result = Replace(result,"i","in")

여기서 Replace함수는 문자열 대체함수로

1번째 명령부분을 예로 들면

str 변수에 있는 값에서 "a"라는 문자가 있다면 이 "a"라는 문자를

"aad"로 바꾼다는 의미이다.

 

"a" -> "aad" / "i" -> "in" 으로 바꾼다는 문장이다.

 

result1 = Mid(result,2,2)

result2 = Mid(result,4,6)

 

Mid함수는 텍스트 문자열에서 지정된 위치로부터 지정된 개수만큼 반환하는 함수이다.

그러면 result1번을 예로 들면

result 변수에 들어있는 값에서 2번째 (abcde가 들어있다고 생각하면 a는 1번째이다.)값부터 2개의 문자를 반환하겠다는 이야기이다. 

result2번은 4번째값부터 6개를 반환

 

위에서 나온 result1과 result2의 값을 합쳤을 때 "admin"이 나온다면 pw를 반환하겠다는 코드인 것이다.

 

종합해서 풀어보면

"a" -> "aad"로 반환해주기 때문에 str 값에는 "a"가 들어가야한다.

그리고 "i" -> "in"으로 반환해주기 때문에 "i"도 들어가 "ai"가 되는데, 

여기서 밑에 result1과 result2의 값을 합쳤을 때 "admin"이 나오기 위해서는 

2개 6개를 가지고 오기 때문에 

result1는 ad

result2는 min이 들어가야한다. 

 

str에 "ai"를 넣었다고 가정했을 때 

1) str = ai

2) result = aadi

3) result = aadin 상태로 들어가기 때문에 result1은 str이 ai라면 ad만 추출되어 맞는 이야기가 된다.

result2가 min을 반환해야하기 때문에 위에 "ai"를 넣은 상태에서는 

aadin에서 in만을 가져오게되어 "m"이 없는 상황이 나온다. 

그렇기 때문에 이부분을 채워주기 위해 "m"을 추가해

str에 "ami"를 넣어주게 되면 

Congratulation! 팝업창과 함께

Authkey를 확인할 수 있게 된다.