써니나타스

웹해킹, 포렌식, 리버싱, 암호학, 해킹 워게임 제공.

www.suninatas.com

1번 문제는 웹해킹 문제로, ASP의 코드를 확인하고, pw 값을 도출해내는 문제이다.

 

처음 문제에 들어가면, Check를 할 수 있는 입력칸과 현재 ASP의 코드로 보이는 것들이 적혀있다.

그림 1

그림 1에서 대충 코드를 읽어보면

 

특정한 과정을 거친 result값이 admin이어야 pw를 획득 할 수 있는 것으로 보인다.

 

우선 눈에 보이는 객체, 메소드들부터 정리를 해보자


 

- Request

 

Request Object

Table of contents Request Object Article 06/16/2017 2 minutes to read In this article --> The Request object retrieves the values that the client browser passed to the server during an HTTP request. Methods The Request object defines the following method.

docs.microsoft.com

그림 2

그림 2의 설명을 참고하면 Request(변수 이름)과 같이 호출을 했을 경우,

 

QueryString(GET 메소드의 파라미터) -> Form(POST 메소드의 파라미터) -> 쿠키값 -> 클라이언트 인증 -> 서버 변수 순으로 값을 탐색한다고 한다.

 

즉, 그림 1에서의 Request 객체는 GET이나 POST에 상관 없이, str 값을 찾아 str 변수에 전달한다.

 

- Replace

 

Strings.Replace(String, String, String, Int32, Int32, CompareMethod) Method (Microsoft.VisualBasic)

Returns a string in which a specified substring has been replaced with another substring a specified number of times.

docs.microsoft.com

 

다른 언어에서 흔히 사용되는 replace 함수와 같이

 

Replace(변수명, 변경할려는 문자열, 새로 바꿀 문자열)

 

과 같이 사용되는 것으로 보이며

 

그림 1에서는 a를 찾아 aad로 변경하고, 그 다음은 i를 찾아 in으로 변경하는 것으로 보인다.

 

예시로, admin을 입력했다고 가정하면 aadminn과 같이 출력이 된다.

 

- Mid

 

Strings.Mid Method (Microsoft.VisualBasic)

Returns a string that contains characters from a specified string.

docs.microsoft.com

문자열을 자르는 함수다.

 

Mid(문자열, 시작점, 길이)

 

와 같이 사용된다.

 

이때 시작점은 문자열의 첫 문자를 기준으로 1부터 시작하며, 길이는 시작점을 기준으로 얼마만큼의 문자를 뽑아올지를 결정한다.

 

예시로, Mid("abcdef", 2, 2)는 bc를 반환한다.

 

- & 연산자

 

& Operator - Visual Basic

Learn more about: & Operator (Visual Basic)

docs.microsoft.com

두 개의 문자열을 더하는 연산자이다.

 

"abc" & "def" 는 "abcdef"를 반환한다.


그림 1에서 필요한 값을 도출하기 위해서는 아래쪽에서부터 역순으로 거슬러 올라가보도록 한다.

 

우선 제일 아래 result 값부터 확인을 해보자

그림 3

result 값이 admin이 되어야 하며, 이 result값은 result1과 result2가 서로 더해진 값이다.

 

즉, "admin" = result1 + result2이다.

그림 4

result1은 result의 2번째 문자부터 2글자를 뽑아낸 문자열이고, result2는 result의 4번째 문자부터 6글자를 뽑아낸 문자열이다.

 

이를 시각화하면 다음과 같다.

 

abcdefghi       (result1    result2)

 

때문에 admin을 만들기 위해서는 result값이

 

aadmin

 

이어야 한다.

 

* Mid 함수는 시작점 + 길이값이 문자열의 길이보다 긴 경우, 문자열의 끝까지만 반환한다. 이때 시작점 값이 문자열 길이보다 긴 경우, "" 와 같이 빈 문자열을 반환하게 된다.

그림 5

a는 aad가 되고, i는 in이 되므로 ami만 입력한다면

 

ami -> aadmi -> aadmin

 

과 같은 과정을 통해 원하는 문자열을 만들어 낼 수 있게 된다.

그림 6

그림 6과 같이 ami를 입력하고 check를 누른다.

그림 7

그림 7과 같이 축하 메시지가 뜨더니

그림 8

그림 8과 같이 Flag를 획득 할 수 있다.

 

따라서, Flag는 k09rsogjorejv934u592oi 이다.

 

앞으로 어떻게 문제들이 진행되고 인증을 하면 되는 것인지 알려주는 정말 간단한 문제였다고 할 수 있다.

'Wargaming > SuNiNaTaS' 카테고리의 다른 글

[ SuNiNaTaS ] Game 02  (0) 2022.03.06

+ Recent posts