써니나타스
웹해킹, 포렌식, 리버싱, 암호학, 해킹 워게임 제공.
www.suninatas.com
1번 문제는 웹해킹 문제로, ASP의 코드를 확인하고, pw 값을 도출해내는 문제이다.
처음 문제에 들어가면, Check를 할 수 있는 입력칸과 현재 ASP의 코드로 보이는 것들이 적혀있다.
그림 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의 설명을 참고하면 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 값부터 확인을 해보자
result 값이 admin이 되어야 하며, 이 result값은 result1과 result2가 서로 더해진 값이다.
즉, "admin" = result1 + result2이다.
result1은 result의 2번째 문자부터 2글자를 뽑아낸 문자열이고, result2는 result의 4번째 문자부터 6글자를 뽑아낸 문자열이다.
이를 시각화하면 다음과 같다.
abcdefghi (result1 result2)
때문에 admin을 만들기 위해서는 result값이
aadmin
이어야 한다.
* Mid 함수는 시작점 + 길이값이 문자열의 길이보다 긴 경우, 문자열의 끝까지만 반환한다. 이때 시작점 값이 문자열 길이보다 긴 경우, "" 와 같이 빈 문자열을 반환하게 된다.
a는 aad가 되고, i는 in이 되므로 ami만 입력한다면
ami -> aadmi -> aadmin
과 같은 과정을 통해 원하는 문자열을 만들어 낼 수 있게 된다.
그림 6과 같이 ami를 입력하고 check를 누른다.
그림 7과 같이 축하 메시지가 뜨더니
그림 8과 같이 Flag를 획득 할 수 있다.
따라서, Flag는 k09rsogjorejv934u592oi 이다.
앞으로 어떻게 문제들이 진행되고 인증을 하면 되는 것인지 알려주는 정말 간단한 문제였다고 할 수 있다.
'Wargaming > SuNiNaTaS' 카테고리의 다른 글
[ SuNiNaTaS ] Game 02 (0) | 2022.03.06 |
---|